Commit graph

53 commits

Author SHA1 Message Date
Tiago Yamamoto
fb79e987bb feat: add location selector and contract types
Backend:
- Created LocationHandler, LocationService, LocationRepository
- Added endpoints: GET /api/v1/locations/countries, states, cities, search
- Added migration 029_expand_employment_types.sql with new contract types (permanent, training, temporary, voluntary)
- Fixed .gitignore to allow internal/api folder

Frontend:
- Created LocationPicker component with country dropdown and city/state autocomplete search
- Integrated LocationPicker into PostJobPage
- Updated contract type options in job form (Permanent, Contract, Training, Temporary, Voluntary)
- Added locationsApi with search functionality to api.ts
2025-12-26 15:18:16 -03:00
Tiago Yamamoto
e5d0cd483a feat: Implement Dynamic Credentials Management
Backend:
- Added GET /api/v1/system/credentials to list configured services
- Added DELETE /api/v1/system/credentials/{service}
- Updated CredentialsService to support listing without revealing secrets

Frontend:
- Updated Settings page with Tabs
- Added 'Integrations' tab to manage credentials
- Allows Configuring (Update) and Deleting credentials
- Lists status of Appwrite, Stripe, Firebase, etc.
2025-12-26 14:43:35 -03:00
Tiago Yamamoto
841b1d780c feat: Email System, Avatar Upload, Email Templates UI, and Public Job Posting
- Backend: Email producer (LavinMQ), EmailService interface
- Backend: CRUD API for email_templates and email_settings
- Backend: avatar_url field in users table + UpdateMyProfile support
- Backend: StorageService for pre-signed URLs
- NestJS: Email consumer with Nodemailer and Handlebars
- Frontend: Email Templates admin pages (list/edit)
- Frontend: Updated profileApi.uploadAvatar with pre-signed URL flow
- Frontend: New /post-job public page (company registration + job creation wizard)
- Migrations: 027_create_email_system.sql, 028_add_avatar_url_to_users.sql
2025-12-26 12:21:34 -03:00
Tiago Yamamoto
722e72cdbd Implement FCM Token Management (DB, Backend, Frontend, Backoffice) 2025-12-26 10:41:50 -03:00
Tiago Yamamoto
f1fc45b5ce Add company edit section to profile page for Admin users 2025-12-26 10:12:56 -03:00
Tiago Yamamoto
f51a8dd99c fix: resolved user profile 500 error, fixed frontend build types, enhanced logging, increases test coverage 2025-12-26 01:35:34 -03:00
Tiago Yamamoto
3fa875ed98 feat: implemented delete application endpoint and dashboard action 2025-12-26 01:29:31 -03:00
Tiago Yamamoto
7b76b62490 feat(backoffice): implemented edit and delete company functionality 2025-12-26 01:23:01 -03:00
Tiago Yamamoto
546e253a5f feat(companies): add view modal and fix createdAt field
- Added modal dialog to view company details when clicking eye icon
- Fixed createdAt field name (was created_at, Go returns camelCase)
- Expanded AdminCompany type to include all company fields
- Modal shows: status badges, contact info, description, timestamps
2025-12-26 00:47:04 -03:00
Tiago Yamamoto
cb6afe9583 fix(frontend): enable job delete/update API calls and add logging
- Added update() and delete() methods to jobsApi in api.ts
- Fixed handleDeleteJob to call jobsApi.delete() instead of just local state
- Fixed handleSaveEdit to call jobsApi.update() instead of being commented out
- Added console logging to all CRUD operations for debugging
2025-12-25 22:41:38 -03:00
Tiago Yamamoto
4eae018a25 fix(backoffice): use string IDs for companies/jobs/users, fix audit log, ensure real tags support 2025-12-24 19:43:49 -03:00
Tiago Yamamoto
617bb5ab39 fix(rbac): add migration to fix seeded users roles and patch notifications store 2025-12-24 18:14:35 -03:00
Tiago Yamamoto
37512a7d1c fix(frontend): save token to legacy 'token' key for backward compatibility 2025-12-24 17:22:46 -03:00
Tiago Yamamoto
c1650fd1a4 fix(frontend): check both 'auth_token' and 'token' in api client
Unblocks API calls by correctly reading the token saved by auth.ts
2025-12-24 17:16:54 -03:00
Tiago Yamamoto
d3c06f5564 feat: expand testing, add fast seeder options, hardcode superadmin
- start.sh: Add options 8 (Seed LITE - skip cities) and 9 (Run All Tests)
- seeder: Add seed:lite, seed:fast scripts and --skip-locations flag
- seeder: Remove superadmin creation (now via backend migration)
- backend: Update 010_seed_super_admin.sql with hardcoded hash (Admin@2025! + pepper)
- backend: Expand jwt_service_test.go with 5 new tests (+10% coverage)
- frontend: Fix api.test.ts URL duplication bug, add error handling tests
- seeder: Add SQL data files to .gitignore
2025-12-24 17:07:45 -03:00
Tiago Yamamoto
dec9dc4897 fix(frontend): fix TypeScript errors in auth.test.ts
- Add 'as const' to role literals for proper type inference
- Fixes build error: Type 'string' not assignable to 'candidate' | 'admin' | 'company'
2025-12-24 16:32:25 -03:00
Tiago Yamamoto
c1078563df refactor(roles): rename companyAdmin->admin and jobSeeker->candidate 2025-12-24 13:30:50 -03:00
Tiago Yamamoto
246c55b0f5 feat: add advanced filters UI to jobs page
Frontend:
- Add salaryMin, salaryMax, currencyFilter, visaSupport state
- Enable sortBy dropdown with 4 options (recent, salary_desc, salary_asc, relevance)
- Add currency filter (BRL, USD, EUR, JPY)
- Update api.ts jobsApi.list with new filter params
- Fix employmentType query param name (was 'type')

