Legal — Code Map
API
| File | Role |
|---|---|
apps/api/src/legal/legal.module.ts | Imports UsersModule; provides LegalService; exports for cross-module use (UsersService calls hasRequiredConsents in middleware) |
apps/api/src/legal/legal.controller.ts | GET /legal/documents (public), POST /legal/consents, GET /legal/consents/status |
apps/api/src/legal/legal.service.ts | getLatestDocuments, recordConsent, getConsentStatus, hasOutstandingConsents, hasRequiredConsents |
apps/api/src/legal/dto/record-consent.dto.ts | Validates { types: LegalDocumentType[], context, organizationId? } |
DB
| File | Role |
|---|---|
libs/db/src/lib/schema/legal.ts | legal_documents, legal_consents + relations |
libs/db/src/lib/schema/enums.ts | legal_document_type (5 values), consent_context (4 values) |
Shared
| File | Role |
|---|---|
libs/shared/src/lib/schemas/legal.schema.ts | LegalDocumentType, ConsentContext, response shapes |
Web
| File | Role |
|---|---|
apps/web/src/components/legal/legal-acceptance-form.tsx | Reusable acceptance dialog. Modes: standalone (with submit) or embedded (parent controls). Links out to fitkit.fit/{slug} for full document text |
apps/web/src/app/api/legal-document/route.ts | Web proxy for fetching the marketing-site canonical HTML |
apps/web/src/i18n/dictionaries/{en,he,ru}.json | legal.* keys for checkbox labels, errors, “Documents updated” banner copy |
i18n hot keys
legal.acceptTos, legal.acceptPrivacy, legal.acceptWaiver, legal.viewDocument, legal.updatedBanner, legal.submit.