Co-authored-by: cetinmustafa83 <30570791+cetinmustafa83@users.noreply.github.com>
3223 lines
131 KiB
SQL
3223 lines
131 KiB
SQL
-- CreateTable
|
|
CREATE TABLE "School" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"schoolType" TEXT NOT NULL,
|
|
"country" TEXT NOT NULL DEFAULT 'DE',
|
|
"timezone" TEXT NOT NULL DEFAULT 'Europe/Berlin',
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"logoUrl" TEXT,
|
|
"primaryColor" TEXT DEFAULT '#10b981',
|
|
"secondaryColor" TEXT DEFAULT '#14b8a6',
|
|
"accentColor" TEXT DEFAULT '#059669',
|
|
"fontFamily" TEXT DEFAULT 'Inter',
|
|
"customCss" TEXT,
|
|
"motto" TEXT,
|
|
"websiteUrl" TEXT,
|
|
"emailDomain" TEXT,
|
|
"address" TEXT,
|
|
"phone" TEXT,
|
|
"districtId" TEXT,
|
|
CONSTRAINT "School_districtId_fkey" FOREIGN KEY ("districtId") REFERENCES "school_districts" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT,
|
|
"email" TEXT NOT NULL,
|
|
"passwordHash" TEXT NOT NULL,
|
|
"firstName" TEXT NOT NULL,
|
|
"lastName" TEXT NOT NULL,
|
|
"role" TEXT NOT NULL DEFAULT 'TEACHER',
|
|
"locale" TEXT NOT NULL DEFAULT 'de',
|
|
"twoFactorSecret" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"isTeacher" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
"selectedCharacterId" TEXT,
|
|
CONSTRAINT "User_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SchoolYear" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"label" TEXT NOT NULL,
|
|
"startDate" DATETIME NOT NULL,
|
|
"endDate" DATETIME NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "SchoolYear_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ClassGroup" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"schoolYearId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"gradeLevel" INTEGER NOT NULL,
|
|
"schoolType" TEXT NOT NULL DEFAULT 'ELEMENTARY',
|
|
"seatingOrder" TEXT,
|
|
"responsibleTeacherId" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "ClassGroup_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ClassGroup_schoolYearId_fkey" FOREIGN KEY ("schoolYearId") REFERENCES "SchoolYear" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ClassGroup_responsibleTeacherId_fkey" FOREIGN KEY ("responsibleTeacherId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ClassGroupTeacher" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"role" TEXT NOT NULL DEFAULT 'SUBJECT_TEACHER',
|
|
CONSTRAINT "ClassGroupTeacher_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ClassGroupTeacher_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Student" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"firstName" TEXT NOT NULL,
|
|
"lastName" TEXT NOT NULL,
|
|
"dateOfBirth" DATETIME,
|
|
"externalId" TEXT,
|
|
"avatarUrl" TEXT,
|
|
"avatarInitials" TEXT,
|
|
"userId" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "Student_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "Student_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Enrollment" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"studentId" TEXT NOT NULL,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"schoolYearId" TEXT NOT NULL,
|
|
"startDate" DATETIME NOT NULL,
|
|
"endDate" DATETIME,
|
|
CONSTRAINT "Enrollment_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Enrollment_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Enrollment_schoolYearId_fkey" FOREIGN KEY ("schoolYearId") REFERENCES "SchoolYear" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Subject" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"gradeLevelMin" INTEGER NOT NULL DEFAULT 1,
|
|
"gradeLevelMax" INTEGER NOT NULL DEFAULT 13,
|
|
CONSTRAINT "Subject_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CompetencyTemplate" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"subjectId" TEXT,
|
|
"schoolType" TEXT NOT NULL DEFAULT 'ELEMENTARY',
|
|
"gradeLevelMin" INTEGER NOT NULL DEFAULT 1,
|
|
"gradeLevelMax" INTEGER NOT NULL DEFAULT 4,
|
|
"isGlobalTemplate" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdByUserId" TEXT,
|
|
"version" INTEGER NOT NULL DEFAULT 1,
|
|
"schoolId" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "CompetencyTemplate_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "CompetencyTemplate_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CompetencyCategory" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"competencyTemplateId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
"color" TEXT,
|
|
CONSTRAINT "CompetencyCategory_competencyTemplateId_fkey" FOREIGN KEY ("competencyTemplateId") REFERENCES "CompetencyTemplate" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Competency" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"categoryId" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
CONSTRAINT "Competency_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "CompetencyCategory" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "MasteryLevelDefinition" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"competencyId" TEXT NOT NULL,
|
|
"levelValue" INTEGER NOT NULL,
|
|
"label" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
CONSTRAINT "MasteryLevelDefinition_competencyId_fkey" FOREIGN KEY ("competencyId") REFERENCES "Competency" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ClassCompetencyAssignment" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"subjectId" TEXT NOT NULL,
|
|
"competencyTemplateId" TEXT NOT NULL,
|
|
"schoolYearId" TEXT NOT NULL,
|
|
"clonedTemplateId" TEXT,
|
|
CONSTRAINT "ClassCompetencyAssignment_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ClassCompetencyAssignment_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ClassCompetencyAssignment_competencyTemplateId_fkey" FOREIGN KEY ("competencyTemplateId") REFERENCES "CompetencyTemplate" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "LearningProgressEntry" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"studentId" TEXT NOT NULL,
|
|
"competencyId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"date" DATETIME NOT NULL,
|
|
"masteryLevelValue" INTEGER NOT NULL,
|
|
"note" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "LearningProgressEntry_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "LearningProgressEntry_competencyId_fkey" FOREIGN KEY ("competencyId") REFERENCES "Competency" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "LearningProgressEntry_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "LearningProgressEntry_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Assessment" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"subjectId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"date" DATETIME NOT NULL,
|
|
"type" TEXT NOT NULL DEFAULT 'TEST',
|
|
"maxScore" REAL,
|
|
"weight" REAL NOT NULL DEFAULT 1.0,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "Assessment_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Assessment_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Assessment_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AssessmentCompetencyLink" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"assessmentId" TEXT NOT NULL,
|
|
"competencyId" TEXT NOT NULL,
|
|
"weight" REAL NOT NULL DEFAULT 1.0,
|
|
CONSTRAINT "AssessmentCompetencyLink_assessmentId_fkey" FOREIGN KEY ("assessmentId") REFERENCES "Assessment" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "AssessmentCompetencyLink_competencyId_fkey" FOREIGN KEY ("competencyId") REFERENCES "Competency" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AssessmentResult" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"assessmentId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"score" REAL,
|
|
"masteryLevelValue" INTEGER,
|
|
"note" TEXT,
|
|
"annotationData" TEXT,
|
|
"annotationImage" TEXT,
|
|
CONSTRAINT "AssessmentResult_assessmentId_fkey" FOREIGN KEY ("assessmentId") REFERENCES "Assessment" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "AssessmentResult_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "GradingScheme" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"classGroupId" TEXT,
|
|
"subjectId" TEXT,
|
|
"schoolId" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL DEFAULT 'NUMERIC_GRADE',
|
|
"scaleDefinition" TEXT NOT NULL,
|
|
CONSTRAINT "GradingScheme_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "GradingScheme_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "GradingScheme_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "GradingWeightRule" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"gradingSchemeId" TEXT NOT NULL,
|
|
"sourceType" TEXT NOT NULL,
|
|
"targetRef" TEXT,
|
|
"weightPercent" REAL NOT NULL DEFAULT 50.0,
|
|
CONSTRAINT "GradingWeightRule_gradingSchemeId_fkey" FOREIGN KEY ("gradingSchemeId") REFERENCES "GradingScheme" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ComputedGrade" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"studentId" TEXT NOT NULL,
|
|
"subjectId" TEXT NOT NULL,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"schoolYearId" TEXT NOT NULL,
|
|
"period" TEXT NOT NULL DEFAULT 'Semester 1',
|
|
"computedValue" REAL NOT NULL,
|
|
"computedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"isFinalized" BOOLEAN NOT NULL DEFAULT false,
|
|
"overriddenValue" REAL,
|
|
"overrideReason" TEXT,
|
|
CONSTRAINT "ComputedGrade_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ComputedGrade_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ComputedGrade_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ComputedGrade_schoolYearId_fkey" FOREIGN KEY ("schoolYearId") REFERENCES "SchoolYear" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Report" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"studentId" TEXT NOT NULL,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"schoolYearId" TEXT NOT NULL,
|
|
"period" TEXT NOT NULL,
|
|
"generatedByUserId" TEXT NOT NULL,
|
|
"generatedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"status" TEXT NOT NULL DEFAULT 'DRAFT',
|
|
"pdfFilePath" TEXT,
|
|
"includesGrades" BOOLEAN NOT NULL DEFAULT false,
|
|
"teacherComments" TEXT,
|
|
"attendanceSummary" TEXT,
|
|
"overallAssessment" TEXT,
|
|
"templateId" TEXT,
|
|
"reviewedByUserId" TEXT,
|
|
"reviewedAt" DATETIME,
|
|
"publishedAt" DATETIME,
|
|
CONSTRAINT "Report_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Report_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Report_schoolYearId_fkey" FOREIGN KEY ("schoolYearId") REFERENCES "SchoolYear" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Report_generatedByUserId_fkey" FOREIGN KEY ("generatedByUserId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Report_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "ReportCardTemplate" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ReportCardTemplate" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"sections" TEXT NOT NULL DEFAULT '[]',
|
|
"gradingScale" TEXT NOT NULL DEFAULT '{}',
|
|
"layout" TEXT NOT NULL DEFAULT 'default',
|
|
"isDefault" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "ReportCardTemplate_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ReportSection" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"reportId" TEXT NOT NULL,
|
|
"competencyCategoryId" TEXT,
|
|
"generatedText" TEXT NOT NULL,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
CONSTRAINT "ReportSection_reportId_fkey" FOREIGN KEY ("reportId") REFERENCES "Report" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ReportSection_competencyCategoryId_fkey" FOREIGN KEY ("competencyCategoryId") REFERENCES "CompetencyCategory" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AuditLog" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"userId" TEXT,
|
|
"schoolId" TEXT,
|
|
"action" TEXT NOT NULL,
|
|
"entityType" TEXT NOT NULL,
|
|
"entityId" TEXT,
|
|
"changes" TEXT,
|
|
"ipAddress" TEXT,
|
|
"userAgent" TEXT,
|
|
"timestamp" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"metadata" TEXT,
|
|
"dataSubject" TEXT,
|
|
CONSTRAINT "AuditLog_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "AuditLog_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "DataExportRequest" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"requestedByUserId" TEXT NOT NULL,
|
|
"schoolId" TEXT,
|
|
"scope" TEXT NOT NULL,
|
|
"scopeId" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'PENDING',
|
|
"filePath" TEXT,
|
|
"requestedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"completedAt" DATETIME,
|
|
CONSTRAINT "DataExportRequest_requestedByUserId_fkey" FOREIGN KEY ("requestedByUserId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "DataExportRequest_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AttendanceSession" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"date" DATETIME NOT NULL,
|
|
"subjectId" TEXT,
|
|
"period" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'OPEN',
|
|
"note" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "AttendanceSession_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "AttendanceSession_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "AttendanceSession_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AttendanceRecord" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"sessionId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'PRESENT',
|
|
"arrivalTime" TEXT,
|
|
"comment" TEXT,
|
|
CONSTRAINT "AttendanceRecord_sessionId_fkey" FOREIGN KEY ("sessionId") REFERENCES "AttendanceSession" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "AttendanceRecord_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TeacherNote" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"studentId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"category" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"isPrivate" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "TeacherNote_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "TeacherNote_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "LessonPlan" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"teacherId" TEXT NOT NULL,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"subjectId" TEXT,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"date" DATETIME NOT NULL,
|
|
"durationMin" INTEGER NOT NULL DEFAULT 45,
|
|
"status" TEXT NOT NULL DEFAULT 'draft',
|
|
"objectives" TEXT,
|
|
"materials" TEXT,
|
|
"homework" TEXT,
|
|
"reflection" TEXT,
|
|
"linkedCompetencyIds" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "LessonPlan_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "LessonPlan_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "LessonPlan_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ParentContact" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"studentId" TEXT NOT NULL,
|
|
"firstName" TEXT NOT NULL,
|
|
"lastName" TEXT NOT NULL,
|
|
"email" TEXT,
|
|
"phone" TEXT,
|
|
"relationship" TEXT NOT NULL DEFAULT 'parent',
|
|
"preferredContact" TEXT NOT NULL DEFAULT 'email',
|
|
"preferredLanguage" TEXT NOT NULL DEFAULT 'de',
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "ParentContact_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ParentMessage" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"parentId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"subject" TEXT NOT NULL,
|
|
"body" TEXT NOT NULL,
|
|
"category" TEXT NOT NULL DEFAULT 'general',
|
|
"priority" TEXT NOT NULL DEFAULT 'normal',
|
|
"status" TEXT NOT NULL DEFAULT 'sent',
|
|
"readAt" DATETIME,
|
|
"reply" TEXT,
|
|
"replyAt" DATETIME,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "ParentMessage_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "ParentContact" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ParentMessage_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ParentMessage_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "BehaviorCategory" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"color" TEXT NOT NULL,
|
|
"valence" TEXT NOT NULL,
|
|
"icon" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "BehaviorCategory_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "BehaviorIncident" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"studentId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"classGroupId" TEXT,
|
|
"schoolId" TEXT NOT NULL,
|
|
"categoryId" TEXT NOT NULL,
|
|
"date" DATETIME NOT NULL,
|
|
"severity" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"location" TEXT,
|
|
"followUpAction" TEXT,
|
|
"resolved" BOOLEAN NOT NULL DEFAULT false,
|
|
"resolvedAt" DATETIME,
|
|
"resolvedById" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "BehaviorIncident_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "BehaviorIncident_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "BehaviorIncident_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "BehaviorIncident_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "BehaviorIncident_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "BehaviorCategory" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "BehaviorIncident_resolvedById_fkey" FOREIGN KEY ("resolvedById") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Rubric" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"subjectId" TEXT,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"type" TEXT NOT NULL DEFAULT 'ANALYTIC',
|
|
"maxPoints" INTEGER NOT NULL DEFAULT 100,
|
|
"isPublic" BOOLEAN NOT NULL DEFAULT false,
|
|
"version" INTEGER NOT NULL DEFAULT 1,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "Rubric_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Rubric_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Rubric_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RubricCriterion" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"rubricId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"weight" REAL NOT NULL DEFAULT 1.0,
|
|
"maxPoints" INTEGER NOT NULL,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "RubricCriterion_rubricId_fkey" FOREIGN KEY ("rubricId") REFERENCES "Rubric" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RubricLevel" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"criterionId" TEXT NOT NULL,
|
|
"label" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"points" INTEGER NOT NULL,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "RubricLevel_criterionId_fkey" FOREIGN KEY ("criterionId") REFERENCES "RubricCriterion" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CommentCategory" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"color" TEXT NOT NULL,
|
|
"icon" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "CommentCategory_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CommentBankEntry" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"categoryId" TEXT NOT NULL,
|
|
"subjectId" TEXT,
|
|
"title" TEXT NOT NULL,
|
|
"text" TEXT NOT NULL,
|
|
"gradeLevel" TEXT,
|
|
"schoolType" TEXT,
|
|
"isPublic" BOOLEAN NOT NULL DEFAULT false,
|
|
"usageCount" INTEGER NOT NULL DEFAULT 0,
|
|
"tags" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "CommentBankEntry_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "CommentBankEntry_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "CommentBankEntry_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "CommentCategory" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "CommentBankEntry_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Notebook" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"ownerId" TEXT NOT NULL,
|
|
"ownerType" TEXT NOT NULL,
|
|
"subjectId" TEXT,
|
|
"classGroupId" TEXT,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"notebookType" TEXT NOT NULL DEFAULT 'lined',
|
|
"color" TEXT NOT NULL DEFAULT '#10b981',
|
|
"icon" TEXT,
|
|
"isArchived" BOOLEAN NOT NULL DEFAULT false,
|
|
"isPublic" BOOLEAN NOT NULL DEFAULT false,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "Notebook_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Notebook_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Notebook_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "Notebook_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "NotebookPage" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"notebookId" TEXT NOT NULL,
|
|
"pageNumber" INTEGER NOT NULL,
|
|
"title" TEXT,
|
|
"contentType" TEXT NOT NULL DEFAULT 'text',
|
|
"textContent" TEXT,
|
|
"drawingData" TEXT,
|
|
"background" TEXT NOT NULL DEFAULT 'lined',
|
|
"isBookmark" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "NotebookPage_notebookId_fkey" FOREIGN KEY ("notebookId") REFERENCES "Notebook" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "notebook_page_versions" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"pageId" TEXT NOT NULL,
|
|
"version" INTEGER NOT NULL,
|
|
"textContent" TEXT,
|
|
"drawingData" TEXT,
|
|
"editedBy" TEXT,
|
|
"editSummary" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "notebook_page_versions_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "NotebookPage" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Drawing" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"ownerId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"drawingData" TEXT NOT NULL,
|
|
"imageData" TEXT,
|
|
"subjectId" TEXT,
|
|
"classGroupId" TEXT,
|
|
"isPublic" BOOLEAN NOT NULL DEFAULT false,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "Drawing_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Drawing_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Drawing_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "Drawing_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "notifications" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"category" TEXT NOT NULL DEFAULT 'academic',
|
|
"priority" TEXT NOT NULL DEFAULT 'normal',
|
|
"title" TEXT NOT NULL,
|
|
"message" TEXT NOT NULL,
|
|
"isRead" BOOLEAN NOT NULL DEFAULT false,
|
|
"isArchived" BOOLEAN NOT NULL DEFAULT false,
|
|
"actionUrl" TEXT,
|
|
"relatedId" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "notifications_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "notifications_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CalendarEvent" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"date" DATETIME NOT NULL,
|
|
"startTime" TEXT,
|
|
"endTime" TEXT,
|
|
"eventType" TEXT NOT NULL DEFAULT 'reminder',
|
|
"subjectId" TEXT,
|
|
"classGroupId" TEXT,
|
|
"notes" TEXT,
|
|
"allDay" BOOLEAN NOT NULL DEFAULT false,
|
|
"recurrencePattern" TEXT,
|
|
"recurrenceEnd" DATETIME,
|
|
"parentEventId" TEXT,
|
|
"assessmentId" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "CalendarEvent_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "CalendarEvent_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "CalendarEvent_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "CalendarEvent_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "CalendarEvent_parentEventId_fkey" FOREIGN KEY ("parentEventId") REFERENCES "CalendarEvent" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "parent_student_links" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"parentId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"schoolId" TEXT NOT NULL,
|
|
"relationship" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "parent_student_links_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "parent_student_links_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "parent_student_links_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "curriculum_standards" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"subjectId" TEXT,
|
|
"code" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"gradeLevel" INTEGER,
|
|
"category" TEXT,
|
|
"source" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "curriculum_standards_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "curriculum_standards_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "curriculum_standard_links" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"standardId" TEXT NOT NULL,
|
|
"competencyId" TEXT NOT NULL,
|
|
"coverageLevel" TEXT,
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "curriculum_standard_links_standardId_fkey" FOREIGN KEY ("standardId") REFERENCES "curriculum_standards" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "curriculum_standard_links_competencyId_fkey" FOREIGN KEY ("competencyId") REFERENCES "Competency" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "backups" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"filename" TEXT NOT NULL,
|
|
"size" INTEGER NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL,
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "backups_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "behavior_interventions" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"incidentId" TEXT,
|
|
"type" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'planned',
|
|
"assignedTo" TEXT,
|
|
"startDate" DATETIME,
|
|
"endDate" DATETIME,
|
|
"outcome" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "behavior_interventions_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "behavior_interventions_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "behavior_interventions_incidentId_fkey" FOREIGN KEY ("incidentId") REFERENCES "BehaviorIncident" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "behavior_interventions_assignedTo_fkey" FOREIGN KEY ("assignedTo") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "report_schedules" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"classGroupId" TEXT,
|
|
"template" TEXT NOT NULL,
|
|
"frequency" TEXT NOT NULL,
|
|
"dayOfWeek" INTEGER,
|
|
"dayOfMonth" INTEGER,
|
|
"monthOfYear" INTEGER,
|
|
"recipients" TEXT,
|
|
"includeStudents" BOOLEAN NOT NULL DEFAULT true,
|
|
"includeGrades" BOOLEAN NOT NULL DEFAULT true,
|
|
"includeAttendance" BOOLEAN NOT NULL DEFAULT true,
|
|
"includeBehavior" BOOLEAN NOT NULL DEFAULT false,
|
|
"includeCompetencies" BOOLEAN NOT NULL DEFAULT true,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"lastRunAt" DATETIME,
|
|
"nextRunAt" DATETIME,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "report_schedules_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "report_schedules_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "school_districts" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"code" TEXT,
|
|
"region" TEXT,
|
|
"country" TEXT NOT NULL DEFAULT 'DE',
|
|
"adminEmail" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "homework" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"subjectId" TEXT,
|
|
"teacherId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"dueDate" DATETIME NOT NULL,
|
|
"homeworkType" TEXT NOT NULL DEFAULT 'assignment',
|
|
"maxPoints" REAL,
|
|
"attachments" TEXT,
|
|
"isPublished" BOOLEAN NOT NULL DEFAULT true,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "homework_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "homework_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "homework_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "homework_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "homework_submissions" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"homeworkId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"content" TEXT,
|
|
"attachments" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"score" REAL,
|
|
"feedback" TEXT,
|
|
"submittedAt" DATETIME,
|
|
"gradedAt" DATETIME,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "homework_submissions_homeworkId_fkey" FOREIGN KEY ("homeworkId") REFERENCES "homework" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "homework_submissions_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "announcements" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"authorId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"priority" TEXT NOT NULL DEFAULT 'normal',
|
|
"announcementType" TEXT NOT NULL DEFAULT 'general',
|
|
"targetAudience" TEXT NOT NULL DEFAULT 'all',
|
|
"classGroupId" TEXT,
|
|
"isPinned" BOOLEAN NOT NULL DEFAULT false,
|
|
"expiresAt" DATETIME,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "announcements_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "announcements_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "announcements_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "announcement_reads" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"announcementId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"readAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "announcement_reads_announcementId_fkey" FOREIGN KEY ("announcementId") REFERENCES "announcements" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "announcement_reads_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "notification_preferences" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"userId" TEXT NOT NULL,
|
|
"schoolId" TEXT NOT NULL,
|
|
"academicEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"behavioralEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"administrativeEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"calendarEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"communicationEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"systemEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"quietHoursStart" TEXT,
|
|
"quietHoursEnd" TEXT,
|
|
"quietHoursEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"emailDigestEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"emailDigestFrequency" TEXT NOT NULL DEFAULT 'daily',
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "notification_preferences_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "notification_preferences_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "self_assessments" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"competencyId" TEXT NOT NULL,
|
|
"classGroupId" TEXT,
|
|
"selfLevel" INTEGER NOT NULL,
|
|
"confidence" INTEGER,
|
|
"reflection" TEXT,
|
|
"evidence" TEXT,
|
|
"goalId" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "self_assessments_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "self_assessments_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "self_assessments_competencyId_fkey" FOREIGN KEY ("competencyId") REFERENCES "Competency" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "self_assessments_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "self_assessments_goalId_fkey" FOREIGN KEY ("goalId") REFERENCES "learning_goals" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "learning_goals" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"competencyId" TEXT,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"targetLevel" INTEGER,
|
|
"currentLevel" INTEGER,
|
|
"deadline" DATETIME,
|
|
"status" TEXT NOT NULL DEFAULT 'active',
|
|
"progress" INTEGER NOT NULL DEFAULT 0,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "learning_goals_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "learning_goals_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "learning_goals_competencyId_fkey" FOREIGN KEY ("competencyId") REFERENCES "Competency" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "portfolio_entries" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"entryType" TEXT NOT NULL,
|
|
"competencyId" TEXT,
|
|
"content" TEXT,
|
|
"mediaUrls" TEXT,
|
|
"notebookPageId" TEXT,
|
|
"drawingId" TEXT,
|
|
"isPublic" BOOLEAN NOT NULL DEFAULT false,
|
|
"tags" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "portfolio_entries_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "portfolio_entries_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "portfolio_entries_competencyId_fkey" FOREIGN KEY ("competencyId") REFERENCES "Competency" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "timetable_slots" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"dayOfWeek" INTEGER NOT NULL,
|
|
"period" INTEGER NOT NULL,
|
|
"subjectId" TEXT,
|
|
"teacherId" TEXT,
|
|
"roomId" TEXT,
|
|
"startTime" TEXT NOT NULL,
|
|
"endTime" TEXT NOT NULL,
|
|
"isBreak" BOOLEAN NOT NULL DEFAULT false,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "timetable_slots_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "timetable_slots_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "timetable_slots_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "timetable_slots_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "resources" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"authorId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"resourceType" TEXT NOT NULL,
|
|
"url" TEXT,
|
|
"content" TEXT,
|
|
"subjectId" TEXT,
|
|
"classGroupId" TEXT,
|
|
"gradeLevel" INTEGER,
|
|
"tags" TEXT,
|
|
"isPublic" BOOLEAN NOT NULL DEFAULT true,
|
|
"downloadCount" INTEGER NOT NULL DEFAULT 0,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "resources_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "resources_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "resources_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "resources_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "email_templates" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"subject" TEXT NOT NULL,
|
|
"body" TEXT NOT NULL,
|
|
"isDefault" BOOLEAN NOT NULL DEFAULT false,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "email_templates_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "email_logs" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"templateId" TEXT,
|
|
"recipientEmail" TEXT NOT NULL,
|
|
"recipientName" TEXT,
|
|
"subject" TEXT NOT NULL,
|
|
"body" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"sentAt" DATETIME,
|
|
"error" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "email_logs_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "peer_assessment_sessions" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"teacherId" TEXT,
|
|
"classGroupId" TEXT,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"assessmentType" TEXT NOT NULL DEFAULT 'competency',
|
|
"criteria" TEXT,
|
|
"anonymityMode" TEXT NOT NULL DEFAULT 'anonymous',
|
|
"status" TEXT NOT NULL DEFAULT 'active',
|
|
"deadline" DATETIME,
|
|
"assignMode" TEXT NOT NULL DEFAULT 'manual',
|
|
"assignedPairs" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "peer_assessment_sessions_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "peer_assessment_sessions_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "peer_assessment_sessions_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "peer_assessments" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"sessionId" TEXT,
|
|
"assessorId" TEXT NOT NULL,
|
|
"assessedId" TEXT NOT NULL,
|
|
"competencyId" TEXT,
|
|
"classGroupId" TEXT,
|
|
"assessmentType" TEXT NOT NULL,
|
|
"criteria" TEXT,
|
|
"level" INTEGER,
|
|
"comment" TEXT,
|
|
"rubricId" TEXT,
|
|
"isAnonymous" BOOLEAN NOT NULL DEFAULT false,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "peer_assessments_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "peer_assessments_sessionId_fkey" FOREIGN KEY ("sessionId") REFERENCES "peer_assessment_sessions" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "peer_assessments_assessorId_fkey" FOREIGN KEY ("assessorId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "peer_assessments_assessedId_fkey" FOREIGN KEY ("assessedId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "peer_assessments_competencyId_fkey" FOREIGN KEY ("competencyId") REFERENCES "Competency" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "peer_assessments_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "peer_assessments_rubricId_fkey" FOREIGN KEY ("rubricId") REFERENCES "Rubric" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "emergency_contacts" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"relationship" TEXT NOT NULL,
|
|
"phone" TEXT NOT NULL,
|
|
"phoneAlt" TEXT,
|
|
"email" TEXT,
|
|
"address" TEXT,
|
|
"isPrimary" BOOLEAN NOT NULL DEFAULT false,
|
|
"priority" INTEGER NOT NULL DEFAULT 1,
|
|
"notes" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "emergency_contacts_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "emergency_contacts_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "school_events" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"eventType" TEXT NOT NULL,
|
|
"startDate" DATETIME NOT NULL,
|
|
"endDate" DATETIME,
|
|
"location" TEXT,
|
|
"organizerId" TEXT,
|
|
"classGroupId" TEXT,
|
|
"isAllSchool" BOOLEAN NOT NULL DEFAULT true,
|
|
"isPublic" BOOLEAN NOT NULL DEFAULT true,
|
|
"requiresRegistration" BOOLEAN NOT NULL DEFAULT false,
|
|
"maxParticipants" INTEGER,
|
|
"notes" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
"budget" REAL,
|
|
"registrationDeadline" DATETIME,
|
|
"capacity" INTEGER,
|
|
"isRecurring" BOOLEAN NOT NULL DEFAULT false,
|
|
"recurrenceRule" TEXT,
|
|
"bannerImageUrl" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'draft',
|
|
"feedbackForm" TEXT,
|
|
CONSTRAINT "school_events_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "school_events_organizerId_fkey" FOREIGN KEY ("organizerId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "school_events_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "event_registrations" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"eventId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'registered',
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "event_registrations_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "school_events" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "event_registrations_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "event_feedbacks" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"eventId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"rating" INTEGER NOT NULL,
|
|
"comment" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "event_feedbacks_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "school_events" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "event_feedbacks_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "student_transport" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"transportType" TEXT NOT NULL,
|
|
"routeNumber" TEXT,
|
|
"stopName" TEXT,
|
|
"pickupTime" TEXT,
|
|
"dropoffTime" TEXT,
|
|
"driverName" TEXT,
|
|
"driverPhone" TEXT,
|
|
"distanceKm" REAL,
|
|
"routeId" TEXT,
|
|
"notes" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "student_transport_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "student_transport_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "student_transport_routeId_fkey" FOREIGN KEY ("routeId") REFERENCES "transport_route" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "transport_route" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"routeNumber" TEXT NOT NULL,
|
|
"routeName" TEXT NOT NULL,
|
|
"transportType" TEXT NOT NULL,
|
|
"driverName" TEXT,
|
|
"driverPhone" TEXT,
|
|
"capacity" INTEGER NOT NULL DEFAULT 40,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "transport_route_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "transport_stop" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"routeId" TEXT NOT NULL,
|
|
"stopName" TEXT NOT NULL,
|
|
"stopOrder" INTEGER NOT NULL,
|
|
"pickupTime" TEXT,
|
|
"dropoffTime" TEXT,
|
|
"address" TEXT,
|
|
"latitude" REAL,
|
|
"longitude" REAL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "transport_stop_routeId_fkey" FOREIGN KEY ("routeId") REFERENCES "transport_route" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "health_records" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"bloodType" TEXT,
|
|
"allergies" TEXT,
|
|
"medications" TEXT,
|
|
"conditions" TEXT,
|
|
"doctorName" TEXT,
|
|
"doctorPhone" TEXT,
|
|
"insuranceNumber" TEXT,
|
|
"insuranceProvider" TEXT,
|
|
"lastCheckup" DATETIME,
|
|
"notes" TEXT,
|
|
"isConfidential" BOOLEAN NOT NULL DEFAULT true,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "health_records_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "health_records_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "badges" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"icon" TEXT NOT NULL,
|
|
"color" TEXT NOT NULL DEFAULT '#10b981',
|
|
"category" TEXT NOT NULL,
|
|
"requirementType" TEXT NOT NULL,
|
|
"requirementValue" INTEGER,
|
|
"isAuto" BOOLEAN NOT NULL DEFAULT true,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "badges_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "student_badges" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"badgeId" TEXT NOT NULL,
|
|
"awardedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"awardedBy" TEXT,
|
|
"notes" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "student_badges_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "student_badges_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "student_badges_badgeId_fkey" FOREIGN KEY ("badgeId") REFERENCES "badges" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "student_badges_awardedBy_fkey" FOREIGN KEY ("awardedBy") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "competitions" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"competitionType" TEXT NOT NULL,
|
|
"category" TEXT NOT NULL,
|
|
"subjectId" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'draft',
|
|
"startDate" DATETIME NOT NULL,
|
|
"endDate" DATETIME NOT NULL,
|
|
"registrationDeadline" DATETIME,
|
|
"maxParticipants" INTEGER,
|
|
"scoringType" TEXT NOT NULL DEFAULT 'points',
|
|
"rules" TEXT,
|
|
"isPublic" BOOLEAN NOT NULL DEFAULT false,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"isFederation" BOOLEAN NOT NULL DEFAULT false,
|
|
"federationSchedule" TEXT,
|
|
"createdById" TEXT NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "competitions_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "competitions_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "competitions_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "competition_participants" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"competitionId" TEXT NOT NULL,
|
|
"participantType" TEXT NOT NULL,
|
|
"participantId" TEXT NOT NULL,
|
|
"userId" TEXT,
|
|
"registeredAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"score" INTEGER NOT NULL DEFAULT 0,
|
|
"rank" INTEGER,
|
|
"isDisqualified" BOOLEAN NOT NULL DEFAULT false,
|
|
"notes" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "competition_participants_competitionId_fkey" FOREIGN KEY ("competitionId") REFERENCES "competitions" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "competition_participants_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "competition_rewards" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"competitionId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"rewardType" TEXT NOT NULL,
|
|
"rewardValue" TEXT,
|
|
"rewardProvider" TEXT,
|
|
"rankRequirement" INTEGER,
|
|
"pointsRequired" INTEGER,
|
|
"quantity" INTEGER NOT NULL DEFAULT 1,
|
|
"claimedCount" INTEGER NOT NULL DEFAULT 0,
|
|
"imageUrl" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "competition_rewards_competitionId_fkey" FOREIGN KEY ("competitionId") REFERENCES "competitions" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "competition_leaderboard" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"competitionId" TEXT NOT NULL,
|
|
"participantType" TEXT NOT NULL,
|
|
"participantId" TEXT NOT NULL,
|
|
"participantName" TEXT NOT NULL,
|
|
"score" INTEGER NOT NULL DEFAULT 0,
|
|
"rank" INTEGER,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "competition_leaderboard_competitionId_fkey" FOREIGN KEY ("competitionId") REFERENCES "competitions" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "reward_claims" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"competitionId" TEXT NOT NULL,
|
|
"rewardId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"claimedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"code" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"expiresAt" DATETIME,
|
|
"notes" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "reward_claims_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "reward_claims_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "reward_claims_competitionId_fkey" FOREIGN KEY ("competitionId") REFERENCES "competitions" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "reward_claims_rewardId_fkey" FOREIGN KEY ("rewardId") REFERENCES "competition_rewards" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "newsletters" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"authorId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"subject" TEXT,
|
|
"content" TEXT NOT NULL,
|
|
"summary" TEXT,
|
|
"imageUrl" TEXT,
|
|
"bannerImageUrl" TEXT,
|
|
"category" TEXT NOT NULL DEFAULT 'general',
|
|
"templateType" TEXT NOT NULL DEFAULT 'monthly',
|
|
"targetAudience" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'draft',
|
|
"isPublished" BOOLEAN NOT NULL DEFAULT false,
|
|
"publishedAt" DATETIME,
|
|
"scheduledAt" DATETIME,
|
|
"sentAt" DATETIME,
|
|
"tags" TEXT,
|
|
"openCount" INTEGER NOT NULL DEFAULT 0,
|
|
"clickCount" INTEGER NOT NULL DEFAULT 0,
|
|
"bounceCount" INTEGER NOT NULL DEFAULT 0,
|
|
"totalRecipients" INTEGER NOT NULL DEFAULT 0,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "newsletters_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "newsletters_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "subject_topics" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"subjectId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"gradeLevel" TEXT,
|
|
"curriculumCode" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"icon" TEXT,
|
|
"color" TEXT NOT NULL DEFAULT '#10b981',
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "subject_topics_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "subject_topics_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "subject_lessons" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"topicId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"lessonType" TEXT NOT NULL DEFAULT 'explanation',
|
|
"content" TEXT NOT NULL,
|
|
"difficulty" TEXT NOT NULL DEFAULT 'medium',
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"estimatedMinutes" INTEGER,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "subject_lessons_topicId_fkey" FOREIGN KEY ("topicId") REFERENCES "subject_topics" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "lesson_questions" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"lessonId" TEXT NOT NULL,
|
|
"questionType" TEXT NOT NULL,
|
|
"question" TEXT NOT NULL,
|
|
"options" TEXT,
|
|
"correctAnswer" TEXT NOT NULL,
|
|
"explanation" TEXT,
|
|
"points" INTEGER NOT NULL DEFAULT 1,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "lesson_questions_lessonId_fkey" FOREIGN KEY ("lessonId") REFERENCES "subject_lessons" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "student_answers" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"questionId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"answer" TEXT NOT NULL,
|
|
"isCorrect" BOOLEAN,
|
|
"timeTakenMs" INTEGER,
|
|
"attempts" INTEGER NOT NULL DEFAULT 1,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "student_answers_questionId_fkey" FOREIGN KEY ("questionId") REFERENCES "lesson_questions" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "student_answers_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "rewards" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"category" TEXT NOT NULL,
|
|
"pointsCost" INTEGER NOT NULL,
|
|
"image" TEXT,
|
|
"stock" INTEGER,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "rewards_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "reward_redemptions" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"rewardId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"pointsSpent" INTEGER NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"note" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "reward_redemptions_rewardId_fkey" FOREIGN KEY ("rewardId") REFERENCES "rewards" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "reward_redemptions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "reward_points" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"userId" TEXT NOT NULL,
|
|
"schoolId" TEXT NOT NULL,
|
|
"points" INTEGER NOT NULL DEFAULT 0,
|
|
"source" TEXT NOT NULL,
|
|
"sourceId" TEXT,
|
|
"description" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "reward_points_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "reward_points_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "StudentGoal" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"studentId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"targetDate" DATETIME,
|
|
"progress" INTEGER NOT NULL DEFAULT 0,
|
|
"status" TEXT NOT NULL DEFAULT 'active',
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "StudentGoal_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "subject_categories" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"icon" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "subject_categories_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "subject_contents" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"categoryId" TEXT NOT NULL,
|
|
"subjectId" TEXT,
|
|
"parentId" TEXT,
|
|
"title" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"icon" TEXT,
|
|
"contentType" TEXT NOT NULL DEFAULT 'topic',
|
|
"content" TEXT,
|
|
"difficulty" TEXT NOT NULL DEFAULT 'medium',
|
|
"questionCount" INTEGER NOT NULL DEFAULT 0,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"isPublic" BOOLEAN NOT NULL DEFAULT true,
|
|
"sourceUrl" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "subject_contents_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "subject_contents_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "subject_categories" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "subject_contents_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "subject_contents" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "subject_contents_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "content_change_requests" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"contentId" TEXT NOT NULL,
|
|
"requestedBy" TEXT NOT NULL,
|
|
"requestType" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"proposedChanges" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"reviewedBy" TEXT,
|
|
"reviewNote" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "content_change_requests_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "content_change_requests_contentId_fkey" FOREIGN KEY ("contentId") REFERENCES "subject_contents" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "content_change_requests_requestedBy_fkey" FOREIGN KEY ("requestedBy") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "content_change_requests_reviewedBy_fkey" FOREIGN KEY ("reviewedBy") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ai_settings" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"pollinationEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"pollinationApiKey" TEXT,
|
|
"pollinationModel" TEXT NOT NULL DEFAULT 'flux',
|
|
"openaiEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"openaiApiKey" TEXT,
|
|
"openaiModel" TEXT NOT NULL DEFAULT 'gpt-4o',
|
|
"anthropicEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"anthropicApiKey" TEXT,
|
|
"anthropicModel" TEXT NOT NULL DEFAULT 'claude-3-5-sonnet-20241022',
|
|
"aiChatEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"aiImageGenEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"aiVideoGenEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"aiAutoTestEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"aiGradingAuditEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"aiTopicGenEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"virtualCharacterEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"aiMaxRequestsPerDay" INTEGER NOT NULL DEFAULT 50,
|
|
"aiHelperMode" TEXT NOT NULL DEFAULT 'guided',
|
|
"aiSystemPrompt" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "ai_settings_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "virtual_characters" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"userId" TEXT NOT NULL,
|
|
"schoolId" TEXT NOT NULL,
|
|
"characterId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"color" TEXT NOT NULL DEFAULT '#10b981',
|
|
"level" INTEGER NOT NULL DEFAULT 1,
|
|
"xp" INTEGER NOT NULL DEFAULT 0,
|
|
"mood" TEXT NOT NULL DEFAULT 'happy',
|
|
"accessories" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "virtual_characters_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "virtual_characters_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "chat_messages" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"roomId" TEXT,
|
|
"content" TEXT NOT NULL,
|
|
"senderType" TEXT NOT NULL DEFAULT 'user',
|
|
"metadata" TEXT,
|
|
"isRead" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "chat_messages_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "chat_messages_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "chat_messages_roomId_fkey" FOREIGN KEY ("roomId") REFERENCES "communication_rooms" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "illness_reports" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"reportedBy" TEXT NOT NULL,
|
|
"reporterType" TEXT NOT NULL,
|
|
"reason" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"startDate" DATETIME NOT NULL,
|
|
"endDate" DATETIME,
|
|
"documentUrl" TEXT,
|
|
"parentApprovalStatus" TEXT NOT NULL DEFAULT 'pending',
|
|
"parentApprovedBy" TEXT,
|
|
"parentApprovedAt" DATETIME,
|
|
"isVisibleToTeacher" BOOLEAN NOT NULL DEFAULT false,
|
|
"isVisibleToAdmin" BOOLEAN NOT NULL DEFAULT false,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "illness_reports_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "illness_reports_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "illness_reports_reportedBy_fkey" FOREIGN KEY ("reportedBy") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "illness_reports_parentApprovedBy_fkey" FOREIGN KEY ("parentApprovedBy") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "communication_rooms" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"roomType" TEXT NOT NULL DEFAULT 'chat',
|
|
"status" TEXT NOT NULL DEFAULT 'requested',
|
|
"requestedBy" TEXT NOT NULL,
|
|
"acceptedAt" DATETIME,
|
|
"closedAt" DATETIME,
|
|
"closeReason" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "communication_rooms_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "communication_rooms_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "communication_rooms_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "communication_room_members" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"roomId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"role" TEXT NOT NULL DEFAULT 'member',
|
|
"joinedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "communication_room_members_roomId_fkey" FOREIGN KEY ("roomId") REFERENCES "communication_rooms" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "communication_room_members_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "communication_messages" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"roomId" TEXT NOT NULL,
|
|
"senderId" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"messageType" TEXT NOT NULL DEFAULT 'text',
|
|
"fileUrl" TEXT,
|
|
"metadata" TEXT,
|
|
"isRead" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "communication_messages_roomId_fkey" FOREIGN KEY ("roomId") REFERENCES "communication_rooms" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "communication_messages_senderId_fkey" FOREIGN KEY ("senderId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "counseling_appointments" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"counselorId" TEXT NOT NULL,
|
|
"requestType" TEXT NOT NULL DEFAULT 'guidance',
|
|
"description" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'requested',
|
|
"scheduledAt" DATETIME,
|
|
"duration" INTEGER NOT NULL DEFAULT 30,
|
|
"notes" TEXT,
|
|
"isPrivate" BOOLEAN NOT NULL DEFAULT true,
|
|
"addToCalendar" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "counseling_appointments_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "counseling_appointments_counselorId_fkey" FOREIGN KEY ("counselorId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "counseling_appointments_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "disciplinary_committees" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "disciplinary_committees_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "disciplinary_committee_members" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"committeeId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"role" TEXT NOT NULL DEFAULT 'member',
|
|
"isLead" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "disciplinary_committee_members_committeeId_fkey" FOREIGN KEY ("committeeId") REFERENCES "disciplinary_committees" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "disciplinary_committee_members_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "disciplinary_cases" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"committeeId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"reportedBy" TEXT NOT NULL,
|
|
"reviewedBy" TEXT,
|
|
"caseType" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"evidence" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'open',
|
|
"resolution" TEXT,
|
|
"resolutionDate" DATETIME,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "disciplinary_cases_committeeId_fkey" FOREIGN KEY ("committeeId") REFERENCES "disciplinary_committees" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "disciplinary_cases_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "disciplinary_cases_reportedBy_fkey" FOREIGN KEY ("reportedBy") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "disciplinary_cases_reviewedBy_fkey" FOREIGN KEY ("reviewedBy") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ai_test_generations" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"assessmentId" TEXT,
|
|
"studentId" TEXT,
|
|
"classGroupId" TEXT,
|
|
"subjectId" TEXT,
|
|
"topicId" TEXT,
|
|
"testType" TEXT NOT NULL DEFAULT 'practice',
|
|
"difficulty" TEXT NOT NULL DEFAULT 'medium',
|
|
"questionCount" INTEGER NOT NULL DEFAULT 10,
|
|
"questions" TEXT,
|
|
"aiProvider" TEXT NOT NULL DEFAULT 'pollination',
|
|
"generatedAt" DATETIME,
|
|
"isCompleted" BOOLEAN NOT NULL DEFAULT false,
|
|
"completedAt" DATETIME,
|
|
"score" REAL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "ai_test_generations_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ai_test_generations_assessmentId_fkey" FOREIGN KEY ("assessmentId") REFERENCES "Assessment" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "ai_test_generations_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "ai_test_generations_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "ai_test_generations_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "teacher_grading_reviews" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"assessmentId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"aiProvider" TEXT NOT NULL DEFAULT 'pollination',
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"reviewResult" TEXT,
|
|
"discrepanciesFound" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "teacher_grading_reviews_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "teacher_grading_reviews_assessmentId_fkey" FOREIGN KEY ("assessmentId") REFERENCES "Assessment" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "teacher_grading_reviews_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "grading_review_comments" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"reviewId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"resultId" TEXT,
|
|
"comment" TEXT NOT NULL,
|
|
"suggestedGrade" TEXT,
|
|
"reason" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "grading_review_comments_reviewId_fkey" FOREIGN KEY ("reviewId") REFERENCES "teacher_grading_reviews" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "grading_review_comments_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "grading_annotations" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"assessmentId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"resultId" TEXT,
|
|
"teacherId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL DEFAULT 'drawing',
|
|
"content" TEXT,
|
|
"positionX" REAL NOT NULL DEFAULT 0,
|
|
"positionY" REAL NOT NULL DEFAULT 0,
|
|
"width" REAL,
|
|
"height" REAL,
|
|
"color" TEXT NOT NULL DEFAULT '#ef4444',
|
|
"strokeWidth" REAL NOT NULL DEFAULT 2,
|
|
"page" INTEGER NOT NULL DEFAULT 1,
|
|
"pathData" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "grading_annotations_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "grading_annotations_assessmentId_fkey" FOREIGN KEY ("assessmentId") REFERENCES "Assessment" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "grading_annotations_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "grading_annotations_resultId_fkey" FOREIGN KEY ("resultId") REFERENCES "AssessmentResult" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "grading_annotations_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "exam_plans" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"subjectId" TEXT NOT NULL,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"date" DATETIME NOT NULL,
|
|
"startTime" TEXT,
|
|
"endTime" TEXT,
|
|
"room" TEXT,
|
|
"topics" TEXT,
|
|
"weight" REAL NOT NULL DEFAULT 1.0,
|
|
"status" TEXT NOT NULL DEFAULT 'planned',
|
|
"notes" TEXT,
|
|
"calendarEventId" TEXT,
|
|
"assessmentId" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "exam_plans_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "exam_plans_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "exam_plans_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "exam_plans_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "exam_plans_calendarEventId_fkey" FOREIGN KEY ("calendarEventId") REFERENCES "CalendarEvent" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "exam_plans_assessmentId_fkey" FOREIGN KEY ("assessmentId") REFERENCES "Assessment" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "study_plans" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"subjectId" TEXT,
|
|
"subjectName" TEXT,
|
|
"dayOfWeek" INTEGER NOT NULL,
|
|
"startTime" TEXT NOT NULL,
|
|
"duration" INTEGER NOT NULL,
|
|
"isRecurring" BOOLEAN NOT NULL DEFAULT true,
|
|
"specificDate" DATETIME,
|
|
"priority" TEXT NOT NULL DEFAULT 'medium',
|
|
"status" TEXT NOT NULL DEFAULT 'active',
|
|
"color" TEXT,
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "study_plans_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "study_plans_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "study_plans_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "study_sessions" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"studyPlanId" TEXT,
|
|
"subjectId" TEXT,
|
|
"subjectName" TEXT,
|
|
"startTime" DATETIME NOT NULL,
|
|
"endTime" DATETIME,
|
|
"duration" INTEGER NOT NULL DEFAULT 0,
|
|
"plannedDuration" INTEGER,
|
|
"type" TEXT NOT NULL DEFAULT 'pomodoro',
|
|
"pomodorosCompleted" INTEGER NOT NULL DEFAULT 0,
|
|
"pomodoroLength" INTEGER NOT NULL DEFAULT 25,
|
|
"breakLength" INTEGER NOT NULL DEFAULT 5,
|
|
"status" TEXT NOT NULL DEFAULT 'in_progress',
|
|
"focusScore" INTEGER,
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "study_sessions_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "study_sessions_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "study_sessions_studyPlanId_fkey" FOREIGN KEY ("studyPlanId") REFERENCES "study_plans" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "study_sessions_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "library_books" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"author" TEXT NOT NULL,
|
|
"isbn" TEXT,
|
|
"publisher" TEXT,
|
|
"publishYear" INTEGER,
|
|
"category" TEXT NOT NULL,
|
|
"readingLevel" TEXT,
|
|
"language" TEXT NOT NULL DEFAULT 'de',
|
|
"description" TEXT,
|
|
"coverGradient" TEXT,
|
|
"totalCopies" INTEGER NOT NULL DEFAULT 1,
|
|
"availableCopies" INTEGER NOT NULL DEFAULT 1,
|
|
"location" TEXT,
|
|
"tags" TEXT,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "library_books_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "book_checkouts" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"bookId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"checkedOutBy" TEXT NOT NULL,
|
|
"checkoutDate" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"dueDate" DATETIME NOT NULL,
|
|
"returnDate" DATETIME,
|
|
"condition" TEXT NOT NULL DEFAULT 'good',
|
|
"returnCondition" TEXT,
|
|
"renewalCount" INTEGER NOT NULL DEFAULT 0,
|
|
"status" TEXT NOT NULL DEFAULT 'active',
|
|
"fineAmount" REAL NOT NULL DEFAULT 0,
|
|
"finePaid" BOOLEAN NOT NULL DEFAULT false,
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "book_checkouts_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "book_checkouts_bookId_fkey" FOREIGN KEY ("bookId") REFERENCES "library_books" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "book_checkouts_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "book_checkouts_checkedOutBy_fkey" FOREIGN KEY ("checkedOutBy") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "book_reservations" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"bookId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"queuePosition" INTEGER NOT NULL DEFAULT 1,
|
|
"status" TEXT NOT NULL DEFAULT 'waiting',
|
|
"notifiedAt" DATETIME,
|
|
"fulfilledAt" DATETIME,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "book_reservations_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "book_reservations_bookId_fkey" FOREIGN KEY ("bookId") REFERENCES "library_books" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "book_reservations_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "book_reservations_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "seating_charts" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"classGroupId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"layoutType" TEXT NOT NULL DEFAULT 'rows',
|
|
"rows" INTEGER NOT NULL DEFAULT 5,
|
|
"columns" INTEGER NOT NULL DEFAULT 5,
|
|
"gap" INTEGER NOT NULL DEFAULT 2,
|
|
"arrangement" TEXT,
|
|
"showDoor" BOOLEAN NOT NULL DEFAULT true,
|
|
"showWindows" BOOLEAN NOT NULL DEFAULT true,
|
|
"doorPosition" TEXT NOT NULL DEFAULT 'left',
|
|
"windowPosition" TEXT NOT NULL DEFAULT 'right',
|
|
"isTemplate" BOOLEAN NOT NULL DEFAULT false,
|
|
"isDefault" BOOLEAN NOT NULL DEFAULT false,
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "seating_charts_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "seating_charts_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "seating_charts_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "data_import_jobs" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"fileName" TEXT NOT NULL,
|
|
"fileSize" INTEGER NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"totalRows" INTEGER NOT NULL DEFAULT 0,
|
|
"successRows" INTEGER NOT NULL DEFAULT 0,
|
|
"errorRows" INTEGER NOT NULL DEFAULT 0,
|
|
"errors" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "data_import_jobs_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "data_import_jobs_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "data_export_jobs" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"format" TEXT NOT NULL,
|
|
"filters" TEXT,
|
|
"fileName" TEXT,
|
|
"fileSize" INTEGER NOT NULL DEFAULT 0,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"fileData" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "data_export_jobs_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "data_export_jobs_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "wellness_checkins" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"date" DATETIME NOT NULL,
|
|
"mood" INTEGER NOT NULL,
|
|
"sleepHours" REAL,
|
|
"sleepQuality" INTEGER,
|
|
"stressLevel" INTEGER,
|
|
"activityType" TEXT,
|
|
"activityMinutes" INTEGER,
|
|
"mealsCount" INTEGER,
|
|
"waterGlasses" INTEGER,
|
|
"gratitudeEntry" TEXT,
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "wellness_checkins_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "wellness_checkins_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "wellness_scores" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"date" DATETIME NOT NULL,
|
|
"overallScore" REAL NOT NULL,
|
|
"physicalScore" REAL,
|
|
"mentalScore" REAL,
|
|
"socialScore" REAL,
|
|
"academicScore" REAL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "wellness_scores_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "wellness_scores_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "career_profiles" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"interests" TEXT,
|
|
"strengths" TEXT,
|
|
"careerCluster" TEXT,
|
|
"desiredCareer" TEXT,
|
|
"educationPath" TEXT,
|
|
"workExperiences" TEXT,
|
|
"volunteerExps" TEXT,
|
|
"certifications" TEXT,
|
|
"documents" TEXT,
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "career_profiles_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "career_profiles_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "career_goals" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"profileId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"category" TEXT NOT NULL,
|
|
"targetDate" DATETIME,
|
|
"progress" INTEGER NOT NULL DEFAULT 0,
|
|
"status" TEXT NOT NULL DEFAULT 'active',
|
|
"milestones" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "career_goals_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "career_profiles" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "career_appointments" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"profileId" TEXT NOT NULL,
|
|
"counselorId" TEXT NOT NULL,
|
|
"date" DATETIME NOT NULL,
|
|
"duration" INTEGER NOT NULL DEFAULT 30,
|
|
"type" TEXT NOT NULL DEFAULT 'guidance',
|
|
"status" TEXT NOT NULL DEFAULT 'scheduled',
|
|
"notes" TEXT,
|
|
"actionItems" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "career_appointments_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "career_appointments_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "career_profiles" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "career_appointments_counselorId_fkey" FOREIGN KEY ("counselorId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "substitute_teachers" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"userId" TEXT,
|
|
"firstName" TEXT NOT NULL,
|
|
"lastName" TEXT NOT NULL,
|
|
"email" TEXT,
|
|
"phone" TEXT,
|
|
"qualifications" TEXT,
|
|
"subjects" TEXT,
|
|
"gradeLevels" TEXT,
|
|
"availability" TEXT,
|
|
"maxDaysPerWeek" INTEGER NOT NULL DEFAULT 5,
|
|
"rating" REAL NOT NULL DEFAULT 0,
|
|
"totalAssignments" INTEGER NOT NULL DEFAULT 0,
|
|
"notes" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"deletedAt" DATETIME,
|
|
CONSTRAINT "substitute_teachers_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "substitute_teachers_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "teacher_absences" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"startDate" DATETIME NOT NULL,
|
|
"endDate" DATETIME NOT NULL,
|
|
"reason" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'reported',
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "teacher_absences_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "teacher_absences_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "substitution_assignments" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"absenceId" TEXT NOT NULL,
|
|
"substituteId" TEXT NOT NULL,
|
|
"classGroupId" TEXT,
|
|
"subjectId" TEXT,
|
|
"date" DATETIME NOT NULL,
|
|
"period" INTEGER,
|
|
"room" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "substitution_assignments_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "substitution_assignments_absenceId_fkey" FOREIGN KEY ("absenceId") REFERENCES "teacher_absences" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "substitution_assignments_substituteId_fkey" FOREIGN KEY ("substituteId") REFERENCES "substitute_teachers" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "substitution_assignments_classGroupId_fkey" FOREIGN KEY ("classGroupId") REFERENCES "ClassGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "substitution_assignments_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "GradeReport" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"generatedBy" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL DEFAULT 'custom',
|
|
"dateRange" TEXT NOT NULL,
|
|
"classIds" TEXT,
|
|
"subjectIds" TEXT,
|
|
"metrics" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"fileData" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "GradeReport_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "GradeReport_generatedBy_fkey" FOREIGN KEY ("generatedBy") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "DataRetentionPolicy" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"dataCategory" TEXT NOT NULL,
|
|
"retentionPeriodMonths" INTEGER,
|
|
"legalBasisNote" TEXT,
|
|
"isDefault" BOOLEAN NOT NULL DEFAULT false,
|
|
"reviewedByUserId" TEXT,
|
|
"reviewedAt" DATETIME,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "DataRetentionPolicy_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "DataRetentionPolicy_reviewedByUserId_fkey" FOREIGN KEY ("reviewedByUserId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "DpiaRecord" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"moduleScope" TEXT NOT NULL,
|
|
"dataProcessingSummary" TEXT NOT NULL,
|
|
"completedAt" DATETIME NOT NULL,
|
|
"approvedByUserId" TEXT,
|
|
"documentUrl" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "DpiaRecord_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "DpiaRecord_approvedByUserId_fkey" FOREIGN KEY ("approvedByUserId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ComplianceConsultation" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"consultationType" TEXT NOT NULL,
|
|
"moduleScope" TEXT,
|
|
"acknowledgedByUserId" TEXT NOT NULL,
|
|
"acknowledgedAt" DATETIME NOT NULL,
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "ComplianceConsultation_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "ComplianceConsultation_acknowledgedByUserId_fkey" FOREIGN KEY ("acknowledgedByUserId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SchoolComplianceStatus" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"bundesland" TEXT,
|
|
"onboardingCompleted" BOOLEAN NOT NULL DEFAULT false,
|
|
"dpoDpoContactEmail" TEXT,
|
|
"schultragerContactEmail" TEXT,
|
|
"moduleGates" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "SchoolComplianceStatus_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "DeletionFlag" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"schoolId" TEXT NOT NULL,
|
|
"entityType" TEXT NOT NULL,
|
|
"entityId" TEXT NOT NULL,
|
|
"dataCategory" TEXT NOT NULL,
|
|
"flaggedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"approvedByUserId" TEXT,
|
|
"approvedAt" DATETIME,
|
|
"deletedAt" DATETIME,
|
|
"reason" TEXT NOT NULL,
|
|
CONSTRAINT "DeletionFlag_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "DeletionFlag_approvedByUserId_fkey" FOREIGN KEY ("approvedByUserId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ClassGroupTeacher_classGroupId_userId_key" ON "ClassGroupTeacher"("classGroupId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Student_userId_key" ON "Student"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Student_userId_idx" ON "Student"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ClassCompetencyAssignment_classGroupId_subjectId_schoolYearId_key" ON "ClassCompetencyAssignment"("classGroupId", "subjectId", "schoolYearId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "AssessmentCompetencyLink_assessmentId_competencyId_key" ON "AssessmentCompetencyLink"("assessmentId", "competencyId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "AssessmentResult_assessmentId_studentId_key" ON "AssessmentResult"("assessmentId", "studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuditLog_dataSubject_idx" ON "AuditLog"("dataSubject");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuditLog_timestamp_idx" ON "AuditLog"("timestamp");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AttendanceSession_classGroupId_date_idx" ON "AttendanceSession"("classGroupId", "date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AttendanceRecord_studentId_idx" ON "AttendanceRecord"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "AttendanceRecord_sessionId_studentId_key" ON "AttendanceRecord"("sessionId", "studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "TeacherNote_studentId_idx" ON "TeacherNote"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "TeacherNote_teacherId_idx" ON "TeacherNote"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "LessonPlan_teacherId_idx" ON "LessonPlan"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "LessonPlan_classGroupId_idx" ON "LessonPlan"("classGroupId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "LessonPlan_date_idx" ON "LessonPlan"("date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ParentContact_studentId_idx" ON "ParentContact"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ParentContact_studentId_email_key" ON "ParentContact"("studentId", "email");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ParentMessage_teacherId_idx" ON "ParentMessage"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ParentMessage_parentId_idx" ON "ParentMessage"("parentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ParentMessage_studentId_idx" ON "ParentMessage"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ParentMessage_createdAt_idx" ON "ParentMessage"("createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "BehaviorCategory_schoolId_idx" ON "BehaviorCategory"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "BehaviorCategory_schoolId_name_key" ON "BehaviorCategory"("schoolId", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "BehaviorIncident_studentId_date_idx" ON "BehaviorIncident"("studentId", "date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "BehaviorIncident_classGroupId_date_idx" ON "BehaviorIncident"("classGroupId", "date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "BehaviorIncident_schoolId_date_idx" ON "BehaviorIncident"("schoolId", "date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "BehaviorIncident_teacherId_idx" ON "BehaviorIncident"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Rubric_schoolId_idx" ON "Rubric"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Rubric_teacherId_idx" ON "Rubric"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Rubric_subjectId_idx" ON "Rubric"("subjectId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RubricCriterion_rubricId_idx" ON "RubricCriterion"("rubricId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RubricLevel_criterionId_idx" ON "RubricLevel"("criterionId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CommentCategory_schoolId_idx" ON "CommentCategory"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "CommentCategory_schoolId_name_key" ON "CommentCategory"("schoolId", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CommentBankEntry_schoolId_idx" ON "CommentBankEntry"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CommentBankEntry_teacherId_idx" ON "CommentBankEntry"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CommentBankEntry_categoryId_idx" ON "CommentBankEntry"("categoryId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CommentBankEntry_subjectId_idx" ON "CommentBankEntry"("subjectId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Notebook_schoolId_idx" ON "Notebook"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Notebook_ownerId_idx" ON "Notebook"("ownerId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Notebook_subjectId_idx" ON "Notebook"("subjectId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Notebook_classGroupId_idx" ON "Notebook"("classGroupId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Notebook_isArchived_idx" ON "Notebook"("isArchived");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "NotebookPage_notebookId_idx" ON "NotebookPage"("notebookId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "NotebookPage_pageNumber_idx" ON "NotebookPage"("pageNumber");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "notebook_page_versions_pageId_version_idx" ON "notebook_page_versions"("pageId", "version");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Drawing_schoolId_idx" ON "Drawing"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Drawing_ownerId_idx" ON "Drawing"("ownerId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Drawing_subjectId_idx" ON "Drawing"("subjectId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "notifications_userId_isRead_idx" ON "notifications"("userId", "isRead");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "notifications_schoolId_idx" ON "notifications"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "notifications_category_idx" ON "notifications"("category");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "notifications_priority_idx" ON "notifications"("priority");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CalendarEvent_schoolId_idx" ON "CalendarEvent"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CalendarEvent_teacherId_idx" ON "CalendarEvent"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CalendarEvent_date_idx" ON "CalendarEvent"("date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CalendarEvent_subjectId_idx" ON "CalendarEvent"("subjectId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CalendarEvent_classGroupId_idx" ON "CalendarEvent"("classGroupId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CalendarEvent_parentEventId_idx" ON "CalendarEvent"("parentEventId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CalendarEvent_eventType_idx" ON "CalendarEvent"("eventType");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "parent_student_links_parentId_studentId_key" ON "parent_student_links"("parentId", "studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "curriculum_standards_schoolId_subjectId_idx" ON "curriculum_standards"("schoolId", "subjectId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "curriculum_standard_links_standardId_competencyId_key" ON "curriculum_standard_links"("standardId", "competencyId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "behavior_interventions_schoolId_studentId_idx" ON "behavior_interventions"("schoolId", "studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "report_schedules_schoolId_isActive_idx" ON "report_schedules"("schoolId", "isActive");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "homework_schoolId_classGroupId_dueDate_idx" ON "homework"("schoolId", "classGroupId", "dueDate");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "homework_submissions_homeworkId_status_idx" ON "homework_submissions"("homeworkId", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "homework_submissions_homeworkId_studentId_key" ON "homework_submissions"("homeworkId", "studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "announcements_schoolId_createdAt_idx" ON "announcements"("schoolId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "announcement_reads_announcementId_idx" ON "announcement_reads"("announcementId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "announcement_reads_userId_idx" ON "announcement_reads"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "announcement_reads_announcementId_userId_key" ON "announcement_reads"("announcementId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "notification_preferences_userId_key" ON "notification_preferences"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "notification_preferences_userId_idx" ON "notification_preferences"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "self_assessments_schoolId_studentId_idx" ON "self_assessments"("schoolId", "studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "learning_goals_schoolId_studentId_status_idx" ON "learning_goals"("schoolId", "studentId", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "portfolio_entries_schoolId_studentId_idx" ON "portfolio_entries"("schoolId", "studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "timetable_slots_schoolId_classGroupId_idx" ON "timetable_slots"("schoolId", "classGroupId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "timetable_slots_classGroupId_dayOfWeek_period_key" ON "timetable_slots"("classGroupId", "dayOfWeek", "period");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "resources_schoolId_resourceType_idx" ON "resources"("schoolId", "resourceType");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "email_templates_schoolId_name_key" ON "email_templates"("schoolId", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "email_logs_schoolId_status_idx" ON "email_logs"("schoolId", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "peer_assessment_sessions_schoolId_status_idx" ON "peer_assessment_sessions"("schoolId", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "peer_assessment_sessions_schoolId_teacherId_idx" ON "peer_assessment_sessions"("schoolId", "teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "peer_assessments_schoolId_assessedId_idx" ON "peer_assessments"("schoolId", "assessedId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "peer_assessments_schoolId_assessorId_idx" ON "peer_assessments"("schoolId", "assessorId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "peer_assessments_sessionId_idx" ON "peer_assessments"("sessionId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "emergency_contacts_schoolId_studentId_idx" ON "emergency_contacts"("schoolId", "studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "school_events_schoolId_startDate_idx" ON "school_events"("schoolId", "startDate");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "event_registrations_eventId_userId_key" ON "event_registrations"("eventId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "event_feedbacks_eventId_userId_key" ON "event_feedbacks"("eventId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "student_transport_schoolId_studentId_idx" ON "student_transport"("schoolId", "studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "transport_route_schoolId_idx" ON "transport_route"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "transport_stop_routeId_idx" ON "transport_stop"("routeId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "health_records_schoolId_studentId_key" ON "health_records"("schoolId", "studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "badges_schoolId_category_idx" ON "badges"("schoolId", "category");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "student_badges_schoolId_studentId_idx" ON "student_badges"("schoolId", "studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "student_badges_studentId_badgeId_key" ON "student_badges"("studentId", "badgeId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "competitions_schoolId_idx" ON "competitions"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "competitions_status_idx" ON "competitions"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "competitions_competitionType_idx" ON "competitions"("competitionType");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "competitions_startDate_idx" ON "competitions"("startDate");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "competition_participants_competitionId_idx" ON "competition_participants"("competitionId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "competition_participants_userId_idx" ON "competition_participants"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "competition_participants_competitionId_participantType_participantId_key" ON "competition_participants"("competitionId", "participantType", "participantId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "competition_rewards_competitionId_idx" ON "competition_rewards"("competitionId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "competition_leaderboard_competitionId_rank_idx" ON "competition_leaderboard"("competitionId", "rank");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "competition_leaderboard_competitionId_participantType_participantId_key" ON "competition_leaderboard"("competitionId", "participantType", "participantId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reward_claims_schoolId_userId_idx" ON "reward_claims"("schoolId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reward_claims_competitionId_idx" ON "reward_claims"("competitionId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "newsletters_schoolId_isPublished_publishedAt_idx" ON "newsletters"("schoolId", "isPublished", "publishedAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "newsletters_schoolId_status_idx" ON "newsletters"("schoolId", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "subject_topics_schoolId_subjectId_idx" ON "subject_topics"("schoolId", "subjectId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "subject_topics_gradeLevel_idx" ON "subject_topics"("gradeLevel");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "subject_lessons_topicId_idx" ON "subject_lessons"("topicId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "lesson_questions_lessonId_idx" ON "lesson_questions"("lessonId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "student_answers_studentId_idx" ON "student_answers"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "student_answers_questionId_studentId_key" ON "student_answers"("questionId", "studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "rewards_schoolId_idx" ON "rewards"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "rewards_category_idx" ON "rewards"("category");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reward_redemptions_rewardId_idx" ON "reward_redemptions"("rewardId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reward_redemptions_userId_idx" ON "reward_redemptions"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reward_redemptions_status_idx" ON "reward_redemptions"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reward_points_userId_idx" ON "reward_points"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reward_points_schoolId_idx" ON "reward_points"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reward_points_source_idx" ON "reward_points"("source");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "StudentGoal_studentId_idx" ON "StudentGoal"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "StudentGoal_status_idx" ON "StudentGoal"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "subject_categories_schoolId_idx" ON "subject_categories"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "subject_categories_slug_idx" ON "subject_categories"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "subject_contents_schoolId_idx" ON "subject_contents"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "subject_contents_categoryId_idx" ON "subject_contents"("categoryId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "subject_contents_parentId_idx" ON "subject_contents"("parentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "subject_contents_slug_idx" ON "subject_contents"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "subject_contents_contentType_idx" ON "subject_contents"("contentType");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "content_change_requests_schoolId_idx" ON "content_change_requests"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "content_change_requests_contentId_idx" ON "content_change_requests"("contentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "content_change_requests_status_idx" ON "content_change_requests"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "content_change_requests_requestedBy_idx" ON "content_change_requests"("requestedBy");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ai_settings_schoolId_key" ON "ai_settings"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "virtual_characters_userId_key" ON "virtual_characters"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "virtual_characters_userId_idx" ON "virtual_characters"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "virtual_characters_schoolId_idx" ON "virtual_characters"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "chat_messages_userId_idx" ON "chat_messages"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "chat_messages_roomId_idx" ON "chat_messages"("roomId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "chat_messages_schoolId_idx" ON "chat_messages"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "chat_messages_createdAt_idx" ON "chat_messages"("createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "illness_reports_schoolId_idx" ON "illness_reports"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "illness_reports_studentId_idx" ON "illness_reports"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "illness_reports_reportedBy_idx" ON "illness_reports"("reportedBy");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "illness_reports_parentApprovalStatus_idx" ON "illness_reports"("parentApprovalStatus");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "illness_reports_status_idx" ON "illness_reports"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "communication_rooms_schoolId_idx" ON "communication_rooms"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "communication_rooms_studentId_idx" ON "communication_rooms"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "communication_rooms_teacherId_idx" ON "communication_rooms"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "communication_rooms_status_idx" ON "communication_rooms"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "communication_room_members_roomId_idx" ON "communication_room_members"("roomId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "communication_room_members_userId_idx" ON "communication_room_members"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "communication_room_members_roomId_userId_key" ON "communication_room_members"("roomId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "communication_messages_roomId_idx" ON "communication_messages"("roomId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "communication_messages_senderId_idx" ON "communication_messages"("senderId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "communication_messages_createdAt_idx" ON "communication_messages"("createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "counseling_appointments_schoolId_idx" ON "counseling_appointments"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "counseling_appointments_counselorId_idx" ON "counseling_appointments"("counselorId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "counseling_appointments_studentId_idx" ON "counseling_appointments"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "counseling_appointments_status_idx" ON "counseling_appointments"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "counseling_appointments_scheduledAt_idx" ON "counseling_appointments"("scheduledAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "disciplinary_committees_schoolId_idx" ON "disciplinary_committees"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "disciplinary_committee_members_committeeId_idx" ON "disciplinary_committee_members"("committeeId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "disciplinary_committee_members_userId_idx" ON "disciplinary_committee_members"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "disciplinary_committee_members_committeeId_userId_key" ON "disciplinary_committee_members"("committeeId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "disciplinary_cases_schoolId_idx" ON "disciplinary_cases"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "disciplinary_cases_committeeId_idx" ON "disciplinary_cases"("committeeId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "disciplinary_cases_studentId_idx" ON "disciplinary_cases"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "disciplinary_cases_status_idx" ON "disciplinary_cases"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ai_test_generations_schoolId_idx" ON "ai_test_generations"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ai_test_generations_assessmentId_idx" ON "ai_test_generations"("assessmentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ai_test_generations_studentId_idx" ON "ai_test_generations"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ai_test_generations_classGroupId_idx" ON "ai_test_generations"("classGroupId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "teacher_grading_reviews_schoolId_idx" ON "teacher_grading_reviews"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "teacher_grading_reviews_assessmentId_idx" ON "teacher_grading_reviews"("assessmentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "teacher_grading_reviews_teacherId_idx" ON "teacher_grading_reviews"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "teacher_grading_reviews_status_idx" ON "teacher_grading_reviews"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "grading_review_comments_reviewId_idx" ON "grading_review_comments"("reviewId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "grading_review_comments_userId_idx" ON "grading_review_comments"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "grading_annotations_schoolId_idx" ON "grading_annotations"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "grading_annotations_assessmentId_idx" ON "grading_annotations"("assessmentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "grading_annotations_studentId_idx" ON "grading_annotations"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "grading_annotations_teacherId_idx" ON "grading_annotations"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "grading_annotations_page_idx" ON "grading_annotations"("page");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "exam_plans_calendarEventId_key" ON "exam_plans"("calendarEventId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "exam_plans_assessmentId_key" ON "exam_plans"("assessmentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "exam_plans_schoolId_idx" ON "exam_plans"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "exam_plans_teacherId_idx" ON "exam_plans"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "exam_plans_subjectId_idx" ON "exam_plans"("subjectId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "exam_plans_classGroupId_idx" ON "exam_plans"("classGroupId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "exam_plans_date_idx" ON "exam_plans"("date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "exam_plans_status_idx" ON "exam_plans"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "study_plans_schoolId_idx" ON "study_plans"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "study_plans_studentId_idx" ON "study_plans"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "study_plans_dayOfWeek_idx" ON "study_plans"("dayOfWeek");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "study_plans_status_idx" ON "study_plans"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "study_sessions_schoolId_idx" ON "study_sessions"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "study_sessions_studentId_idx" ON "study_sessions"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "study_sessions_startTime_idx" ON "study_sessions"("startTime");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "study_sessions_status_idx" ON "study_sessions"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "library_books_schoolId_idx" ON "library_books"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "library_books_category_idx" ON "library_books"("category");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "library_books_readingLevel_idx" ON "library_books"("readingLevel");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "library_books_author_idx" ON "library_books"("author");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "book_checkouts_schoolId_idx" ON "book_checkouts"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "book_checkouts_bookId_idx" ON "book_checkouts"("bookId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "book_checkouts_studentId_idx" ON "book_checkouts"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "book_checkouts_status_idx" ON "book_checkouts"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "book_checkouts_dueDate_idx" ON "book_checkouts"("dueDate");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "book_reservations_schoolId_idx" ON "book_reservations"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "book_reservations_bookId_idx" ON "book_reservations"("bookId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "book_reservations_studentId_idx" ON "book_reservations"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "book_reservations_status_idx" ON "book_reservations"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "seating_charts_schoolId_idx" ON "seating_charts"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "seating_charts_classGroupId_idx" ON "seating_charts"("classGroupId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "seating_charts_teacherId_idx" ON "seating_charts"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "data_import_jobs_schoolId_idx" ON "data_import_jobs"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "data_import_jobs_userId_idx" ON "data_import_jobs"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "data_export_jobs_schoolId_idx" ON "data_export_jobs"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "data_export_jobs_userId_idx" ON "data_export_jobs"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "wellness_checkins_schoolId_idx" ON "wellness_checkins"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "wellness_checkins_studentId_idx" ON "wellness_checkins"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "wellness_checkins_date_idx" ON "wellness_checkins"("date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "wellness_scores_schoolId_idx" ON "wellness_scores"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "wellness_scores_studentId_idx" ON "wellness_scores"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "wellness_scores_date_idx" ON "wellness_scores"("date");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "career_profiles_studentId_key" ON "career_profiles"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "career_profiles_schoolId_idx" ON "career_profiles"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "career_profiles_studentId_idx" ON "career_profiles"("studentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "career_profiles_careerCluster_idx" ON "career_profiles"("careerCluster");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "career_goals_profileId_idx" ON "career_goals"("profileId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "career_goals_category_idx" ON "career_goals"("category");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "career_goals_status_idx" ON "career_goals"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "career_appointments_schoolId_idx" ON "career_appointments"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "career_appointments_profileId_idx" ON "career_appointments"("profileId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "career_appointments_counselorId_idx" ON "career_appointments"("counselorId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "career_appointments_date_idx" ON "career_appointments"("date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "career_appointments_status_idx" ON "career_appointments"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "substitute_teachers_userId_key" ON "substitute_teachers"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "substitute_teachers_schoolId_idx" ON "substitute_teachers"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "substitute_teachers_userId_idx" ON "substitute_teachers"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "teacher_absences_schoolId_idx" ON "teacher_absences"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "teacher_absences_teacherId_idx" ON "teacher_absences"("teacherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "teacher_absences_startDate_idx" ON "teacher_absences"("startDate");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "substitution_assignments_schoolId_idx" ON "substitution_assignments"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "substitution_assignments_absenceId_idx" ON "substitution_assignments"("absenceId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "substitution_assignments_substituteId_idx" ON "substitution_assignments"("substituteId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "substitution_assignments_date_idx" ON "substitution_assignments"("date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "GradeReport_schoolId_idx" ON "GradeReport"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "GradeReport_generatedBy_idx" ON "GradeReport"("generatedBy");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "DataRetentionPolicy_schoolId_idx" ON "DataRetentionPolicy"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "DataRetentionPolicy_dataCategory_idx" ON "DataRetentionPolicy"("dataCategory");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "DpiaRecord_schoolId_idx" ON "DpiaRecord"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "DpiaRecord_moduleScope_idx" ON "DpiaRecord"("moduleScope");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "DpiaRecord_schoolId_moduleScope_key" ON "DpiaRecord"("schoolId", "moduleScope");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ComplianceConsultation_schoolId_idx" ON "ComplianceConsultation"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ComplianceConsultation_consultationType_idx" ON "ComplianceConsultation"("consultationType");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "SchoolComplianceStatus_schoolId_key" ON "SchoolComplianceStatus"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "DeletionFlag_schoolId_idx" ON "DeletionFlag"("schoolId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "DeletionFlag_entityType_idx" ON "DeletionFlag"("entityType");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "DeletionFlag_flaggedAt_idx" ON "DeletionFlag"("flaggedAt");
|