593 lines
23 KiB
MySQL
593 lines
23 KiB
MySQL
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `User` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`email` VARCHAR(255) NULL,
|
||
|
|
`nickname` VARCHAR(100) NULL,
|
||
|
|
`avatarUrl` VARCHAR(500) NULL,
|
||
|
|
`role` VARCHAR(32) NOT NULL DEFAULT 'USER',
|
||
|
|
`status` VARCHAR(32) NOT NULL DEFAULT 'active',
|
||
|
|
`onboardingCompleted` BOOLEAN NOT NULL DEFAULT false,
|
||
|
|
`lastLoginAt` DATETIME(3) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
`deletedAt` DATETIME(3) NULL,
|
||
|
|
|
||
|
|
INDEX `User_email_idx`(`email`),
|
||
|
|
INDEX `User_status_idx`(`status`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `AuthAccount` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`provider` VARCHAR(32) NOT NULL,
|
||
|
|
`providerUserId` VARCHAR(255) NOT NULL,
|
||
|
|
`email` VARCHAR(255) NULL,
|
||
|
|
`rawProfileJson` JSON NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
INDEX `AuthAccount_userId_idx`(`userId`),
|
||
|
|
UNIQUE INDEX `AuthAccount_provider_providerUserId_key`(`provider`, `providerUserId`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `RefreshToken` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`tokenHash` VARCHAR(255) NOT NULL,
|
||
|
|
`deviceId` VARCHAR(255) NULL,
|
||
|
|
`deviceName` VARCHAR(255) NULL,
|
||
|
|
`expiresAt` DATETIME(3) NOT NULL,
|
||
|
|
`revokedAt` DATETIME(3) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
INDEX `RefreshToken_userId_idx`(`userId`),
|
||
|
|
INDEX `RefreshToken_tokenHash_idx`(`tokenHash`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `UserProfile` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`learningIdentity` VARCHAR(100) NULL,
|
||
|
|
`learningDirection` VARCHAR(255) NULL,
|
||
|
|
`bio` TEXT NULL,
|
||
|
|
`currentGoal` VARCHAR(255) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
UNIQUE INDEX `UserProfile_userId_key`(`userId`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `UserPreference` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`preferredMethods` JSON NULL,
|
||
|
|
`defaultFocusMinutes` INTEGER NOT NULL DEFAULT 25,
|
||
|
|
`aiSuggestionLevel` VARCHAR(32) NOT NULL DEFAULT 'normal',
|
||
|
|
`language` VARCHAR(32) NOT NULL DEFAULT 'zh-CN',
|
||
|
|
`appearance` VARCHAR(32) NOT NULL DEFAULT 'system',
|
||
|
|
`notificationEnabled` BOOLEAN NOT NULL DEFAULT true,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
UNIQUE INDEX `UserPreference_userId_key`(`userId`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `UserConsent` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`consentType` VARCHAR(32) NOT NULL,
|
||
|
|
`version` VARCHAR(50) NOT NULL,
|
||
|
|
`acceptedAt` DATETIME(3) NOT NULL,
|
||
|
|
`ipAddress` VARCHAR(100) NULL,
|
||
|
|
`userAgent` VARCHAR(500) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
|
||
|
|
INDEX `UserConsent_userId_idx`(`userId`),
|
||
|
|
INDEX `UserConsent_consentType_idx`(`consentType`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `KnowledgeBase` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`title` VARCHAR(255) NOT NULL,
|
||
|
|
`description` TEXT NULL,
|
||
|
|
`coverKey` VARCHAR(100) NULL,
|
||
|
|
`status` VARCHAR(32) NOT NULL DEFAULT 'active',
|
||
|
|
`itemCount` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`lastStudiedAt` DATETIME(3) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
`deletedAt` DATETIME(3) NULL,
|
||
|
|
|
||
|
|
INDEX `KnowledgeBase_userId_idx`(`userId`),
|
||
|
|
INDEX `KnowledgeBase_status_idx`(`status`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `KnowledgeItem` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`knowledgeBaseId` VARCHAR(191) NOT NULL,
|
||
|
|
`parentId` VARCHAR(191) NULL,
|
||
|
|
`itemType` VARCHAR(32) NOT NULL,
|
||
|
|
`title` VARCHAR(255) NOT NULL,
|
||
|
|
`content` LONGTEXT NULL,
|
||
|
|
`summary` TEXT NULL,
|
||
|
|
`sourceType` VARCHAR(32) NULL,
|
||
|
|
`sourceRef` VARCHAR(500) NULL,
|
||
|
|
`orderIndex` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`status` VARCHAR(32) NOT NULL DEFAULT 'active',
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
`deletedAt` DATETIME(3) NULL,
|
||
|
|
|
||
|
|
INDEX `KnowledgeItem_userId_idx`(`userId`),
|
||
|
|
INDEX `KnowledgeItem_knowledgeBaseId_idx`(`knowledgeBaseId`),
|
||
|
|
INDEX `KnowledgeItem_parentId_idx`(`parentId`),
|
||
|
|
INDEX `KnowledgeItem_itemType_idx`(`itemType`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `KnowledgeItemRelation` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`sourceItemId` VARCHAR(191) NOT NULL,
|
||
|
|
`targetItemId` VARCHAR(191) NOT NULL,
|
||
|
|
`relationType` VARCHAR(32) NOT NULL,
|
||
|
|
`confidence` DECIMAL(5, 2) NULL,
|
||
|
|
`reason` TEXT NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
INDEX `KnowledgeItemRelation_sourceItemId_idx`(`sourceItemId`),
|
||
|
|
INDEX `KnowledgeItemRelation_targetItemId_idx`(`targetItemId`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `Tag` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`name` VARCHAR(100) NOT NULL,
|
||
|
|
`color` VARCHAR(32) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
UNIQUE INDEX `Tag_userId_name_key`(`userId`, `name`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `KnowledgeItemTag` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`knowledgeItemId` VARCHAR(191) NOT NULL,
|
||
|
|
`tagId` VARCHAR(191) NOT NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
|
||
|
|
UNIQUE INDEX `KnowledgeItemTag_knowledgeItemId_tagId_key`(`knowledgeItemId`, `tagId`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `UploadedFile` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`filename` VARCHAR(255) NOT NULL,
|
||
|
|
`mimeType` VARCHAR(100) NULL,
|
||
|
|
`storagePath` VARCHAR(500) NOT NULL,
|
||
|
|
`sizeBytes` BIGINT NOT NULL DEFAULT 0,
|
||
|
|
`checksum` VARCHAR(255) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
|
||
|
|
INDEX `UploadedFile_userId_idx`(`userId`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `DocumentImport` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`knowledgeBaseId` VARCHAR(191) NULL,
|
||
|
|
`fileId` VARCHAR(191) NULL,
|
||
|
|
`sourceType` VARCHAR(32) NOT NULL,
|
||
|
|
`sourceName` VARCHAR(255) NULL,
|
||
|
|
`sourceUrl` VARCHAR(500) NULL,
|
||
|
|
`rawText` LONGTEXT NULL,
|
||
|
|
`status` VARCHAR(32) NOT NULL DEFAULT 'pending',
|
||
|
|
`progress` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`errorMessage` TEXT NULL,
|
||
|
|
`resultJson` JSON NULL,
|
||
|
|
`startedAt` DATETIME(3) NULL,
|
||
|
|
`completedAt` DATETIME(3) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
INDEX `DocumentImport_userId_idx`(`userId`),
|
||
|
|
INDEX `DocumentImport_status_idx`(`status`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `LearningSession` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`knowledgeBaseId` VARCHAR(191) NULL,
|
||
|
|
`knowledgeItemId` VARCHAR(191) NULL,
|
||
|
|
`mode` VARCHAR(32) NOT NULL,
|
||
|
|
`status` VARCHAR(32) NOT NULL DEFAULT 'active',
|
||
|
|
`startedAt` DATETIME(3) NOT NULL,
|
||
|
|
`endedAt` DATETIME(3) NULL,
|
||
|
|
`durationSeconds` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`focusMinutes` INTEGER NULL,
|
||
|
|
`metadata` JSON NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
INDEX `LearningSession_userId_idx`(`userId`),
|
||
|
|
INDEX `LearningSession_knowledgeItemId_idx`(`knowledgeItemId`),
|
||
|
|
INDEX `LearningSession_startedAt_idx`(`startedAt`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `LearningRecord` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`sessionId` VARCHAR(191) NULL,
|
||
|
|
`recordType` VARCHAR(32) NOT NULL,
|
||
|
|
`title` VARCHAR(255) NOT NULL,
|
||
|
|
`description` TEXT NULL,
|
||
|
|
`durationSeconds` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`occurredAt` DATETIME(3) NOT NULL,
|
||
|
|
`metadata` JSON NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
|
||
|
|
INDEX `LearningRecord_userId_idx`(`userId`),
|
||
|
|
INDEX `LearningRecord_occurredAt_idx`(`occurredAt`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `ActiveRecallQuestion` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`knowledgeItemId` VARCHAR(191) NULL,
|
||
|
|
`questionText` TEXT NOT NULL,
|
||
|
|
`difficulty` VARCHAR(32) NULL,
|
||
|
|
`createdBy` VARCHAR(32) NOT NULL DEFAULT 'ai',
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
INDEX `ActiveRecallQuestion_userId_idx`(`userId`),
|
||
|
|
INDEX `ActiveRecallQuestion_knowledgeItemId_idx`(`knowledgeItemId`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `ActiveRecallAnswer` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`questionId` VARCHAR(191) NULL,
|
||
|
|
`sessionId` VARCHAR(191) NULL,
|
||
|
|
`answerType` VARCHAR(32) NOT NULL DEFAULT 'text',
|
||
|
|
`answerText` LONGTEXT NULL,
|
||
|
|
`audioFileId` VARCHAR(191) NULL,
|
||
|
|
`submittedAt` DATETIME(3) NOT NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
|
||
|
|
INDEX `ActiveRecallAnswer_userId_idx`(`userId`),
|
||
|
|
INDEX `ActiveRecallAnswer_questionId_idx`(`questionId`),
|
||
|
|
INDEX `ActiveRecallAnswer_sessionId_idx`(`sessionId`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `AiAnalysisJob` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`sessionId` VARCHAR(191) NULL,
|
||
|
|
`answerId` VARCHAR(191) NULL,
|
||
|
|
`jobType` VARCHAR(32) NOT NULL,
|
||
|
|
`status` VARCHAR(32) NOT NULL DEFAULT 'pending',
|
||
|
|
`progress` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`errorMessage` TEXT NULL,
|
||
|
|
`queuedAt` DATETIME(3) NULL,
|
||
|
|
`startedAt` DATETIME(3) NULL,
|
||
|
|
`completedAt` DATETIME(3) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
INDEX `AiAnalysisJob_userId_idx`(`userId`),
|
||
|
|
INDEX `AiAnalysisJob_status_idx`(`status`),
|
||
|
|
INDEX `AiAnalysisJob_sessionId_idx`(`sessionId`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `AiAnalysisResult` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`jobId` VARCHAR(191) NOT NULL,
|
||
|
|
`sessionId` VARCHAR(191) NULL,
|
||
|
|
`answerId` VARCHAR(191) NULL,
|
||
|
|
`summary` TEXT NULL,
|
||
|
|
`masteryScore` INTEGER NULL,
|
||
|
|
`strengths` JSON NULL,
|
||
|
|
`weaknesses` JSON NULL,
|
||
|
|
`suggestions` JSON NULL,
|
||
|
|
`nextActions` JSON NULL,
|
||
|
|
`rawResult` JSON NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
INDEX `AiAnalysisResult_userId_idx`(`userId`),
|
||
|
|
INDEX `AiAnalysisResult_jobId_idx`(`jobId`),
|
||
|
|
INDEX `AiAnalysisResult_sessionId_idx`(`sessionId`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `FocusItem` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`knowledgeBaseId` VARCHAR(191) NULL,
|
||
|
|
`knowledgeItemId` VARCHAR(191) NULL,
|
||
|
|
`analysisResultId` VARCHAR(191) NULL,
|
||
|
|
`title` VARCHAR(255) NOT NULL,
|
||
|
|
`reason` TEXT NULL,
|
||
|
|
`suggestion` TEXT NULL,
|
||
|
|
`priority` VARCHAR(32) NOT NULL DEFAULT 'normal',
|
||
|
|
`status` VARCHAR(32) NOT NULL DEFAULT 'open',
|
||
|
|
`masteryScore` INTEGER NULL,
|
||
|
|
`dueAt` DATETIME(3) NULL,
|
||
|
|
`completedAt` DATETIME(3) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
`deletedAt` DATETIME(3) NULL,
|
||
|
|
|
||
|
|
INDEX `FocusItem_userId_idx`(`userId`),
|
||
|
|
INDEX `FocusItem_status_idx`(`status`),
|
||
|
|
INDEX `FocusItem_dueAt_idx`(`dueAt`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `ReviewCard` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`knowledgeItemId` VARCHAR(191) NULL,
|
||
|
|
`focusItemId` VARCHAR(191) NULL,
|
||
|
|
`frontText` TEXT NOT NULL,
|
||
|
|
`backText` TEXT NULL,
|
||
|
|
`difficulty` VARCHAR(32) NULL,
|
||
|
|
`status` VARCHAR(32) NOT NULL DEFAULT 'active',
|
||
|
|
`nextReviewAt` DATETIME(3) NULL,
|
||
|
|
`intervalDays` INTEGER NOT NULL DEFAULT 1,
|
||
|
|
`easeFactor` DECIMAL(4, 2) NOT NULL DEFAULT 2.50,
|
||
|
|
`repetitionCount` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`lapseCount` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
`deletedAt` DATETIME(3) NULL,
|
||
|
|
|
||
|
|
INDEX `ReviewCard_userId_idx`(`userId`),
|
||
|
|
INDEX `ReviewCard_nextReviewAt_idx`(`nextReviewAt`),
|
||
|
|
INDEX `ReviewCard_focusItemId_idx`(`focusItemId`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `ReviewLog` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`reviewCardId` VARCHAR(191) NOT NULL,
|
||
|
|
`sessionId` VARCHAR(191) NULL,
|
||
|
|
`rating` VARCHAR(32) NOT NULL,
|
||
|
|
`responseText` TEXT NULL,
|
||
|
|
`reviewedAt` DATETIME(3) NOT NULL,
|
||
|
|
`nextReviewAt` DATETIME(3) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
|
||
|
|
INDEX `ReviewLog_userId_idx`(`userId`),
|
||
|
|
INDEX `ReviewLog_reviewCardId_idx`(`reviewCardId`),
|
||
|
|
INDEX `ReviewLog_reviewedAt_idx`(`reviewedAt`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `ReviewPlan` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`title` VARCHAR(255) NOT NULL,
|
||
|
|
`status` VARCHAR(32) NOT NULL DEFAULT 'active',
|
||
|
|
`scheduledAt` DATETIME(3) NULL,
|
||
|
|
`completedAt` DATETIME(3) NULL,
|
||
|
|
`cardCount` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
INDEX `ReviewPlan_userId_idx`(`userId`),
|
||
|
|
INDEX `ReviewPlan_scheduledAt_idx`(`scheduledAt`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `DailyLearningActivity` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`activityDate` DATE NOT NULL,
|
||
|
|
`durationSeconds` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`sessionsCount` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`activeRecallCount` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`reviewCount` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`aiAnalysisCount` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`completedLoopCount` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`activityLevel` INTEGER NOT NULL DEFAULT 0,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
INDEX `DailyLearningActivity_userId_idx`(`userId`),
|
||
|
|
UNIQUE INDEX `DailyLearningActivity_userId_activityDate_key`(`userId`, `activityDate`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `Notification` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NOT NULL,
|
||
|
|
`type` VARCHAR(32) NOT NULL,
|
||
|
|
`title` VARCHAR(255) NOT NULL,
|
||
|
|
`content` TEXT NULL,
|
||
|
|
`data` JSON NULL,
|
||
|
|
`readAt` DATETIME(3) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
|
||
|
|
INDEX `Notification_userId_idx`(`userId`),
|
||
|
|
INDEX `Notification_readAt_idx`(`readAt`),
|
||
|
|
INDEX `Notification_type_idx`(`type`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `Feedback` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`userId` VARCHAR(191) NULL,
|
||
|
|
`email` VARCHAR(255) NULL,
|
||
|
|
`category` VARCHAR(64) NOT NULL,
|
||
|
|
`content` TEXT NOT NULL,
|
||
|
|
`deviceInfo` JSON NULL,
|
||
|
|
`status` VARCHAR(32) NOT NULL DEFAULT 'open',
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
INDEX `Feedback_userId_idx`(`userId`),
|
||
|
|
INDEX `Feedback_status_idx`(`status`),
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE `AppChangelog` (
|
||
|
|
`id` VARCHAR(191) NOT NULL,
|
||
|
|
`version` VARCHAR(50) NOT NULL,
|
||
|
|
`title` VARCHAR(255) NOT NULL,
|
||
|
|
`content` TEXT NOT NULL,
|
||
|
|
`platform` VARCHAR(32) NOT NULL DEFAULT 'ios',
|
||
|
|
`publishedAt` DATETIME(3) NULL,
|
||
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
||
|
|
|
||
|
|
PRIMARY KEY (`id`)
|
||
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `AuthAccount` ADD CONSTRAINT `AuthAccount_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `RefreshToken` ADD CONSTRAINT `RefreshToken_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `UserProfile` ADD CONSTRAINT `UserProfile_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `UserPreference` ADD CONSTRAINT `UserPreference_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `UserConsent` ADD CONSTRAINT `UserConsent_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `KnowledgeBase` ADD CONSTRAINT `KnowledgeBase_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `KnowledgeItem` ADD CONSTRAINT `KnowledgeItem_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `KnowledgeItem` ADD CONSTRAINT `KnowledgeItem_knowledgeBaseId_fkey` FOREIGN KEY (`knowledgeBaseId`) REFERENCES `KnowledgeBase`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `KnowledgeItem` ADD CONSTRAINT `KnowledgeItem_parentId_fkey` FOREIGN KEY (`parentId`) REFERENCES `KnowledgeItem`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `KnowledgeItemRelation` ADD CONSTRAINT `KnowledgeItemRelation_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `Tag` ADD CONSTRAINT `Tag_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `KnowledgeItemTag` ADD CONSTRAINT `KnowledgeItemTag_knowledgeItemId_fkey` FOREIGN KEY (`knowledgeItemId`) REFERENCES `KnowledgeItem`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `KnowledgeItemTag` ADD CONSTRAINT `KnowledgeItemTag_tagId_fkey` FOREIGN KEY (`tagId`) REFERENCES `Tag`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `UploadedFile` ADD CONSTRAINT `UploadedFile_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `DocumentImport` ADD CONSTRAINT `DocumentImport_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `LearningSession` ADD CONSTRAINT `LearningSession_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `LearningRecord` ADD CONSTRAINT `LearningRecord_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `ActiveRecallQuestion` ADD CONSTRAINT `ActiveRecallQuestion_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `ActiveRecallAnswer` ADD CONSTRAINT `ActiveRecallAnswer_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `ActiveRecallAnswer` ADD CONSTRAINT `ActiveRecallAnswer_questionId_fkey` FOREIGN KEY (`questionId`) REFERENCES `ActiveRecallQuestion`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `AiAnalysisJob` ADD CONSTRAINT `AiAnalysisJob_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `AiAnalysisResult` ADD CONSTRAINT `AiAnalysisResult_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `AiAnalysisResult` ADD CONSTRAINT `AiAnalysisResult_jobId_fkey` FOREIGN KEY (`jobId`) REFERENCES `AiAnalysisJob`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `FocusItem` ADD CONSTRAINT `FocusItem_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `FocusItem` ADD CONSTRAINT `FocusItem_knowledgeBaseId_fkey` FOREIGN KEY (`knowledgeBaseId`) REFERENCES `KnowledgeBase`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `ReviewCard` ADD CONSTRAINT `ReviewCard_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `ReviewLog` ADD CONSTRAINT `ReviewLog_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `ReviewLog` ADD CONSTRAINT `ReviewLog_reviewCardId_fkey` FOREIGN KEY (`reviewCardId`) REFERENCES `ReviewCard`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `ReviewPlan` ADD CONSTRAINT `ReviewPlan_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `DailyLearningActivity` ADD CONSTRAINT `DailyLearningActivity_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `Notification` ADD CONSTRAINT `Notification_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE `Feedback` ADD CONSTRAINT `Feedback_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||
|
|
|