From 3c3ee8727796a89aae075e30608c401f10311ea7 Mon Sep 17 00:00:00 2001 From: Methapon Metanipat Date: Thu, 5 Sep 2024 11:07:10 +0700 Subject: [PATCH] refactor: branch bank delete handle --- src/controllers/01-branch-controller.ts | 103 +++++++++++++++--------- 1 file changed, 67 insertions(+), 36 deletions(-) diff --git a/src/controllers/01-branch-controller.ts b/src/controllers/01-branch-controller.ts index d610899..c917749 100644 --- a/src/controllers/01-branch-controller.ts +++ b/src/controllers/01-branch-controller.ts @@ -91,6 +91,7 @@ type BranchUpdate = { headOfficeId?: string | null; bank?: { + id?: string; bankName: string; bankBranch: string; accountName: string; @@ -491,43 +492,73 @@ export class BranchController extends Controller { ); } - const record = await prisma.branch.update({ - include: { province: true, district: true, subDistrict: true }, - data: { - ...rest, - statusOrder: +(rest.status === "INACTIVE"), - isHeadOffice: headOfficeId !== undefined ? headOfficeId === null : undefined, - bank: bank ? { deleteMany: {}, createMany: { data: bank } } : undefined, - province: { - connect: provinceId ? { id: provinceId } : undefined, - disconnect: provinceId === null || undefined, - }, - district: { - connect: districtId ? { id: districtId } : undefined, - disconnect: districtId === null || undefined, - }, - subDistrict: { - connect: subDistrictId ? { id: subDistrictId } : undefined, - disconnect: subDistrictId === null || undefined, - }, - headOffice: { - connect: headOfficeId ? { id: headOfficeId } : undefined, - disconnect: headOfficeId === null || undefined, - }, - contact: contact - ? { - deleteMany: {}, - create: (typeof contact === "string" ? [contact] : contact)?.map((v) => ({ - telephoneNo: v, - })), - } - : undefined, - updatedBy: { connect: { id: req.user.sub } }, - }, - where: { id: branchId }, - }); + return await prisma.$transaction(async (tx) => { + const listDeleted = bank + ? await tx.branchBank.findMany({ + where: { id: { not: { in: bank.flatMap((v) => (!!v.id ? v.id : [])) } }, branchId }, + }) + : []; - return record; + await minio.removeObjects( + MINIO_BUCKET, + listDeleted.map((v) => fileLocation.branch.bank(v.branchId, v.id)), + ); + + return await prisma.branch.update({ + include: { province: true, district: true, subDistrict: true }, + data: { + ...rest, + statusOrder: +(rest.status === "INACTIVE"), + isHeadOffice: headOfficeId !== undefined ? headOfficeId === null : undefined, + bank: bank + ? { + deleteMany: { id: { in: listDeleted.map((v) => v.id) } }, + upsert: bank.map((v) => ({ + where: { + id: v.id || "", + }, + create: { + ...v, + createdByUserId: req.user.sub, + updatedByUserId: req.user.sub, + id: undefined, + }, + update: { + ...v, + updatedByUserId: req.user.sub, + }, + })), + } + : undefined, + province: { + connect: provinceId ? { id: provinceId } : undefined, + disconnect: provinceId === null || undefined, + }, + district: { + connect: districtId ? { id: districtId } : undefined, + disconnect: districtId === null || undefined, + }, + subDistrict: { + connect: subDistrictId ? { id: subDistrictId } : undefined, + disconnect: subDistrictId === null || undefined, + }, + headOffice: { + connect: headOfficeId ? { id: headOfficeId } : undefined, + disconnect: headOfficeId === null || undefined, + }, + contact: contact + ? { + deleteMany: {}, + create: (typeof contact === "string" ? [contact] : contact)?.map((v) => ({ + telephoneNo: v, + })), + } + : undefined, + updatedBy: { connect: { id: req.user.sub } }, + }, + where: { id: branchId }, + }); + }); } @Delete("{branchId}")