feat(task): submission dengan multiple files sebanyak 20 files

This commit is contained in:
Muhammad Zhafran Ilham
2026-07-04 17:03:15 +07:00
parent 177051ea89
commit ba352f4950
11 changed files with 419 additions and 46 deletions
@@ -44,6 +44,12 @@ class TaskRepository {
url_link: true,
submitted_at: true,
updated_at: true,
files: {
select: this.submissionFileSelect(),
orderBy: {
id: 'asc'
}
}
},
},
},
@@ -91,6 +97,12 @@ class TaskRepository {
professional_bio: true,
},
},
files: {
select: this.submissionFileSelect(),
orderBy: {
id: 'asc'
}
}
},
},
},
@@ -140,6 +152,14 @@ class TaskRepository {
id_user: parseInt(idUser),
},
},
include: {
files: {
select: this.submissionFileSelect(),
orderBy: {
id: 'asc',
}
}
}
});
}
@@ -172,22 +192,85 @@ class TaskRepository {
email: true,
},
},
files: {
select: this.submissionFileSelect(),
orderBy: {
id: 'asc',
}
}
},
});
}
async createSubmission(submissionData) {
async createSubmission(submissionData, filesData = []) {
return prisma.taskSubmission.create({
data: submissionData,
data: {
...submissionData,
files: filesData.length > 0
? {
create: filesData,
}
: undefined,
},
include: {
files: {
select: this.submissionFileSelect(),
orderBy: {
id: 'asc',
},
},
},
});
}
async updateSubmission(idSubmission, submissionData) {
return prisma.taskSubmission.update({
where: {
id: parseInt(idSubmission),
},
data: submissionData,
async updateSubmission(idSubmission, submissionData, filesData = null) {
return prisma.$transaction(async (tx) => {
const submissionId = parseInt(idSubmission);
await tx.taskSubmission.update({
where: {
id: submissionId,
},
data: submissionData,
});
if (filesData !== null) {
await tx.taskSubmissionFile.deleteMany({
where: {
id_submission: submissionId,
},
});
if (filesData.length > 0) {
await tx.taskSubmissionFile.createMany({
data: filesData.map((file) => ({
...file,
id_submission: submissionId,
})),
});
}
}
return tx.taskSubmission.findUnique({
where: {
id: submissionId,
},
include: {
files: {
select: {
id: true,
file_path: true,
original_name: true,
mime_type: true,
size_bytes: true,
created_at: true,
},
orderBy: {
id: 'asc',
},
},
},
});
});
}
@@ -266,6 +349,12 @@ class TaskRepository {
professional_bio: true,
},
},
files: {
select: this.submissionFileSelect(),
orderBy: {
id: 'asc'
}
}
},
},
},
@@ -293,6 +382,17 @@ class TaskRepository {
return Boolean(task);
}
submissionFileSelect() {
return {
id: true,
file_path: true,
original_name: true,
mime_type: true,
size_bytes: true,
created_at: true,
};
}
}
module.exports = new TaskRepository();