diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6a6e82f4..e1d8234b 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -129,11 +129,13 @@ model Portofolio { updatedAt DateTime @default(now()) @updatedAt Profile Profile? @relation(fields: [profileId], references: [id]) profileId String? - MasterBidangBisnis MasterBidangBisnis @relation(fields: [masterBidangBisnisId], references: [id]) - masterBidangBisnisId String Portofolio_MediaSosial Portofolio_MediaSosial? BusinessMaps BusinessMaps? logoId String? + + MasterBidangBisnis MasterBidangBisnis @relation(fields: [masterBidangBisnisId], references: [id]) + masterBidangBisnisId String + Portofolio_BidangDanSubBidangBisnis Portofolio_BidangDanSubBidangBisnis[] } model Portofolio_MediaSosial { @@ -152,26 +154,42 @@ model Portofolio_MediaSosial { // ------------------- MASTER -------------------------- // +model Portofolio_BidangDanSubBidangBisnis { + id String @id @default(cuid()) + isActive Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + Portofolio Portofolio? @relation(fields: [portofolioId], references: [id]) + portofolioId String? + MasterBidangBisnis MasterBidangBisnis? @relation(fields: [masterBidangBisnisId], references: [id]) + masterBidangBisnisId String? + MasterSubBidangBisnis MasterSubBidangBisnis? @relation(fields: [masterSubBidangBisnisId], references: [id]) + masterSubBidangBisnisId String? +} + model MasterBidangBisnis { - id String @id @default(uuid()) - name String - slug String @unique @default("NULL") - active Boolean @default(true) - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - Portofolio Portofolio[] - MasterSubBidangBisnis MasterSubBidangBisnis[] + id String @id @default(uuid()) + name String + slug String @unique @default("NULL") + active Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + Portofolio Portofolio[] + MasterSubBidangBisnis MasterSubBidangBisnis[] + Portofolio_BidangDanSubBidangBisnis Portofolio_BidangDanSubBidangBisnis[] } model MasterSubBidangBisnis { - id String @id @default(cuid()) - name String - slug String @unique @default("NULL") - isActive Boolean @default(true) - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - MasterBidangBisnis MasterBidangBisnis? @relation(fields: [masterBidangBisnisId], references: [id]) - masterBidangBisnisId String? + id String @id @default(cuid()) + name String + slug String @unique @default("NULL") + isActive Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + MasterBidangBisnis MasterBidangBisnis? @relation(fields: [masterBidangBisnisId], references: [id]) + masterBidangBisnisId String? + Portofolio_BidangDanSubBidangBisnis Portofolio_BidangDanSubBidangBisnis[] } model MasterBank { diff --git a/src/app/api/master/sub-bidang-bisnis/[id]/route.ts b/src/app/api/master/sub-bidang-bisnis/[id]/route.ts new file mode 100644 index 00000000..eb6b92e4 --- /dev/null +++ b/src/app/api/master/sub-bidang-bisnis/[id]/route.ts @@ -0,0 +1,40 @@ +import { prisma } from "@/lib"; +import backendLogger from "@/util/backendLogger"; +import { NextResponse } from "next/server"; + +export async function GET( + request: Request, + { params }: { params: { id: string } } +) { + try { + let fixData; + const { id } = params; + + fixData = await prisma.masterSubBidangBisnis.findMany({ + where: { + masterBidangBisnisId: id.toString(), + isActive: true, + }, + }); + + + return NextResponse.json( + { + success: true, + message: "Berhasil mendapatkan data", + data: fixData, + }, + { status: 200 } + ); + } catch (error) { + backendLogger.error("Error Get Master Sub Bidang Bisnis >>", error); + return NextResponse.json( + { + success: false, + message: "API Error Get Data", + reason: (error as Error).message, + }, + { status: 500 } + ); + } +} diff --git a/src/app/api/master/sub-bidang-bisnis/route.ts b/src/app/api/master/sub-bidang-bisnis/route.ts new file mode 100644 index 00000000..c9cb7aac --- /dev/null +++ b/src/app/api/master/sub-bidang-bisnis/route.ts @@ -0,0 +1,33 @@ +import { prisma } from "@/lib"; +import backendLogger from "@/util/backendLogger"; +import { NextResponse } from "next/server"; + +export async function GET(request: Request) { + try { + let fixData; + fixData = await prisma.masterSubBidangBisnis.findMany({ + where: { + isActive: true, + }, + }); + + return NextResponse.json( + { + success: true, + message: "Berhasil mendapatkan data", + data: fixData, + }, + { status: 200 } + ); + } catch (error) { + backendLogger.error("Error Get Master Sub Bidang Bisnis >>", error); + return NextResponse.json( + { + success: false, + message: "API Error Get Data", + reason: (error as Error).message, + }, + { status: 500 } + ); + } +} diff --git a/src/app/api/new/portofolio/[id]/route.ts b/src/app/api/new/portofolio/[id]/route.ts index c5e19c2e..4e6900ca 100644 --- a/src/app/api/new/portofolio/[id]/route.ts +++ b/src/app/api/new/portofolio/[id]/route.ts @@ -36,6 +36,15 @@ export async function GET( userId: true, }, }, + Portofolio_BidangDanSubBidangBisnis: { + select: { + MasterSubBidangBisnis: { + select: { + name: true, + }, + }, + }, + }, }, }); @@ -47,6 +56,7 @@ export async function GET( deskripsi: data?.deskripsi, logoId: data?.logoId, bidangBisnis: data?.MasterBidangBisnis?.name, + subBidangBisnis: data?.Portofolio_BidangDanSubBidangBisnis?.map((item) => item.MasterSubBidangBisnis?.name), authorId: data?.Profile?.userId, }; } else if (kategori == "lokasi") { diff --git a/src/app/api/portofolio/[id]/route.ts b/src/app/api/portofolio/[id]/route.ts index 9222acb9..d6d46d28 100644 --- a/src/app/api/portofolio/[id]/route.ts +++ b/src/app/api/portofolio/[id]/route.ts @@ -155,6 +155,28 @@ async function POST(request: Request, { params }: { params: { id: string } }) { }, }); + for (let i of data.subBidang) { + // console.log("sub bidang", i.id) + const createSubBidang = + await prisma.portofolio_BidangDanSubBidangBisnis.create({ + data: { + portofolioId: createPortofolio.id, + masterBidangBisnisId: data.masterBidangBisnisId, + masterSubBidangBisnisId: i.id, + }, + }); + + + if (!createSubBidang) + return NextResponse.json( + { + success: false, + message: "Gagal membuat sub bidang bisnis", + }, + { status: 400 } + ); + } + if (!createPortofolio) return NextResponse.json( { diff --git a/src/app/dev/(user)/portofolio/create/[id]/page.tsx b/src/app/dev/(user)/portofolio/create/[id]/page.tsx index 3cd64728..ef1d4f9c 100644 --- a/src/app/dev/(user)/portofolio/create/[id]/page.tsx +++ b/src/app/dev/(user)/portofolio/create/[id]/page.tsx @@ -1,9 +1,11 @@ import { CreatePortofolio } from "@/app_modules/katalog/portofolio"; +import Portofolio_V3_Create from "@/app_modules/katalog/portofolio/create/new_create"; export default async function Page() { return ( <> - + {/* */} + ); } diff --git a/src/app_modules/_global/component/comp_load_image.tsx b/src/app_modules/_global/component/comp_load_image.tsx index a01499b1..97f8084c 100644 --- a/src/app_modules/_global/component/comp_load_image.tsx +++ b/src/app_modules/_global/component/comp_load_image.tsx @@ -3,22 +3,24 @@ import { APIs } from "@/lib"; import { pathAssetImage } from "@/lib/path_asset_image"; import { RouterImagePreview } from "@/lib/router_hipmi/router_image_preview"; -import { Center, Image, Skeleton } from "@mantine/core"; +import { Center, Image, MantineNumberSize, Skeleton } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; import { useRouter } from "next/navigation"; import { useState } from "react"; -type IRadius = "xs" | "sm" | "md" | "lg" | "xl"; +type IRadius = MantineNumberSize | undefined export function ComponentGlobal_LoadImage({ fileId, maw, h, radius, + style, }: { fileId: string; maw?: number | string; h?: number; radius?: IRadius; + style?: React.CSSProperties; }) { const router = useRouter(); const [isImage, setIsImage] = useState(null); @@ -44,7 +46,7 @@ export function ComponentGlobal_LoadImage({ if (isImage === null) return ( - +
@@ -63,6 +65,9 @@ export function ComponentGlobal_LoadImage({ <>
{ setIsLoading(true); router.push(RouterImagePreview.main({ id: fileId }), { diff --git a/src/app_modules/katalog/portofolio/component/button/comp_button_selanjutnya.tsx b/src/app_modules/katalog/portofolio/component/button/comp_button_selanjutnya.tsx index ba5cb7cd..27800760 100644 --- a/src/app_modules/katalog/portofolio/component/button/comp_button_selanjutnya.tsx +++ b/src/app_modules/katalog/portofolio/component/button/comp_button_selanjutnya.tsx @@ -16,6 +16,10 @@ import { useRouter } from "next/navigation"; import { useState } from "react"; import { apiCreatePortofolio } from "../api_fetch_portofolio"; + +type SubBidang = { + id: string; +}; interface ICreatePortofolio { namaBisnis: string; masterBidangBisnisId: string; @@ -28,18 +32,23 @@ interface ICreatePortofolio { instagram: string; tiktok: string; youtube: string; + subBidang: SubBidang[]; } + + export function Portofolio_ComponentButtonSelanjutnya({ profileId, dataPortofolio, dataMedsos, file, + listSubBidangSelected, }: { profileId: string; dataPortofolio: MODEL_PORTOFOLIO_OLD; dataMedsos: any; file: File; + listSubBidangSelected?: SubBidang[]; }) { const router = useRouter(); const [loading, setLoading] = useState(false); @@ -62,6 +71,7 @@ export function Portofolio_ComponentButtonSelanjutnya({ const newData: ICreatePortofolio = { namaBisnis: dataPortofolio.namaBisnis, masterBidangBisnisId: dataPortofolio.masterBidangBisnisId, + // masterSubBidangBisnisId: dataPortofolio.masterSubBidangBisnisId as string, alamatKantor: dataPortofolio.alamatKantor, tlpn: dataPortofolio.tlpn, deskripsi: dataPortofolio.deskripsi, @@ -71,6 +81,7 @@ export function Portofolio_ComponentButtonSelanjutnya({ tiktok: dataMedsos.tiktok, youtube: dataMedsos.youtube, fileId: fileId, + subBidang: listSubBidangSelected || [] }; const response = await apiCreatePortofolio({ @@ -91,8 +102,10 @@ export function Portofolio_ComponentButtonSelanjutnya({ if (!validateData()) return; try { + console.log("listSubBidangSelected>>", listSubBidangSelected); setLoading(true); + const uploadFile = await funGlobal_UploadToStorage({ file: file, dirId: DIRECTORY_ID.portofolio_logo, @@ -107,14 +120,25 @@ export function Portofolio_ComponentButtonSelanjutnya({ } catch (error) { setLoading(false); ComponentGlobal_NotifikasiGagal("Gagal disimpan"); - clientLogger.error("Error create portofolio", error); + console.error("Error create portofolio", error); } }; return ( <> + {/*
+        {JSON.stringify(dataPortofolio, null, 2)}
+      
+
+        {JSON.stringify(listSubBidangSelected, null, 2)}
+      
*/} + + + + + + {/*
+            {JSON.stringify(dataPortofolio, null, 2)}
+          
+
+            {JSON.stringify(listSubBidangSelected, null, 2)}
+          
*/} + + {/*