From 00dff0814f39f98420b74177f412dc1262ef23e2 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 22 Apr 2024 17:05:08 +0700 Subject: [PATCH] refactor: branch code gen transaction --- src/controllers/branch-controller.ts | 59 +++++++++++++++++----------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/src/controllers/branch-controller.ts b/src/controllers/branch-controller.ts index 5a51f7a..d4791a5 100644 --- a/src/controllers/branch-controller.ts +++ b/src/controllers/branch-controller.ts @@ -241,33 +241,46 @@ export class BranchController extends Controller { const year = new Date().getFullYear(); - const last = await prisma.branch.findFirst({ - orderBy: { createdAt: "desc" }, - where: { headOfficeId: headOfficeId ?? null }, - }); + const record = await prisma.$transaction( + async (tx) => { + const last = await tx.runningNo.upsert({ + where: { + key: !headOfficeId ? `HQ${year.toString().slice(2)}` : `BR${head?.code.slice(2, 5)}`, + }, + create: { + key: !headOfficeId ? `HQ${year.toString().slice(2)}` : `BR${head?.code.slice(2, 5)}`, + value: 1, + }, + update: { value: { increment: 1 } }, + }); - const code = !headOfficeId - ? `HQ${year.toString().slice(2)}${+(last?.code.slice(-1) || 0) + 1}` - : `BR${head?.code.slice(2, 5)}${(+(last?.code.slice(-2) || 0) + 1).toString().padStart(2, "0")}`; + const code = !headOfficeId + ? `HQ${year.toString().slice(2)}${last.value}` + : `BR${head?.code.slice(2, 5)}${last.value.toString().padStart(2, "0")}`; - const record = await prisma.branch.create({ - include: { - province: true, - district: true, - subDistrict: true, + return await tx.branch.create({ + include: { + province: true, + district: true, + subDistrict: true, + }, + data: { + ...rest, + code, + isHeadOffice: !headOfficeId, + province: { connect: provinceId ? { id: provinceId } : undefined }, + district: { connect: districtId ? { id: districtId } : undefined }, + subDistrict: { connect: subDistrictId ? { id: subDistrictId } : undefined }, + headOffice: { connect: headOfficeId ? { id: headOfficeId } : undefined }, + createdBy: req.user.name, + updateBy: req.user.name, + }, + }); }, - data: { - ...rest, - code, - isHeadOffice: !headOfficeId, - province: { connect: provinceId ? { id: provinceId } : undefined }, - district: { connect: districtId ? { id: districtId } : undefined }, - subDistrict: { connect: subDistrictId ? { id: subDistrictId } : undefined }, - headOffice: { connect: headOfficeId ? { id: headOfficeId } : undefined }, - createdBy: req.user.name, - updateBy: req.user.name, + { + isolationLevel: Prisma.TransactionIsolationLevel.Serializable, }, - }); + ); if (headOfficeId) { await prisma.branch.updateMany({