-- CreateTable CREATE TABLE `User` ( `id` VARCHAR(191) NOT NULL, `username` VARCHAR(50) NOT NULL, `password` VARCHAR(255) NULL, `avatarUrl` VARCHAR(500) NULL, `role` ENUM('USER', 'ADMIN', 'CREATOR') NOT NULL DEFAULT 'USER', `status` ENUM('ACTIVE', 'BANNED', 'FLAGGED') NOT NULL DEFAULT 'ACTIVE', `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `lastLogin` DATETIME(3) NOT NULL, UNIQUE INDEX `User_username_key`(`username`), INDEX `User_username_idx`(`username`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Material` ( `id` VARCHAR(191) NOT NULL, `title` VARCHAR(100) NOT NULL, `description` TEXT NOT NULL, `type` ENUM('CODE', 'ASSET_ZIP', 'VIDEO') NOT NULL, `contentUrl` VARCHAR(500) NULL, `codeSnippet` LONGTEXT NULL, `language` VARCHAR(20) NULL, `views` INTEGER NOT NULL DEFAULT 0, `downloads` INTEGER NOT NULL DEFAULT 0, `authorId` VARCHAR(191) NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `Material_type_idx`(`type`), INDEX `Material_authorId_idx`(`authorId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Comment` ( `id` VARCHAR(191) NOT NULL, `content` VARCHAR(1000) NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `authorId` VARCHAR(191) NOT NULL, `materialId` VARCHAR(191) NOT NULL, INDEX `Comment_materialId_idx`(`materialId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Favorite` ( `userId` VARCHAR(191) NOT NULL, `materialId` VARCHAR(191) NOT NULL, PRIMARY KEY (`userId`, `materialId`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Tag` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `name` VARCHAR(191) NOT NULL, UNIQUE INDEX `Tag_name_key`(`name`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `_MaterialToTag` ( `A` VARCHAR(191) NOT NULL, `B` INTEGER NOT NULL, UNIQUE INDEX `_MaterialToTag_AB_unique`(`A`, `B`), INDEX `_MaterialToTag_B_index`(`B`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- AddForeignKey ALTER TABLE `Material` ADD CONSTRAINT `Material_authorId_fkey` FOREIGN KEY (`authorId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Comment` ADD CONSTRAINT `Comment_authorId_fkey` FOREIGN KEY (`authorId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Comment` ADD CONSTRAINT `Comment_materialId_fkey` FOREIGN KEY (`materialId`) REFERENCES `Material`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Favorite` ADD CONSTRAINT `Favorite_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Favorite` ADD CONSTRAINT `Favorite_materialId_fkey` FOREIGN KEY (`materialId`) REFERENCES `Material`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `_MaterialToTag` ADD CONSTRAINT `_MaterialToTag_A_fkey` FOREIGN KEY (`A`) REFERENCES `Material`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `_MaterialToTag` ADD CONSTRAINT `_MaterialToTag_B_fkey` FOREIGN KEY (`B`) REFERENCES `Tag`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;