refactor: customer create and update process
This commit is contained in:
parent
b167a612b4
commit
5bb8da818c
6 changed files with 261 additions and 462 deletions
|
|
@ -137,27 +137,30 @@ export class CustomerBranchController extends Controller {
|
|||
|
||||
const where = {
|
||||
OR: [
|
||||
{ nameEN: { contains: query }, zipCode, ...filterStatus(status) },
|
||||
{ name: { contains: query }, zipCode, ...filterStatus(status) },
|
||||
{ email: { contains: query }, zipCode, ...filterStatus(status) },
|
||||
{ code: { contains: query }, zipCode, ...filterStatus(status) },
|
||||
{ address: { contains: query }, zipCode, ...filterStatus(status) },
|
||||
{ addressEN: { contains: query }, zipCode, ...filterStatus(status) },
|
||||
{ province: { name: { contains: query } }, zipCode, ...filterStatus(status) },
|
||||
{ province: { nameEN: { contains: query } }, zipCode, ...filterStatus(status) },
|
||||
{ district: { name: { contains: query } }, zipCode, ...filterStatus(status) },
|
||||
{ district: { nameEN: { contains: query } }, zipCode, ...filterStatus(status) },
|
||||
{ subDistrict: { name: { contains: query } }, zipCode, ...filterStatus(status) },
|
||||
{ subDistrict: { nameEN: { contains: query } }, zipCode, ...filterStatus(status) },
|
||||
{ registerName: { contains: query } },
|
||||
{ registerNameEN: { contains: query } },
|
||||
{ email: { contains: query } },
|
||||
{ code: { contains: query } },
|
||||
{ address: { contains: query } },
|
||||
{ addressEN: { contains: query } },
|
||||
{ province: { name: { contains: query } } },
|
||||
{ province: { nameEN: { contains: query } } },
|
||||
{ district: { name: { contains: query } } },
|
||||
{ district: { nameEN: { contains: query } } },
|
||||
{ subDistrict: { name: { contains: query } } },
|
||||
{ subDistrict: { nameEN: { contains: query } } },
|
||||
{
|
||||
customer: {
|
||||
OR: [{ customerName: { contains: query } }, { customerNameEN: { contains: query } }],
|
||||
OR: [
|
||||
{ firstName: { contains: query } },
|
||||
{ firstNameEN: { contains: query } },
|
||||
{ lastName: { contains: query } },
|
||||
{ lastNameEN: { contains: query } },
|
||||
],
|
||||
},
|
||||
zipCode,
|
||||
status,
|
||||
},
|
||||
],
|
||||
AND: { customerId },
|
||||
AND: { customerId, subDistrict: zipCode ? { zipCode } : undefined, ...filterStatus(status) },
|
||||
} satisfies Prisma.CustomerBranchWhereInput;
|
||||
|
||||
const [result, total] = await prisma.$transaction([
|
||||
|
|
@ -263,7 +266,15 @@ export class CustomerBranchController extends Controller {
|
|||
prisma.province.findFirst({ where: { id: body.provinceId || undefined } }),
|
||||
prisma.district.findFirst({ where: { id: body.districtId || undefined } }),
|
||||
prisma.subDistrict.findFirst({ where: { id: body.subDistrictId || undefined } }),
|
||||
prisma.customer.findFirst({ where: { id: body.customerId || undefined } }),
|
||||
prisma.customer.findFirst({
|
||||
where: { id: body.customerId || undefined },
|
||||
include: {
|
||||
branch: {
|
||||
take: 1,
|
||||
orderBy: { createdAt: "asc" },
|
||||
},
|
||||
},
|
||||
}),
|
||||
]);
|
||||
if (body.provinceId && !province)
|
||||
throw new HttpError(
|
||||
|
|
@ -294,48 +305,37 @@ export class CustomerBranchController extends Controller {
|
|||
|
||||
const record = await prisma.$transaction(
|
||||
async (tx) => {
|
||||
const conflict = await tx.customerBranch.findFirst({
|
||||
where: { customerId, branchNo: rest.branchNo },
|
||||
});
|
||||
if (conflict) {
|
||||
throw new HttpError(
|
||||
HttpStatus.BAD_REQUEST,
|
||||
"Branch with current no already exists.",
|
||||
"branchSameNoExist",
|
||||
);
|
||||
}
|
||||
|
||||
const last = await tx.runningNo.upsert({
|
||||
where: {
|
||||
key: `CUSTOMER_${customer.code.slice(0, -6)}`,
|
||||
},
|
||||
create: {
|
||||
key: `CUSTOMER_${customer.code.slice(0, -6)}`,
|
||||
value: 1,
|
||||
},
|
||||
update: { value: { increment: 1 } },
|
||||
});
|
||||
|
||||
return await tx.customerBranch.create({
|
||||
include: {
|
||||
province: true,
|
||||
district: true,
|
||||
subDistrict: true,
|
||||
createdBy: true,
|
||||
updatedBy: true,
|
||||
},
|
||||
data: {
|
||||
...rest,
|
||||
statusOrder: +(rest.status === "INACTIVE"),
|
||||
code: `${customer.code.slice(0, -6)}${`${last.value - 1}`.padStart(6, "0")}`,
|
||||
customer: { connect: { id: customerId } },
|
||||
province: { connect: provinceId ? { id: provinceId } : undefined },
|
||||
district: { connect: districtId ? { id: districtId } : undefined },
|
||||
subDistrict: { connect: subDistrictId ? { id: subDistrictId } : undefined },
|
||||
createdBy: { connect: { id: req.user.sub } },
|
||||
updatedBy: { connect: { id: req.user.sub } },
|
||||
},
|
||||
});
|
||||
// const last = await tx.runningNo.upsert({
|
||||
// where: {
|
||||
// key: `CUSTOMER_${customer.code.slice(0, -6)}`,
|
||||
// },
|
||||
// create: {
|
||||
// key: `CUSTOMER_${customer.code.slice(0, -6)}`,
|
||||
// value: 1,
|
||||
// },
|
||||
// update: { value: { increment: 1 } },
|
||||
// });
|
||||
//
|
||||
// return await tx.customerBranch.create({
|
||||
// include: {
|
||||
// province: true,
|
||||
// district: true,
|
||||
// subDistrict: true,
|
||||
// createdBy: true,
|
||||
// updatedBy: true,
|
||||
// },
|
||||
// data: {
|
||||
// ...rest,
|
||||
// statusOrder: +(rest.status === "INACTIVE"),
|
||||
// code: `${customer.code.slice(0, -6)}${`${last.value - 1}`.padStart(6, "0")}`,
|
||||
// customer: { connect: { id: customerId } },
|
||||
// province: { connect: provinceId ? { id: provinceId } : undefined },
|
||||
// district: { connect: districtId ? { id: districtId } : undefined },
|
||||
// subDistrict: { connect: subDistrictId ? { id: subDistrictId } : undefined },
|
||||
// createdBy: { connect: { id: req.user.sub } },
|
||||
// updatedBy: { connect: { id: req.user.sub } },
|
||||
// },
|
||||
// });
|
||||
},
|
||||
{ isolationLevel: Prisma.TransactionIsolationLevel.Serializable },
|
||||
);
|
||||
|
|
@ -352,6 +352,12 @@ export class CustomerBranchController extends Controller {
|
|||
@Body() body: CustomerBranchUpdate,
|
||||
@Path() branchId: string,
|
||||
) {
|
||||
const branch = await prisma.customerBranch.findUnique({ where: { id: branchId } });
|
||||
|
||||
if (!branch) {
|
||||
throw new HttpError(HttpStatus.NOT_FOUND, "Branch cannot be found.", "branchNotFound");
|
||||
}
|
||||
|
||||
if (body.provinceId || body.districtId || body.subDistrictId || body.customerId) {
|
||||
const [province, district, subDistrict, customer] = await prisma.$transaction([
|
||||
prisma.province.findFirst({ where: { id: body.provinceId || undefined } }),
|
||||
|
|
@ -385,44 +391,41 @@ export class CustomerBranchController extends Controller {
|
|||
);
|
||||
}
|
||||
|
||||
const { provinceId, districtId, subDistrictId, customerId, ...rest } = body;
|
||||
|
||||
if (!(await prisma.customerBranch.findUnique({ where: { id: branchId } }))) {
|
||||
throw new HttpError(HttpStatus.NOT_FOUND, "Branch cannot be found.", "branchNotFound");
|
||||
}
|
||||
|
||||
const record = await prisma.customerBranch.update({
|
||||
where: { id: branchId },
|
||||
include: {
|
||||
province: true,
|
||||
district: true,
|
||||
subDistrict: true,
|
||||
createdBy: true,
|
||||
updatedBy: true,
|
||||
},
|
||||
data: {
|
||||
...rest,
|
||||
statusOrder: +(rest.status === "INACTIVE"),
|
||||
customer: { connect: customerId ? { id: customerId } : 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,
|
||||
},
|
||||
updatedBy: { connect: { id: req.user.sub } },
|
||||
},
|
||||
});
|
||||
|
||||
this.setStatus(HttpStatus.CREATED);
|
||||
|
||||
return record;
|
||||
// const { provinceId, districtId, subDistrictId, customerId, ...rest } = body;
|
||||
//
|
||||
//
|
||||
// const record = await prisma.customerBranch.update({
|
||||
// where: { id: branchId },
|
||||
// include: {
|
||||
// province: true,
|
||||
// district: true,
|
||||
// subDistrict: true,
|
||||
// createdBy: true,
|
||||
// updatedBy: true,
|
||||
// },
|
||||
// data: {
|
||||
// ...rest,
|
||||
// statusOrder: +(rest.status === "INACTIVE"),
|
||||
// customer: { connect: customerId ? { id: customerId } : 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,
|
||||
// },
|
||||
// updatedBy: { connect: { id: req.user.sub } },
|
||||
// },
|
||||
// });
|
||||
//
|
||||
// this.setStatus(HttpStatus.CREATED);
|
||||
//
|
||||
// return record;
|
||||
}
|
||||
|
||||
@Delete("{branchId}")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue