upd: api diskusi umum #3

Merged
amaliadwiy merged 1 commits from amalia/15-jan-26 into join 2026-01-15 17:37:16 +08:00
4 changed files with 116 additions and 19 deletions

View File

@@ -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
}

View File

@@ -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 });

View File

@@ -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

View File

@@ -12,7 +12,8 @@ export const DIR = {
village: "cm0xhb91o0007acbbkx8rk8hj",
user: "cm0x8dbwn0005bp5tgmfcthzw",
banner: "cm1sxex19004938bjvyaq8vta",
announcement: "cmkdfkze4005hkhjgunsroi4t"
announcement: "cmkdfkze4005hkhjgunsroi4t",
discussion: "cmkf5h7ic006jkhjgyrkog7ut"
}
export const keyWibu = 'padahariminggukuturutayahkekotanaikdelmanistimewakududukdimuka'