All filters now match backend API endpoints
2025-12-24 11:46:12 -03:00
Tiago Yamamoto
340911b4d1 feat(auth): add cookie parsing and JWT auth guard to backoffice
- Add JWT auth guard with Bearer token and cookie support
- Update .env.example files with PASSWORD_PEPPER documentation
- Update seeder to use PASSWORD_PEPPER for password hashing
- Update seeder README with hash verification examples
- Fix frontend auth and page components
- Update backend JWT service and seed migration
2025-12-24 10:27:04 -03:00
Tiago Yamamoto
02f35b46b6 feat: implement dynamic dashboard, auth hardening (pepper/httponly) and backend tests 2025-12-24 01:30:33 -03:00
Tiago Yamamoto
0f2aae3073 fix(backoffice): force 0.0.0.0 binding to resolve deployment crash
refactor(backend): consolidate admin routes and implement RBAC

feat(frontend): update api client to use consolidated routes
2025-12-24 00:59:33 -03:00
Tiago Yamamoto
35d3032d52 feat: add backoffice API client with NEXT_PUBLIC_BACKOFFICE_URL env var 2025-12-23 23:56:12 -03:00
Tiago Yamamoto
b7987dead9 fix: use NEXT_PUBLIC_API_URL env var for API requests 2025-12-23 23:50:56 -03:00
Tiago Yamamoto
42e9f81f48 feat: enhance job form with currency, salary periods, contract types, and add ER diagram docs 2025-12-23 22:49:33 -03:00
Tiago Yamamoto
80d38ee615 feat(frontend): add multi-step job posting wizard with API integration 2025-12-23 22:40:19 -03:00
Tiago Yamamoto
300c76a156 fix(frontend): Export missing APIs for dashboard and backoffice 2025-12-23 19:37:47 -03:00
Tiago Yamamoto
398f1904dd fix(frontend): Use correct admin endpoint for company pagination 2025-12-23 19:27:22 -03:00
Tiago Yamamoto
78ce341370 feat: Implement Ticket System, Profile Page integration, and fix migrations 2025-12-23 19:22:55 -03:00
Tiago Yamamoto
fd59bfacb2 feat(frontend): implement view, edit and delete actions for admin jobs 2025-12-23 18:53:09 -03:00
Tiago Yamamoto
8aada931b5 fix(frontend): remove any type from i18n key traversal 2025-12-23 18:44:09 -03:00
Tiago Yamamoto
592af3216e feat: connect Apply Now to applications API
Frontend changes:
- Add applicationsApi with create() and getByJob() in api.ts
- Update apply/page.tsx to fetch job from API and submit to backend
- Fix job detail page requirements null check
- Use ApiJob type instead of mock Job type
- Replace job.company with job.companyName throughout

Note: Backend has type mismatch issues that need fixing:
- jobs endpoint: varchar vs integer comparison
- applications: null id constraint
2025-12-23 08:29:15 -03:00
Tiago Yamamoto
ce0531fefc feat: connect registration and jobs to real API
Backend fixes:
- Fix FK violation in candidate registration by creating company first
- Add CompanyRepository to RegisterCandidateUseCase
- Add handler integration tests for validation

