diff --git a/.gitignore b/.gitignore index efd531d..f2d3dfa 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ .env # Prisma -prisma/migrations +# prisma/migrations # Logs logs diff --git a/prisma/migrations/20260217152737_20260218/migration.sql b/prisma/migrations/20260217152737_20260218/migration.sql new file mode 100644 index 0000000..b254826 --- /dev/null +++ b/prisma/migrations/20260217152737_20260218/migration.sql @@ -0,0 +1,202 @@ +-- CreateTable +CREATE TABLE `TaskPriority` ( + `priority_id` INTEGER NOT NULL AUTO_INCREMENT, + `user_id` INTEGER NOT NULL, + `task_id` INTEGER NOT NULL, + `rank` INTEGER NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NULL, + + UNIQUE INDEX `TaskPriority_user_id_task_id_key`(`user_id`, `task_id`), + PRIMARY KEY (`priority_id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `User` ( + `user_id` INTEGER NOT NULL AUTO_INCREMENT, + `nickname` VARCHAR(100) NOT NULL, + `phone_num` VARCHAR(15) NOT NULL, + `email` VARCHAR(50) NOT NULL, + `profile_image` VARCHAR(200) NULL, + `password` VARCHAR(50) NULL, + `provider` ENUM('KAKAO') NULL, + `provider_id` VARCHAR(10) NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NULL, + `deleted_at` DATETIME NULL, + `deadline_alarm` INTEGER NOT NULL DEFAULT 24, + `task_alarm` INTEGER NOT NULL DEFAULT 24, + + UNIQUE INDEX `User_email_key`(`email`), + INDEX `User_deleted_at_idx`(`deleted_at`), + UNIQUE INDEX `User_provider_provider_id_key`(`provider`, `provider_id`), + PRIMARY KEY (`user_id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `UserAlarm` ( + `alarm_id` INTEGER NOT NULL AUTO_INCREMENT, + `user_id` INTEGER NOT NULL, + `task_id` INTEGER NULL, + `sub_task_id` INTEGER NULL, + `title` VARCHAR(50) NOT NULL, + `alarm_content` VARCHAR(50) NOT NULL, + `is_read` BOOLEAN NOT NULL DEFAULT false, + `alarm_date` DATETIME NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + + PRIMARY KEY (`alarm_id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Folder` ( + `folder_id` INTEGER NOT NULL AUTO_INCREMENT, + `user_id` INTEGER NOT NULL, + `folder_title` VARCHAR(100) NOT NULL, + `color` VARCHAR(7) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + + PRIMARY KEY (`folder_id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Task` ( + `task_id` INTEGER NOT NULL AUTO_INCREMENT, + `folder_id` INTEGER NULL, + `title` VARCHAR(100) NOT NULL, + `deadline` DATE NOT NULL, + `type` ENUM('PERSONAL', 'TEAM') NOT NULL, + `status` ENUM('PENDING', 'PROGRESS', 'COMPLETED') NOT NULL, + `is_alarm` BOOLEAN NOT NULL DEFAULT true, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NULL, + `invite_code` VARCHAR(50) NULL, + `invite_expired` DATETIME NULL, + + PRIMARY KEY (`task_id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Member` ( + `member_id` INTEGER NOT NULL AUTO_INCREMENT, + `user_id` INTEGER NOT NULL, + `task_id` INTEGER NOT NULL, + `role` BOOLEAN NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + + UNIQUE INDEX `Member_user_id_task_id_key`(`user_id`, `task_id`), + PRIMARY KEY (`member_id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `SubTask` ( + `sub_task_id` INTEGER NOT NULL AUTO_INCREMENT, + `assignee_id` INTEGER NULL, + `task_id` INTEGER NOT NULL, + `title` VARCHAR(100) NOT NULL, + `end_date` DATE NOT NULL, + `status` ENUM('PENDING', 'PROGRESS', 'COMPLETED') NOT NULL DEFAULT 'PENDING', + `is_alarm` BOOLEAN NOT NULL DEFAULT true, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NULL, + + PRIMARY KEY (`sub_task_id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Comment` ( + `comment_id` INTEGER NOT NULL AUTO_INCREMENT, + `sub_task_id` INTEGER NOT NULL, + `user_id` INTEGER NOT NULL, + `content` TEXT NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + + PRIMARY KEY (`comment_id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Reference` ( + `data_id` INTEGER NOT NULL AUTO_INCREMENT, + `task_id` INTEGER NOT NULL, + `name` VARCHAR(50) NOT NULL, + `url` VARCHAR(255) NULL, + `file_url` VARCHAR(255) NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NULL, + + PRIMARY KEY (`data_id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Log` ( + `log_id` INTEGER NOT NULL AUTO_INCREMENT, + `task_id` INTEGER NOT NULL, + `date` DATE NOT NULL, + `agenda` TEXT NULL, + `conclusion` TEXT NULL, + `discussion` TEXT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NULL, + + PRIMARY KEY (`log_id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Communication` ( + `comu_id` INTEGER NOT NULL AUTO_INCREMENT, + `task_id` INTEGER NOT NULL, + `name` VARCHAR(50) NOT NULL, + `url` VARCHAR(255) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NULL, + + PRIMARY KEY (`comu_id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- AddForeignKey +ALTER TABLE `TaskPriority` ADD CONSTRAINT `TaskPriority_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `TaskPriority` ADD CONSTRAINT `TaskPriority_task_id_fkey` FOREIGN KEY (`task_id`) REFERENCES `Task`(`task_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `UserAlarm` ADD CONSTRAINT `UserAlarm_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `UserAlarm` ADD CONSTRAINT `UserAlarm_task_id_fkey` FOREIGN KEY (`task_id`) REFERENCES `Task`(`task_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `UserAlarm` ADD CONSTRAINT `UserAlarm_sub_task_id_fkey` FOREIGN KEY (`sub_task_id`) REFERENCES `SubTask`(`sub_task_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `Folder` ADD CONSTRAINT `Folder_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `Task` ADD CONSTRAINT `Task_folder_id_fkey` FOREIGN KEY (`folder_id`) REFERENCES `Folder`(`folder_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `Member` ADD CONSTRAINT `Member_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `Member` ADD CONSTRAINT `Member_task_id_fkey` FOREIGN KEY (`task_id`) REFERENCES `Task`(`task_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `SubTask` ADD CONSTRAINT `SubTask_task_id_fkey` FOREIGN KEY (`task_id`) REFERENCES `Task`(`task_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `SubTask` ADD CONSTRAINT `SubTask_assignee_id_fkey` FOREIGN KEY (`assignee_id`) REFERENCES `User`(`user_id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `Comment` ADD CONSTRAINT `Comment_sub_task_id_fkey` FOREIGN KEY (`sub_task_id`) REFERENCES `SubTask`(`sub_task_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `Comment` ADD CONSTRAINT `Comment_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `Reference` ADD CONSTRAINT `Reference_task_id_fkey` FOREIGN KEY (`task_id`) REFERENCES `Task`(`task_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `Log` ADD CONSTRAINT `Log_task_id_fkey` FOREIGN KEY (`task_id`) REFERENCES `Task`(`task_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `Communication` ADD CONSTRAINT `Communication_task_id_fkey` FOREIGN KEY (`task_id`) REFERENCES `Task`(`task_id`) ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..592fc0b --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (e.g., Git) +provider = "mysql" diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6d81b22..3a5f90d 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -90,7 +90,7 @@ model UserAlarm { taskId Int? @map("task_id") // 과제 id 과제 알람일 수도 있고 아닐 수도 있으니 nullable 고려 subTaskId Int? @map("sub_task_id") // 세부과제 id 세부과제알람일 수도 있고 아닐 수도 있으니 nullable 고려 - title String @db.VarChar(30) //알람 제목 + title String @db.VarChar(50) //알람 제목 alarmContent String @map("alarm_content") @db.VarChar(50) //알람 내용 isRead Boolean @default(false) @map("is_read") // 0: off, 1: on @@ -110,7 +110,7 @@ model UserAlarm { model Folder { id Int @id @default(autoincrement()) @map("folder_id") userId Int @map("user_id") - folderTitle String @map("folder_title") @db.VarChar(11) + folderTitle String @map("folder_title") @db.VarChar(100) color String @db.VarChar(7) createdAt DateTime @default(now()) @map("created_at") @db.DateTime @@ -125,7 +125,7 @@ model Folder { model Task { id Int @id @default(autoincrement()) @map("task_id") folderId Int? @map("folder_id") // 처음 과제를 생성하면 폴더에 과제가 안들어가있으므로 nullable 고려 - title String @db.VarChar(30) + title String @db.VarChar(100) deadline DateTime @db.Date type TaskType // Team, Personal status TaskStatus // PENDING, PROGRESS, COMPLETED @@ -170,7 +170,7 @@ model SubTask { assigneeId Int? @map("assignee_id") // 담당자 id (개인과제일 경우 모두 자신에게 할당됨), 처음 세부과제 생성 시 담당자 없음. taskId Int @map("task_id") // 과제 id - title String @db.VarChar(30) // 세부과제 제목 + title String @db.VarChar(100) // 세부과제 제목 endDate DateTime @map("end_date") @db.Date // 세부과제 완료 일자 => 생성 시 설정되어야 함. status SubTaskStatus @default(PENDING) // PENDING, PROGRESS, COMPLETED => 생성 시 PENDING으로 설정됨. isAlarm Boolean @default(true) @map("is_alarm") // true: on, false: off => 생성 시 true로 설정됨. @@ -206,7 +206,7 @@ model Comment { model Reference { id Int @id @default(autoincrement()) @map("data_id") taskId Int @map("task_id") // 과제 id - name String @db.VarChar(16) // 자료 이름 + name String @db.VarChar(50) // 자료 이름 url String? @db.VarChar(255) // 자료 링크 fileUrl String? @map("file_url") @db.VarChar(255) // 자료 파일 url createdAt DateTime @default(now()) @map("created_at") @db.DateTime // 자료 생성 일자 @@ -239,7 +239,7 @@ model Log { model Communication { id Int @id @default(autoincrement()) @map("comu_id") taskId Int @map("task_id") - name String @db.VarChar(16) + name String @db.VarChar(50) url String @db.VarChar(255) createdAt DateTime @default(now()) @map("created_at") @db.DateTime updatedAt DateTime? @updatedAt @map("updated_at") @db.DateTime