2026-03-16 22:23:58 +01:00
|
|
|
[workspace]
|
|
|
|
|
resolver = "2"
|
|
|
|
|
members = [
|
|
|
|
|
"apps/gateway",
|
|
|
|
|
"apps/users",
|
2026-03-17 20:42:51 +01:00
|
|
|
"apps/photographers",
|
|
|
|
|
"apps/tutors",
|
2026-03-16 22:23:58 +01:00
|
|
|
"apps/companies",
|
2026-03-17 20:42:51 +01:00
|
|
|
"apps/job_seekers",
|
2026-03-16 22:23:58 +01:00
|
|
|
"apps/customers",
|
2026-03-17 20:42:51 +01:00
|
|
|
"apps/makeup_artists",
|
|
|
|
|
"apps/developers",
|
|
|
|
|
"apps/video_editors",
|
|
|
|
|
"apps/graphic_designers",
|
|
|
|
|
"apps/social_media_managers",
|
|
|
|
|
"apps/fitness_trainers",
|
|
|
|
|
"apps/catering_services",
|
2026-03-16 22:23:58 +01:00
|
|
|
"crates/contracts",
|
|
|
|
|
"crates/db",
|
|
|
|
|
"crates/auth",
|
feat: add Redis for OTP, auth tokens, rate limiting, lead dedup and marketplace cache
- 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>
2026-03-18 22:58:42 +01:00
|
|
|
"crates/storage",
|
|
|
|
|
"crates/cache",
|
feat(phase1): wire email notifications, shared email crate, AppState for services
- Create crates/email shared Mailer with 18+ templates (auth, approvals, jobs, leads, tracecoins)
- users/mail.rs now re-exports from shared crate (lettre dep removed)
- Wire password changed/reset emails in users auth handlers
- Wire profile approval/rejection emails in users approvals handlers (company, customer, all 9 professional types)
- Wire job approved/rejected emails in users approvals handlers
- Wire requirement approved email in users approvals handlers
- Add AppState (pool + mail) to companies service; wire submit_job and update_application_status emails
- Add AppState (pool + mail) to customers service; wire submit_requirement, approve_request, reject_request emails (incl. contact-exchange on lead acceptance)
- Add AppState (pool + storage) to job_seekers service with resume upload multipart handler
- Wire lead cancellation and accepted-leads handlers in contracts/profession_shared.rs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 01:42:48 +02:00
|
|
|
"crates/email",
|
2026-04-02 13:09:43 +02:00
|
|
|
"apps/cron",
|
|
|
|
|
"apps/employees"
|
2026-03-16 22:23:58 +01:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[workspace.package]
|
|
|
|
|
edition = "2021"
|
|
|
|
|
license = "Proprietary"
|
|
|
|
|
authors = ["NXTGAUGE Team"]
|
|
|
|
|
|
|
|
|
|
[workspace.dependencies]
|
|
|
|
|
anyhow = "1"
|
|
|
|
|
axum = "0.8"
|
|
|
|
|
serde = { version = "1", features = ["derive"] }
|
|
|
|
|
serde_json = "1"
|
|
|
|
|
thiserror = "2"
|
|
|
|
|
tokio = { version = "1", features = ["full"] }
|
|
|
|
|
tracing = "0.1"
|
|
|
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
|
|
|
|
|
tonic = "0.12"
|
|
|
|
|
prost = "0.13"
|
|
|
|
|
sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "postgres", "uuid", "chrono", "json"] }
|
|
|
|
|
uuid = { version = "1", features = ["serde", "v4"] }
|
|
|
|
|
chrono = { version = "0.4", features = ["serde"] }
|
2026-03-22 15:55:29 +01:00
|
|
|
lettre = { version = "0.11", default-features = false, features = ["tokio1-rustls-tls", "smtp-transport", "builder", "serde"] }
|
|
|
|
|
redis = { version = "0.27", features = ["tokio-comp", "connection-manager"] }
|
|
|
|
|
async-trait = "0.1"
|
feat(phase1): wire email notifications, shared email crate, AppState for services
- Create crates/email shared Mailer with 18+ templates (auth, approvals, jobs, leads, tracecoins)
- users/mail.rs now re-exports from shared crate (lettre dep removed)
- Wire password changed/reset emails in users auth handlers
- Wire profile approval/rejection emails in users approvals handlers (company, customer, all 9 professional types)
- Wire job approved/rejected emails in users approvals handlers
- Wire requirement approved email in users approvals handlers
- Add AppState (pool + mail) to companies service; wire submit_job and update_application_status emails
- Add AppState (pool + mail) to customers service; wire submit_requirement, approve_request, reject_request emails (incl. contact-exchange on lead acceptance)
- Add AppState (pool + storage) to job_seekers service with resume upload multipart handler
- Wire lead cancellation and accepted-leads handlers in contracts/profession_shared.rs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 01:42:48 +02:00
|
|
|
bytes = "1"
|