Fix production TypeScript builds and add DEPLOY.md so the app can be hosted from this repo. Co-authored-by: Cursor <cursoragent@cursor.com>
5.4 KiB
5.4 KiB
Novya Database Architecture
This document implements the approved scalable database architecture for Novya using a Prisma-ready MySQL model.
Scope
- Backend target: Node.js + Hono
- Database target: MySQL (InnoDB, utf8mb4, UTC timestamps)
- ORM target: Prisma
- AI provider target: GapGPT via OpenAI-compatible runtime
Implemented Domains
- Identity and access
- Assessment engine (PCQ-24 ready, versioned)
- Program, lessons, and exercises
- User journey and progress tracking
- AI analysis and lesson-scoped chat
- Notifications, behavior telemetry, and admin snapshots
The concrete model is implemented in prisma/schema.prisma.
Domain Glossary and Lifecycle States
Assessment
AttemptPhase:pre,postAttemptStatus:in_progress,submitted,scored,canceled
Learning Journey
EnrollmentStatus:active,paused,completed,droppedUnlockReason:schedule,manual,prerequisite_completed,retryLessonProgressStatus:not_started,in_progress,completed,skippedSubmissionStatus:draft,submitted,reviewed
AI Runtime
AiRunType:assessment_analysis,final_report,exercise_feedback,lesson_chatAiRunStatus:queued,running,succeeded,failed,canceledChatRole:system,user,assistant,tool
Tables by Domain
Identity and Access
organizationsusersauth_identitiesauth_sessionsrolesuser_rolesuser_profilesconsentsuser_consents
Assessment Domain
assessment_scalesassessment_scale_versionsassessment_questionsassessment_optionsassessment_attemptsassessment_answersassessment_scoresassessment_comparisons
Program Content
programsprogram_versionslessonslesson_contentsexercisesexercise_prompts
User Journey and Progress
user_program_enrollmentsuser_lesson_unlocksuser_lesson_progressuser_exercise_submissionsuser_exercise_answersuser_journey_eventsdaily_activity_summaries
AI Runtime
ai_providersai_modelsai_promptsai_analysis_runsai_analysis_outputschat_sessionschat_messagesai_feedback
Notifications and Operations
notification_templatesnotificationsbehavior_logsaudit_logsadmin_report_snapshots
Relationship Map
users 1-1 user_profilesusers 1-N auth_sessionsusers N-N rolesviauser_rolesassessment_scales 1-N assessment_scale_versions 1-N assessment_questions 1-N assessment_optionsusers 1-N assessment_attempts 1-N assessment_answersassessment_attempts 1-N assessment_scoresassessment_comparisonsreferences both pre and post attemptsprograms 1-N program_versions 1-N lessons 1-N exercises 1-N exercise_promptsusers 1-N user_program_enrollmentsuser_program_enrollments 1-N user_lesson_unlocksand1-N user_lesson_progresschat_sessionsreferences(user, enrollment, lesson)andchat_messages N-1 chat_sessionsai_analysis_runsreferences(user, enrollment, provider, model, prompt)andai_analysis_outputs N-1 ai_analysis_runsai_feedbackreferences user and either lesson progress or exercise submission
ER Diagram (Text)
erDiagram
users ||--|| user_profiles : has
users ||--o{ auth_identities : links
users ||--o{ auth_sessions : owns
users ||--o{ user_roles : assigned
roles ||--o{ user_roles : grants
assessment_scales ||--o{ assessment_scale_versions : versions
assessment_scale_versions ||--o{ assessment_questions : contains
assessment_questions ||--o{ assessment_options : offers
users ||--o{ assessment_attempts : submits
assessment_attempts ||--o{ assessment_answers : has
assessment_attempts ||--o{ assessment_scores : produces
assessment_attempts ||--o| assessment_comparisons : preAttempt
assessment_attempts ||--o| assessment_comparisons : postAttempt
programs ||--o{ program_versions : versions
program_versions ||--o{ lessons : contains
lessons ||--o{ lesson_contents : renders
lessons ||--o{ exercises : includes
exercises ||--o{ exercise_prompts : asks
users ||--o{ user_program_enrollments : enrolls
user_program_enrollments ||--o{ user_lesson_unlocks : unlocks
user_program_enrollments ||--o{ user_lesson_progress : tracks
user_lesson_progress ||--o{ chat_sessions : scopes
chat_sessions ||--o{ chat_messages : stores
user_program_enrollments ||--o{ user_exercise_submissions : submits
user_exercise_submissions ||--o{ user_exercise_answers : contains
ai_providers ||--o{ ai_models : exposes
ai_prompts ||--o{ ai_analysis_runs : usedBy
ai_models ||--o{ ai_analysis_runs : runsOn
users ||--o{ ai_analysis_runs : requestedFor
ai_analysis_runs ||--o{ ai_analysis_outputs : emits
user_exercise_submissions ||--o{ ai_feedback : receives
users ||--o{ notifications : receives
users ||--o{ behavior_logs : generates
users ||--o{ audit_logs : affects
Implementation Notes
- High-write tables include indexed temporal access paths:
chat_messages(session_id, created_at)behavior_logs(user_id, created_at)assessment_attempts(user_id, phase, created_at)
- Content and assessments are versioned to preserve research reproducibility.
- AI output storage is append-only (
ai_analysis_runs,ai_analysis_outputs) to support auditable research workflows. - The schema keeps tenant-readiness via optional
organization_id.