Frontend improvements:
- Add registerCompany function in auth.ts
- Connect company registration form to backend API
- Replace mockJobs with API call in job detail page
- Add loading/error states to job detail page
- Add Jest tests for auth module
2025-12-23 08:19:49 -03:00
Tiago Yamamoto
b09bd023ed feat: security refactor, server-side pagination, and docs update
- impl(frontend): server-side pagination for jobs listing
- impl(frontend): standardized api error handling and sonner integration
- test(frontend): added unit tests for JobCard
- impl(backend): added SanitizeMiddleware for XSS protection
- test(backend): added table-driven tests for JobService
- docs: updated READMES, created ROADMAP.md and DATABASE.md
- fix(routing): redirected landing page buttons to /jobs
2025-12-23 00:50:51 -03:00
Tiago Yamamoto
743b2842c0 feat: Enhance platform with funny jobs, FAQ, Skeleton UI, and Tests 2025-12-22 23:48:56 -03:00
Tiago Yamamoto
aab5822f48 Add timeout to API requests 2025-12-22 19:51:54 -03:00
Tiago Yamamoto
e71fc361ac Add dynamic candidate management data 2025-12-22 19:18:15 -03:00
Tiago Yamamoto
5e99115df6 Add CRUD logging and stabilize dashboard dates 2025-12-22 18:55:43 -03:00
Tiago Yamamoto
9c17a7a15a Add paginated users listing 2025-12-22 16:43:54 -03:00
Tiago Yamamoto
58cfd76675 Add admin backoffice routes and dashboard 2025-12-22 16:37:05 -03:00
Tiago Yamamoto
18a1eb704d Translate UI and rename routes to English 2025-12-22 15:30:06 -03:00
Tiago Yamamoto
af7b68ee86 Fix login i18n and forgot password page 2025-12-22 13:45:02 -03:00
Tiago Yamamoto
ad9468bbb6 chore(frontend): set default locale to en 2025-12-15 15:13:18 -03:00
Tiago Yamamoto
4693bc5737 feat(frontend): complete i18n implementation and set default to pt-BR 2025-12-15 15:10:36 -03:00
Tiago Yamamoto
640eb10703 feat(frontend): add work mode filter and randomize seeder types 2025-12-15 14:44:14 -03:00
Tiago Yamamoto
d3d6ae2991 test(frontend): add jest setup and integration tests for API client 2025-12-15 10:26:12 -03:00
Tiago Yamamoto
39b84996d1 feat(i18n): 🎣 hook para pescar traduções automaticamente 2025-12-15 08:58:21 -03:00
Tiago Yamamoto
9b4601f1d8 feat: implement dynamic featured jobs
- Add is_featured column to jobs table (migration)
- Update Job model and Service to support featured jobs
- Update JobHandler to expose featured jobs API
- Support filtering by featured status in GET /jobs
- Frontend: Fetch and display featured jobs from API
- Frontend: Update Job type definition
2025-12-14 15:43:43 -03:00
Tiago Yamamoto
a4abcf8e05 feat: SEO optimization and dynamic jobs API integration
Backend:
- Add Swagger annotations to all job handlers (GET, POST, PUT, DELETE)
- Clean up job handler code

Frontend:
- Expand api.ts with ApiJob types, pagination, and transform function
- Update footer with 'Vagas por Tecnologia' SEO links
- Add robots.txt with crawler directives
- Add sitemap.xml with main pages and job URLs
- Change branding to GoHorse Jobs
2025-12-14 09:16:44 -03:00
Tiago Yamamoto
18ac6d74f0 chore: update port configuration to avoid conflicts
Port Configuration:
- Backend: 8521 (was 8080/8158)
- Frontend: 8963 (was 3000)

Files updated:
- backend/.env.example: updated PORT and CORS_ORIGINS
- frontend/src/lib/auth.ts: API_URL default to 8521
- frontend/src/lib/api.ts: API_URL default to 8521
- frontend/src/lib/storage.ts: API_URL default to 8521
- run_dev.sh: added port flags and service info display

Usage:
  ./run_dev.sh
  # Backend:  http://localhost:8521
  # Frontend: http://localhost:8963
2025-12-11 17:06:37 -03:00
Tiago Yamamoto
fdd67b8cd6 Merge branch 'hml' into dev 2025-12-11 14:59:40 -03:00