Commit graph

134 commits

Author SHA1 Message Date
Tiago Yamamoto
afab4e89cd refactor: merge company and job form into single step
- Reduced form from 3 steps to 2 steps
- Step 1 now contains both company and job data with visual separator
- Step 2 is confirmation only
- Updated progress indicators and card headers
- Fixed navigation button references
2025-12-26 15:53:15 -03:00
Tiago Yamamoto
249081554d feat: add company profile fields
Backend:
- Created migration 031 for employee_count and founded_year
- Updated Company model with EmployeeCount and FoundedYear
- Updated core DTO with website, employeeCount, foundedYear, description

Frontend:
- Added website input field to company form
- Added employee count dropdown (1-10, 11-50, etc.)
- Added founded year input
- Added 'About Company' rich text editor
- Updated API payload to send new fields
2025-12-26 15:48:13 -03:00
Tiago Yamamoto
cca951ca23 feat: add currency, salary period, and rich text description
Frontend:
- Added currency selector (BRL, USD, EUR, JPY, GBP, CNY, AED, CAD, AUD, CHF)
- Added salary period dropdown (hourly, daily, weekly, monthly, yearly)
- Created RichTextEditor component for job descriptions (Bold, Lists, Alignment)
- Updated confirmation step to display currency symbol and period label

Backend:
- JobService now persists currency in job creation
- Extended currency validation in DTOs

Seeder:
- Already includes currency in job insertion
2025-12-26 15:37:54 -03:00
Tiago Yamamoto
91e4417c95 feat: add working hours and salary negotiable logic
Backend:
- Updated DTOs to include SalaryNegotiable and WorkingHours
- Updated JobService to map and persist these fields (CREATE, GET, UPDATE)
- Ensure DB queries include new columns

Frontend:
- Added 'Working Hours' (Jornada de Trabalho) dropdown to PostJobPage
- Updated state and submit logic
- Improved salary display in confirmation step

Seeder:
- Updated jobs seeder to include salary_negotiable and valid working_hours
2025-12-26 15:29:51 -03:00
Tiago Yamamoto
d6bb579260 feat: add salary options with toggle and candidate proposal
Backend:
- Added migration 030_add_salary_negotiable.sql
- Added SalaryNegotiable field to Job model

Frontend:
- Updated PostJobPage with salary mode toggle (fixed/range)
- Added 'Candidato envia proposta' checkbox to hide salary
- Updated job submission logic and confirmation display
2025-12-26 15:23:22 -03:00
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
818edf2575 fix: Resolve type mismatch in settings page credentials fetch 2025-12-26 14:57:32 -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
7d797aac2b fix: Add graceful handling for unconfigured Appwrite in messages page
When Appwrite is not configured:
- Shows friendly 'Service not configured' message
- Displays icon and helpful description
- Links to dashboard and settings
- Shows technical details in collapsible section
- Prevents client-side crash
2025-12-26 13:15:29 -03:00
Tiago Yamamoto
cb4fd35dc2 docs: Comprehensive FRONTEND.md update with all pages, components, and features 2025-12-26 12:47:53 -03:00
Tiago Yamamoto
867a155423 fix: Add missing appwrite dependency to package.json 2025-12-26 12:31:38 -03:00
Tiago Yamamoto
504c1025a5 debug: Add console logs to homepage to trace job data source 2025-12-26 12:30:16 -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
d771e2a3a9 Hide Companies menu item for non-superadmin users 2025-12-26 10:51:44 -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
d52a83f94b Redirect /profile to /dashboard/profile for dashboard layout 2025-12-26 10:09:41 -03:00
Tiago Yamamoto
78857b7afe Show Backoffice menu only for Superadmin users 2025-12-26 10:08:22 -03:00
Tiago Yamamoto
e0b16e5b29 Fix profile 404/500 and user deletion 403 2025-12-26 09:55:19 -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
43c0719664 feat(users): add company selection and status to create user modal 2025-12-26 01:18:14 -03:00
Tiago Yamamoto
6ab7e357fb fix(users): resolve 403 on update and enable role/status editing 2025-12-26 01:14:18 -03:00
Tiago Yamamoto
e47c25fac8 fix(companies): format JSON description in modal
- Added formatDescription helper to parse JSON and display as formatted list
- Shows tagline, stores, employees, motto etc as labeled fields
- Falls back to plain text if not JSON
2025-12-26 01:02:16 -03:00
Tiago Yamamoto
16012b701a fix(companies): remove Slug column from table 2025-12-26 01:01:10 -03:00
Tiago Yamamoto
aa97d86d0e feat(jobs): add public job posting page
- Created /register/job page with same layout as company registration
- Split panel design: info panel on left, form on right
- Two-step form: job details, then salary & company selection
- Uses same styling and animations as company registration
2025-12-26 00:54:33 -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
362b569c8d refactor(frontend): consolidate job creation into single page form
- Replaced 6-step wizard (673 lines) with single-page form (290 lines)
- Removed billing/payment steps for now
- All fields visible with clear section headers
- Save as Draft and Publish buttons
2025-12-25 22:11:16 -03:00
Tiago Yamamoto
39d1eff80f fix(frontend): fix string/number ID comparison in jobs page
- handleDeleteJob: compare string IDs directly instead of parseInt
- handleSaveEdit: use string ID for future update logic
- IDs are now UUIDs (strings) after migration
2025-12-25 21:49:09 -03:00
Tiago Yamamoto
39fde338b4 fix(frontend): pass string ID to adminCompaniesApi.updateStatus 2025-12-25 21:00:01 -03:00
Tiago Yamamoto
48dad702d6 fix(frontend): adjust admin jobs pagination property access 2025-12-24 19:53:54 -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
cc5ac7c73c feat: add profile page, dynamic dashboard, and fix candidate 500 error 2025-12-24 19:22:14 -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
7b5752f71f chore(docker): setup google mirror for base images 2025-12-24 17:46:57 -03:00
Tiago Yamamoto
0aa93d0440 fix(ui): use LoadingScreen in RootLayout suspense fallback 2025-12-24 17:28:53 -03:00
Tiago Yamamoto
63f4511020 feat(ui): improve initial loading screen with spinner 2025-12-24 17:28:24 -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
b72c63f947 chore(frontend): update jobs page 2025-12-24 16:23:16 -03:00
Tiago Yamamoto
3f89edd327 debug: add detailed logging for company options mapping 2025-12-24 15:09:25 -03:00
Tiago Yamamoto
7e0a58feb4 chore: add detailed debug logs for login flow 2025-12-24 14:26:09 -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
38a94bcbce feat: implement high priority features
1. Advanced Search (backend)
   - Add salaryMin, salaryMax, currency, sortBy to JobFilterQuery
   - Add 5+ filters: visa, salary range, currency, language level
   - Add 4 sort options: recent, salary_asc, salary_desc, relevance

2. Email Service (backend)
   - Create Resend API integration (email_service.go)
   - 3 HTML email templates: welcome, password_reset, application_received
   - Add RESEND_API_KEY, EMAIL_FROM, APP_URL env vars

3. i18n (frontend)
   - Create 4 language files: pt-BR, en-US, es-ES, ja-JP
   - 100+ translation keys per language
   - Covers: common, nav, auth, jobs, profile, company, footer

4. Stripe Integration (backend)
   - Create payment_handler.go with checkout session creation
   - Webhook handler with signature verification
   - Support for checkout.session.completed, payment_intent events
2025-12-24 11:40:53 -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