Files
pwa/backend/prisma/migrations/20260913150000_assignments/migration.sql
T
ar.badieiandCursor c6243caa35 Add read-only Noya admin panel with assignments and UX polish.
Ship admin auth, user overview, assessments, chats, assignment filters/export, security hardening, and a separate desktop admin shell with clearer assessment answers.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:00:24 +03:30

88 lines
4.5 KiB
SQL

-- Cumulative homework/assignments: definitions, user instances, multi-reports, daily entries.
CREATE TABLE `assignment_definitions` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`key` VARCHAR(64) NOT NULL,
`sessionOrder` INTEGER NOT NULL,
`title` VARCHAR(191) NOT NULL,
`description` TEXT NOT NULL,
`instructions` TEXT NOT NULL,
`assignmentType` ENUM('ONE_TIME', 'DAILY', 'ONGOING') NOT NULL,
`formSchema` JSON NULL,
`expectedDurationDays` INTEGER NULL,
`suggestedEndDay` INTEGER NULL,
`requiresReport` BOOLEAN NOT NULL DEFAULT true,
`blocksNextSession` BOOLEAN NOT NULL DEFAULT false,
`isFinalAssignment` BOOLEAN NOT NULL DEFAULT false,
`displayOrder` INTEGER NOT NULL DEFAULT 0,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `assignment_definitions_key_key`(`key`),
INDEX `idx_assignment_definitions_session_order`(`sessionOrder`),
INDEX `idx_assignment_definitions_display_order`(`displayOrder`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE `user_assignments` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`userId` BIGINT UNSIGNED NOT NULL,
`definitionId` BIGINT UNSIGNED NOT NULL,
`status` ENUM('NOT_STARTED', 'ACTIVE', 'IN_PROGRESS', 'REPORTED', 'COMPLETED') NOT NULL DEFAULT 'ACTIVE',
`activatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`startedAt` DATETIME(3) NULL,
`lastActivityAt` DATETIME(3) NULL,
`completedAt` DATETIME(3) NULL,
`draftData` JSON NULL,
`completionNote` TEXT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
INDEX `idx_user_assignments_user_status`(`userId`, `status`),
INDEX `idx_user_assignments_user_activated`(`userId`, `activatedAt`),
UNIQUE INDEX `uq_user_assignments_user_definition`(`userId`, `definitionId`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE `assignment_reports` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`userAssignmentId` BIGINT UNSIGNED NOT NULL,
`userId` BIGINT UNSIGNED NOT NULL,
`reportText` TEXT NOT NULL,
`reportStatus` ENUM('completed', 'in_progress', 'difficult', 'not_started') NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
INDEX `idx_assignment_reports_ua_created`(`userAssignmentId`, `createdAt`),
INDEX `idx_assignment_reports_user_created`(`userId`, `createdAt`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE `assignment_daily_entries` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`userAssignmentId` BIGINT UNSIGNED NOT NULL,
`userId` BIGINT UNSIGNED NOT NULL,
`entryDate` DATE NOT NULL,
`responseData` JSON NOT NULL,
`note` TEXT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
INDEX `idx_assignment_daily_entries_user_date`(`userId`, `entryDate`),
UNIQUE INDEX `uq_assignment_daily_entries_ua_date`(`userAssignmentId`, `entryDate`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `assignment_definitions` ADD CONSTRAINT `assignment_definitions_sessionOrder_fkey` FOREIGN KEY (`sessionOrder`) REFERENCES `course_sessions`(`order`) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `user_assignments` ADD CONSTRAINT `user_assignments_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `user_assignments` ADD CONSTRAINT `user_assignments_definitionId_fkey` FOREIGN KEY (`definitionId`) REFERENCES `assignment_definitions`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE `assignment_reports` ADD CONSTRAINT `assignment_reports_userAssignmentId_fkey` FOREIGN KEY (`userAssignmentId`) REFERENCES `user_assignments`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `assignment_reports` ADD CONSTRAINT `assignment_reports_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `assignment_daily_entries` ADD CONSTRAINT `assignment_daily_entries_userAssignmentId_fkey` FOREIGN KEY (`userAssignmentId`) REFERENCES `user_assignments`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `assignment_daily_entries` ADD CONSTRAINT `assignment_daily_entries_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;