diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 7324a97..f46fcb0 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -172,16 +172,16 @@ model Announcement { } model AnnouncementMember { -id String @id @default(cuid()) -Announcement Announcement @relation(fields: [idAnnouncement], references: [id]) -idAnnouncement String -Group Group @relation(fields: [idGroup], references: [id]) -idGroup String -Division Division @relation(fields: [idDivision], references: [id]) -idDivision String -isActive Boolean @default(true) -createdAt DateTime @default(now()) -updatedAt DateTime @updatedAt + id String @id @default(cuid()) + Announcement Announcement @relation(fields: [idAnnouncement], references: [id]) + idAnnouncement String + Group Group @relation(fields: [idGroup], references: [id]) + idGroup String + Division Division @relation(fields: [idDivision], references: [id]) + idDivision String + isActive Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt } model AnnouncementFile { @@ -608,6 +608,7 @@ model Discussion { updatedAt DateTime @updatedAt DiscussionMember DiscussionMember[] DiscussionComment DiscussionComment[] + DiscussionFile DiscussionFile[] } model DiscussionMember { @@ -633,3 +634,15 @@ model DiscussionComment { createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } + +model DiscussionFile { + id String @id @default(cuid()) + Discussion Discussion @relation(fields: [idDiscussion], references: [id]) + idDiscussion String + name String + extension String + idStorage String? + isActive Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} diff --git a/src/app/api/mobile/discussion-general/[id]/route.ts b/src/app/api/mobile/discussion-general/[id]/route.ts index a1b536f..8df834b 100644 --- a/src/app/api/mobile/discussion-general/[id]/route.ts +++ b/src/app/api/mobile/discussion-general/[id]/route.ts @@ -1,4 +1,4 @@ -import { countTime, prisma } from "@/module/_global"; +import { countTime, DIR, funUploadFile, prisma } from "@/module/_global"; import { funGetUserById } from "@/module/auth"; import { createLogUserMobile } from "@/module/user"; import _ from "lodash"; @@ -8,7 +8,7 @@ import { NextResponse } from "next/server"; // GET ONE DETAIL DISKUSI UMUM -export async function GET(request : Request, context: { params: { id: string } }) { +export async function GET(request: Request, context: { params: { id: string } }) { try { let dataFix const { id } = context.params @@ -127,8 +127,21 @@ export async function GET(request : Request, context: { params: { id: string } } } else { dataFix = false } - } + } else if (kategori == "file") { + const data = await prisma.discussionFile.findMany({ + where: { + idDiscussion: id + }, + select: { + id: true, + idStorage: true, + name: true, + extension: true + } + }) + dataFix = data + } return NextResponse.json({ success: true, message: "Berhasil mendapatkan diskusi", data: dataFix }, { status: 200 }); @@ -247,7 +260,12 @@ export async function DELETE(request: Request, context: { params: { id: string } export async function PUT(request: Request, context: { params: { id: string } }) { try { const { id } = context.params - const { title, desc, user } = (await request.json()); + const body = await request.formData() + const dataBody = body.get("data") + const cekFile = body.has("file0") + + // const { title, desc, user } = (await request.json()); + const { title, desc, user, oldFile } = JSON.parse(dataBody as string) const userMobile = await funGetUserById({ id: String(user) }) @@ -275,6 +293,41 @@ export async function PUT(request: Request, context: { params: { id: string } }) } }); + if (oldFile.length > 0) { + for (let index = 0; index < oldFile.length; index++) { + const element = oldFile[index]; + if (element.delete) { + await prisma.discussionFile.delete({ + where: { + id: element.id + } + }) + } + } + } + + if (cekFile) { + body.delete("data") + for (var pair of body.entries()) { + if (String(pair[0]).substring(0, 4) == "file") { + const file = body.get(pair[0]) as File + const fExt = file.name.split(".").pop() + const fName = decodeURIComponent(file.name.replace("." + fExt, "")) + const upload = await funUploadFile({ file: file, dirId: DIR.discussion }) + if (upload.success) { + await prisma.discussionFile.create({ + data: { + idStorage: upload.data.id, + idDiscussion: id, + name: fName, + extension: String(fExt) + } + }) + } + } + } + } + // create log user const log = await createLogUserMobile({ act: 'UPDATE', desc: 'User mengupdate data diskusi umum', table: 'discussion', data: id, user: userMobile.id }) return NextResponse.json({ success: true, message: "Berhasil mengedit diskusi umum" }, { status: 200 }); diff --git a/src/app/api/mobile/discussion-general/route.ts b/src/app/api/mobile/discussion-general/route.ts index 875d76d..ac5c351 100644 --- a/src/app/api/mobile/discussion-general/route.ts +++ b/src/app/api/mobile/discussion-general/route.ts @@ -1,4 +1,4 @@ -import { prisma } from "@/module/_global"; +import { DIR, funUploadFile, prisma } from "@/module/_global"; import { funGetUserById } from "@/module/auth"; import { createLogUserMobile } from "@/module/user"; import _ from "lodash"; @@ -112,13 +112,20 @@ export async function GET(request: Request) { // CREATE DISCUSSION GENERALE export async function POST(request: Request) { try { - const { idGroup, user, title, desc, member } = await request.json(); - if (user == "null" || user == undefined || user == "") { + const body = await request.formData() + const dataBody = body.get("data") + const cekFile = body.has("file0") + + // const { idGroup, user, title, desc, member } = await request.json(); + const { idGroup, user, title, desc, member } = JSON.parse(dataBody as string) + + const userMobile = await funGetUserById({ id: user }) + + if (userMobile.id == "null" || userMobile.id == undefined || userMobile.id == "") { return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } - const userMobile = await funGetUserById({ id: user }) const userId = user const userRoleLogin = userMobile.idUserRole @@ -145,6 +152,29 @@ export async function POST(request: Request) { data: dataMember }) + + if (cekFile) { + body.delete("data") + for (var pair of body.entries()) { + if (String(pair[0]).substring(0, 4) == "file") { + const file = body.get(pair[0]) as File + const fExt = file.name.split(".").pop() + const fName = decodeURIComponent(file.name.replace("." + fExt, "")) + const upload = await funUploadFile({ file: file, dirId: DIR.discussion }) + if (upload.success) { + await prisma.discussionFile.create({ + data: { + idStorage: upload.data.id, + idDiscussion: data.id, + name: fName, + extension: String(fExt) + } + }) + } + } + } + } + const memberNotifMobile = await prisma.discussionMember.findMany({ where: { idDiscussion: data.id diff --git a/src/module/_global/bin/val_global.ts b/src/module/_global/bin/val_global.ts index 74844c1..40fae51 100644 --- a/src/module/_global/bin/val_global.ts +++ b/src/module/_global/bin/val_global.ts @@ -12,7 +12,8 @@ export const DIR = { village: "cm0xhb91o0007acbbkx8rk8hj", user: "cm0x8dbwn0005bp5tgmfcthzw", banner: "cm1sxex19004938bjvyaq8vta", - announcement: "cmkdfkze4005hkhjgunsroi4t" + announcement: "cmkdfkze4005hkhjgunsroi4t", + discussion: "cmkf5h7ic006jkhjgyrkog7ut" } export const keyWibu = 'padahariminggukuturutayahkekotanaikdelmanistimewakududukdimuka'