feat(task): submission dengan multiple files sebanyak 20 files
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE `task_submission_file` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`id_submission` INTEGER NOT NULL,
|
||||
`file_path` TEXT NOT NULL,
|
||||
`original_name` VARCHAR(255) NULL,
|
||||
`mime_type` VARCHAR(255) NULL,
|
||||
`size_bytes` INTEGER NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
INDEX `task_submission_file_id_submission_foreign`(`id_submission`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `task_submission_file` ADD CONSTRAINT `task_submission_file_id_submission_foreign` FOREIGN KEY (`id_submission`) REFERENCES `task_submission`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
+18
-2
@@ -277,8 +277,9 @@ model TaskSubmission {
|
||||
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")
|
||||
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")
|
||||
files TaskSubmissionFile[]
|
||||
|
||||
@@unique([id_task, id_user])
|
||||
@@index([id_task], map: "task_submission_id_task_foreign")
|
||||
@@ -286,6 +287,21 @@ model TaskSubmission {
|
||||
@@map("task_submission")
|
||||
}
|
||||
|
||||
model TaskSubmissionFile {
|
||||
id Int @id @default(autoincrement())
|
||||
id_submission Int
|
||||
file_path String @db.Text
|
||||
original_name String? @db.VarChar(255)
|
||||
mime_type String? @db.VarChar(255)
|
||||
size_bytes Int?
|
||||
created_at DateTime @default(now())
|
||||
|
||||
submission TaskSubmission @relation(fields: [id_submission], references: [id], onDelete: Cascade, map: "task_submission_file_id_submission_foreign")
|
||||
|
||||
@@index([id_submission], map: "task_submission_file_id_submission_foreign")
|
||||
@@map("task_submission_file")
|
||||
}
|
||||
|
||||
enum Role {
|
||||
admin
|
||||
mentor
|
||||
|
||||
+49
-6
@@ -5,6 +5,7 @@ const { getProjectBackgroundColor } = require('../src/helpers/utils/projectTheme
|
||||
|
||||
// Diperlukan ketika isi databasenya masih kosong dan ingin menambahkan dummy data sebagai testing development [Rafi 08/06/2026 16:34]
|
||||
async function main() {
|
||||
await prisma.taskSubmissionFile.deleteMany({});
|
||||
await prisma.taskSubmission.deleteMany({});
|
||||
await prisma.projectMember.deleteMany({});
|
||||
await prisma.user.deleteMany({});
|
||||
@@ -288,12 +289,54 @@ async function main() {
|
||||
});
|
||||
|
||||
// 15. TaskSubmission
|
||||
await prisma.taskSubmission.createMany({
|
||||
data: [
|
||||
{ id_task: task1.id, id_user: user1.id, url_link: 'https://github.com/rafiathallah3' },
|
||||
{ id_task: task2.id, id_user: user2.id, file_path: 'https://example.com/submission-alice.zip' },
|
||||
{ id_task: task3.id, id_user: user3.id, url_link: 'https://github.com/bob/auth-gateway' }
|
||||
]
|
||||
await prisma.taskSubmission.create({
|
||||
data: {
|
||||
id_task: task1.id,
|
||||
id_user: user1.id,
|
||||
url_link: 'https://github.com/rafiathallah3',
|
||||
},
|
||||
});
|
||||
|
||||
await prisma.taskSubmission.create({
|
||||
data: {
|
||||
id_task: task2.id,
|
||||
id_user: user2.id,
|
||||
|
||||
// Backward compatibility untuk frontend lama
|
||||
file_path: '/uploads/task-submissions/alice-api-specification-part-1.pdf',
|
||||
|
||||
// Multi-file submission data
|
||||
files: {
|
||||
create: [
|
||||
{
|
||||
file_path: '/uploads/task-submissions/alice-api-specification-part-1.pdf',
|
||||
original_name: 'alice-api-specification-part-1.pdf',
|
||||
mime_type: 'application/pdf',
|
||||
size_bytes: 204800,
|
||||
},
|
||||
{
|
||||
file_path: '/uploads/task-submissions/alice-api-specification-part-2.pdf',
|
||||
original_name: 'alice-api-specification-part-2.pdf',
|
||||
mime_type: 'application/pdf',
|
||||
size_bytes: 256000,
|
||||
},
|
||||
{
|
||||
file_path: '/uploads/task-submissions/alice-api-specification-appendix.pdf',
|
||||
original_name: 'alice-api-specification-appendix.pdf',
|
||||
mime_type: 'application/pdf',
|
||||
size_bytes: 128000,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await prisma.taskSubmission.create({
|
||||
data: {
|
||||
id_task: task3.id,
|
||||
id_user: user3.id,
|
||||
url_link: 'https://github.com/bob/auth-gateway',
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user