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>
88 lines
4.5 KiB
SQL
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;
|