- Add crates/cache with client, otp, rate_limit, token, lead, jobs modules
- OTP tokens stored in Redis (15-min TTL, single-use GETDEL on verify)
- Refresh tokens stored in Redis (30-day TTL) — removed DB storage
- Password reset tokens stored in Redis (1-hour TTL, single-use)
- Rate limiting: register (10/hr), login (10/15min), OTP resend (3/hr), lead (5/hr), job post (20/hr)
- Lead request deduplication: 24-hour Redis lock per professional+requirement pair
- Marketplace listings cached in Redis (5-min TTL per profession+page+limit)
- Add ProfessionState{pool, redis} to contracts crate, replacing bare PgPool in all 9 profession apps
- All profession handlers and main.rs updated to use ProfessionState
- REDIS_URL env var (default: redis://127.0.0.1:6379) used across all services
- Fix profession model struct name mangling in 6 handlers (MakeupArtistRepository etc.)
- Add custom_data JSONB migration for all 9 profession profile tables
- Add onboarding_state model and repository (save_progress, complete, is_complete)
- Add onboarding handler accepting roleKey:String (not role_id:UUID) for frontend compat
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
24 lines
1.7 KiB
SQL
24 lines
1.7 KiB
SQL
-- Make display_name / business_name nullable so upserts can work
|
|
-- without forcing the name on every call.
|
|
-- Add custom_data JSONB to every profession table so all onboarding
|
|
-- form fields are preserved even if they don't have a dedicated column.
|
|
|
|
ALTER TABLE photographer_profiles ALTER COLUMN display_name DROP NOT NULL;
|
|
ALTER TABLE tutor_profiles ALTER COLUMN display_name DROP NOT NULL;
|
|
ALTER TABLE makeup_artist_profiles ALTER COLUMN display_name DROP NOT NULL;
|
|
ALTER TABLE developer_profiles ALTER COLUMN display_name DROP NOT NULL;
|
|
ALTER TABLE video_editor_profiles ALTER COLUMN display_name DROP NOT NULL;
|
|
ALTER TABLE graphic_designer_profiles ALTER COLUMN display_name DROP NOT NULL;
|
|
ALTER TABLE social_media_manager_profiles ALTER COLUMN display_name DROP NOT NULL;
|
|
ALTER TABLE fitness_trainer_profiles ALTER COLUMN display_name DROP NOT NULL;
|
|
ALTER TABLE catering_service_profiles ALTER COLUMN business_name DROP NOT NULL;
|
|
|
|
ALTER TABLE photographer_profiles ADD COLUMN IF NOT EXISTS custom_data JSONB;
|
|
ALTER TABLE tutor_profiles ADD COLUMN IF NOT EXISTS custom_data JSONB;
|
|
ALTER TABLE makeup_artist_profiles ADD COLUMN IF NOT EXISTS custom_data JSONB;
|
|
ALTER TABLE developer_profiles ADD COLUMN IF NOT EXISTS custom_data JSONB;
|
|
ALTER TABLE video_editor_profiles ADD COLUMN IF NOT EXISTS custom_data JSONB;
|
|
ALTER TABLE graphic_designer_profiles ADD COLUMN IF NOT EXISTS custom_data JSONB;
|
|
ALTER TABLE social_media_manager_profiles ADD COLUMN IF NOT EXISTS custom_data JSONB;
|
|
ALTER TABLE fitness_trainer_profiles ADD COLUMN IF NOT EXISTS custom_data JSONB;
|
|
ALTER TABLE catering_service_profiles ADD COLUMN IF NOT EXISTS custom_data JSONB;
|