feat: menambah dan memperbarui skema database untuk project, project member, dan task lms internify
This commit is contained in:
@@ -0,0 +1,116 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE `admin` ADD COLUMN `professional_bio` TEXT NULL,
|
||||||
|
ADD COLUMN `profile_picture` TEXT NULL,
|
||||||
|
MODIFY `role` ENUM('admin', 'intern') NOT NULL DEFAULT 'admin';
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE `user` (
|
||||||
|
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||||
|
`id_mahasiswa` INTEGER NOT NULL,
|
||||||
|
`id_lamaran_magang` INTEGER NOT NULL,
|
||||||
|
`full_name` VARCHAR(255) NOT NULL,
|
||||||
|
`email` VARCHAR(255) NOT NULL,
|
||||||
|
`password` TEXT NOT NULL,
|
||||||
|
`role` ENUM('admin', 'intern') NOT NULL DEFAULT 'intern',
|
||||||
|
`professional_bio` TEXT NULL,
|
||||||
|
`is_active` BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||||
|
`updated_at` DATETIME(3) NOT NULL,
|
||||||
|
|
||||||
|
UNIQUE INDEX `user_id_mahasiswa_key`(`id_mahasiswa`),
|
||||||
|
UNIQUE INDEX `user_id_lamaran_magang_key`(`id_lamaran_magang`),
|
||||||
|
UNIQUE INDEX `user_email_key`(`email`),
|
||||||
|
INDEX `user_email_idx`(`email`),
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE `project` (
|
||||||
|
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||||
|
`id_admin` INTEGER NOT NULL,
|
||||||
|
`project_icon` ENUM('code', 'chart', 'cloud', 'mobile', 'gear', 'users', 'clipboard', 'speedometer', 'lightbulb', 'shield') NOT NULL DEFAULT 'code',
|
||||||
|
`project_name` VARCHAR(255) NOT NULL,
|
||||||
|
`description` TEXT NOT NULL,
|
||||||
|
`start_date` DATE NOT NULL,
|
||||||
|
`end_date` DATE NOT NULL,
|
||||||
|
`max_members` INTEGER NOT NULL DEFAULT 8,
|
||||||
|
`status` ENUM('active', 'completed', 'archived') NOT NULL DEFAULT 'active',
|
||||||
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||||
|
`updated_at` DATETIME(3) NOT NULL,
|
||||||
|
|
||||||
|
INDEX `project_id_admin_foreign`(`id_admin`),
|
||||||
|
INDEX `project_status_idx`(`status`),
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE `project_member` (
|
||||||
|
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||||
|
`id_project` INTEGER NOT NULL,
|
||||||
|
`id_user` INTEGER NOT NULL,
|
||||||
|
`status` ENUM('active', 'removed') NOT NULL DEFAULT 'active',
|
||||||
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||||
|
`updated_at` DATETIME(3) NOT NULL,
|
||||||
|
|
||||||
|
INDEX `project_member_id_project_foreign`(`id_project`),
|
||||||
|
INDEX `project_member_id_user_foreign`(`id_user`),
|
||||||
|
INDEX `project_member_status_idx`(`status`),
|
||||||
|
UNIQUE INDEX `project_member_id_project_id_user_key`(`id_project`, `id_user`),
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE `task` (
|
||||||
|
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||||
|
`id_project` INTEGER NOT NULL,
|
||||||
|
`title` VARCHAR(255) NOT NULL,
|
||||||
|
`description` TEXT NOT NULL,
|
||||||
|
`deadline_at` DATETIME(3) NOT NULL,
|
||||||
|
`submission_type` ENUM('file_upload', 'url_link') NOT NULL,
|
||||||
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||||
|
`updated_at` DATETIME(3) NOT NULL,
|
||||||
|
|
||||||
|
INDEX `task_id_project_foreign`(`id_project`),
|
||||||
|
INDEX `task_deadline_at_idx`(`deadline_at`),
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE `task_submission` (
|
||||||
|
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||||
|
`id_task` INTEGER NOT NULL,
|
||||||
|
`id_user` INTEGER NOT NULL,
|
||||||
|
`file_path` TEXT NULL,
|
||||||
|
`url_link` TEXT NULL,
|
||||||
|
`submitted_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||||
|
`updated_at` DATETIME(3) NOT NULL,
|
||||||
|
|
||||||
|
INDEX `task_submission_id_task_foreign`(`id_task`),
|
||||||
|
INDEX `task_submission_id_user_foreign`(`id_user`),
|
||||||
|
UNIQUE INDEX `task_submission_id_task_id_user_key`(`id_task`, `id_user`),
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE `user` ADD CONSTRAINT `user_id_mahasiswa_foreign` FOREIGN KEY (`id_mahasiswa`) REFERENCES `mahasiswa`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE `user` ADD CONSTRAINT `user_id_lamaran_magang_foreign` FOREIGN KEY (`id_lamaran_magang`) REFERENCES `lamaran_magang`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE `project` ADD CONSTRAINT `project_id_admin_foreign` FOREIGN KEY (`id_admin`) REFERENCES `admin`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE `project_member` ADD CONSTRAINT `project_member_id_project_foreign` FOREIGN KEY (`id_project`) REFERENCES `project`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE `project_member` ADD CONSTRAINT `project_member_id_user_foreign` FOREIGN KEY (`id_user`) REFERENCES `user`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE `task` ADD CONSTRAINT `task_id_project_foreign` FOREIGN KEY (`id_project`) REFERENCES `project`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE `task_submission` ADD CONSTRAINT `task_submission_id_task_foreign` FOREIGN KEY (`id_task`) REFERENCES `task`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE `task_submission` ADD CONSTRAINT `task_submission_id_user_foreign` FOREIGN KEY (`id_user`) REFERENCES `user`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
@@ -23,6 +23,11 @@ model Admin {
|
|||||||
password String @db.Text
|
password String @db.Text
|
||||||
signature String? @db.Text // singature untuk identifikasi auth jwt (best practice)
|
signature String? @db.Text // singature untuk identifikasi auth jwt (best practice)
|
||||||
|
|
||||||
|
profile_picture String? @db.Text
|
||||||
|
professional_bio String? @db.Text
|
||||||
|
|
||||||
|
projects Project[]
|
||||||
|
|
||||||
@@map("admin")
|
@@map("admin")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,6 +52,7 @@ model LamaranMagang {
|
|||||||
created_at DateTime @default(now())
|
created_at DateTime @default(now())
|
||||||
update_at DateTime
|
update_at DateTime
|
||||||
|
|
||||||
|
user User?
|
||||||
batch_data Batch? @relation(fields: [batch], references: [id], map: "lamaran_magang_batch_foreign")
|
batch_data Batch? @relation(fields: [batch], references: [id], map: "lamaran_magang_batch_foreign")
|
||||||
mahasiswa Mahasiswa @relation(fields: [id_mahasiswa], references: [id], map: "lamaran_magang_id_mahasiswa_foreign")
|
mahasiswa Mahasiswa @relation(fields: [id_mahasiswa], references: [id], map: "lamaran_magang_id_mahasiswa_foreign")
|
||||||
lowongan_magang LowonganMagang @relation(fields: [id_lowongan_magang], references: [id], map: "lamaran_magang_id_lowongan_magang_foreign")
|
lowongan_magang LowonganMagang @relation(fields: [id_lowongan_magang], references: [id], map: "lamaran_magang_id_lowongan_magang_foreign")
|
||||||
@@ -95,6 +101,7 @@ model Mahasiswa {
|
|||||||
motivasi String @db.Text
|
motivasi String @db.Text
|
||||||
relevant_skills String @db.VarChar(255)
|
relevant_skills String @db.VarChar(255)
|
||||||
|
|
||||||
|
user User?
|
||||||
lamaran_magang LamaranMagang[]
|
lamaran_magang LamaranMagang[]
|
||||||
|
|
||||||
@@map("mahasiswa")
|
@@map("mahasiswa")
|
||||||
@@ -170,8 +177,107 @@ model Batch {
|
|||||||
@@map("batch")
|
@@map("batch")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model User {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
id_mahasiswa Int @unique
|
||||||
|
id_lamaran_magang Int @unique
|
||||||
|
full_name String @db.VarChar(255)
|
||||||
|
email String @unique @db.VarChar(255)
|
||||||
|
password String @db.Text
|
||||||
|
role Role @default(intern)
|
||||||
|
professional_bio String? @db.Text
|
||||||
|
is_active Boolean @default(true)
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt
|
||||||
|
|
||||||
|
mahasiswa Mahasiswa @relation(fields: [id_mahasiswa], references: [id], map: "user_id_mahasiswa_foreign")
|
||||||
|
lamaran_magang LamaranMagang @relation(fields: [id_lamaran_magang], references: [id], map: "user_id_lamaran_magang_foreign")
|
||||||
|
project_members ProjectMember[]
|
||||||
|
task_submissions TaskSubmission[]
|
||||||
|
|
||||||
|
@@index([email])
|
||||||
|
@@map("user")
|
||||||
|
}
|
||||||
|
|
||||||
|
model Project {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
id_admin Int //mentor project
|
||||||
|
project_icon ProjectIcon @default(code)
|
||||||
|
project_name String @db.VarChar(255)
|
||||||
|
description String @db.Text
|
||||||
|
start_date DateTime @db.Date
|
||||||
|
end_date DateTime @db.Date
|
||||||
|
max_members Int @default(8)
|
||||||
|
status ProjectStatus @default(active)
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt
|
||||||
|
|
||||||
|
admin Admin @relation(fields: [id_admin], references: [id], map: "project_id_admin_foreign")
|
||||||
|
members ProjectMember[]
|
||||||
|
tasks Task[]
|
||||||
|
|
||||||
|
@@index([id_admin], map: "project_id_admin_foreign")
|
||||||
|
@@index([status])
|
||||||
|
@@map("project")
|
||||||
|
}
|
||||||
|
|
||||||
|
model ProjectMember {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
id_project Int
|
||||||
|
id_user Int
|
||||||
|
status ProjectMemberStatus @default(active)
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt
|
||||||
|
|
||||||
|
project Project @relation(fields: [id_project], references: [id], map: "project_member_id_project_foreign")
|
||||||
|
user User @relation(fields: [id_user], references: [id], map: "project_member_id_user_foreign")
|
||||||
|
|
||||||
|
@@unique([id_project, id_user])
|
||||||
|
@@index([id_project], map: "project_member_id_project_foreign")
|
||||||
|
@@index([id_user], map: "project_member_id_user_foreign")
|
||||||
|
@@index([status])
|
||||||
|
@@map("project_member")
|
||||||
|
}
|
||||||
|
|
||||||
|
model Task {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
id_project Int
|
||||||
|
title String @db.VarChar(255)
|
||||||
|
description String @db.Text
|
||||||
|
deadline_at DateTime
|
||||||
|
submission_type SubmissionType
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt
|
||||||
|
|
||||||
|
project Project @relation(fields: [id_project], references: [id], map: "task_id_project_foreign")
|
||||||
|
submissions TaskSubmission[]
|
||||||
|
|
||||||
|
@@index([id_project], map: "task_id_project_foreign")
|
||||||
|
@@index([deadline_at])
|
||||||
|
@@map("task")
|
||||||
|
}
|
||||||
|
|
||||||
|
model TaskSubmission {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
id_task Int
|
||||||
|
id_user Int
|
||||||
|
file_path String? @db.Text
|
||||||
|
url_link String? @db.Text
|
||||||
|
submitted_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt
|
||||||
|
|
||||||
|
task Task @relation(fields: [id_task], references: [id], map: "task_submission_id_task_foreign")
|
||||||
|
user User @relation(fields: [id_user], references: [id], map: "task_submission_id_user_foreign")
|
||||||
|
|
||||||
|
@@unique([id_task, id_user])
|
||||||
|
@@index([id_task], map: "task_submission_id_task_foreign")
|
||||||
|
@@index([id_user], map: "task_submission_id_user_foreign")
|
||||||
|
@@map("task_submission")
|
||||||
|
}
|
||||||
|
|
||||||
enum Role {
|
enum Role {
|
||||||
admin
|
admin
|
||||||
|
intern
|
||||||
}
|
}
|
||||||
|
|
||||||
enum StudentRole {
|
enum StudentRole {
|
||||||
@@ -193,3 +299,32 @@ enum PaidStatus {
|
|||||||
paid
|
paid
|
||||||
unpaid
|
unpaid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum ProjectIcon {
|
||||||
|
code
|
||||||
|
chart
|
||||||
|
cloud
|
||||||
|
mobile
|
||||||
|
gear
|
||||||
|
users
|
||||||
|
clipboard
|
||||||
|
speedometer
|
||||||
|
lightbulb
|
||||||
|
shield
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ProjectStatus {
|
||||||
|
active
|
||||||
|
completed
|
||||||
|
archived
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ProjectMemberStatus {
|
||||||
|
active
|
||||||
|
removed
|
||||||
|
}
|
||||||
|
|
||||||
|
enum SubmissionType {
|
||||||
|
file_upload
|
||||||
|
url_link
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user