From 0d78ce4db3d7341f9828c125a8d6576ee8c7a6d8 Mon Sep 17 00:00:00 2001 From: HAM Date: Wed, 17 Sep 2025 12:37:41 +0700 Subject: [PATCH 1/3] feat: filter businessType, province, district, subDistrict for customer and customer-export endpoint --- src/controllers/03-customer-controller.ts | 45 +++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/controllers/03-customer-controller.ts b/src/controllers/03-customer-controller.ts index 1854842..5a6ef36 100644 --- a/src/controllers/03-customer-controller.ts +++ b/src/controllers/03-customer-controller.ts @@ -170,6 +170,10 @@ export class CustomerController extends Controller { @Query() activeBranchOnly?: boolean, @Query() startDate?: Date, @Query() endDate?: Date, + @Query() businessType?: string, + @Query() province?: string, + @Query() district?: string, + @Query() subDistrict?: string, ) { const where = { OR: queryOrNot(query, [ @@ -192,6 +196,47 @@ export class CustomerController extends Controller { : permissionCond(req.user, { activeOnly: activeBranchOnly }), }, }, + branch: { + some: { + AND: [ + businessType + ? { + OR: [ + { businessType: { name: { contains: businessType, mode: "insensitive" } } }, + { businessType: { nameEN: { contains: businessType, mode: "insensitive" } } }, + ], + } + : {}, + + province + ? { + OR: [ + { province: { name: { contains: province, mode: "insensitive" } } }, + { province: { nameEN: { contains: province, mode: "insensitive" } } }, + ], + } + : {}, + + district + ? { + OR: [ + { district: { name: { contains: district, mode: "insensitive" } } }, + { district: { nameEN: { contains: district, mode: "insensitive" } } }, + ], + } + : {}, + + subDistrict + ? { + OR: [ + { subDistrict: { name: { contains: subDistrict, mode: "insensitive" } } }, + { subDistrict: { nameEN: { contains: subDistrict, mode: "insensitive" } } }, + ], + } + : {}, + ], + }, + }, ...whereDateQuery(startDate, endDate), } satisfies Prisma.CustomerWhereInput; From e5a3d948a5f3acf7037727505eb6b3a5b3aad181 Mon Sep 17 00:00:00 2001 From: HAM Date: Wed, 17 Sep 2025 12:39:10 +0700 Subject: [PATCH 2/3] fix: missing query --- src/controllers/03-customer-controller.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/controllers/03-customer-controller.ts b/src/controllers/03-customer-controller.ts index 5a6ef36..43dd376 100644 --- a/src/controllers/03-customer-controller.ts +++ b/src/controllers/03-customer-controller.ts @@ -642,6 +642,10 @@ export class CustomerExportController extends CustomerController { @Query() activeBranchOnly?: boolean, @Query() startDate?: Date, @Query() endDate?: Date, + @Query() businessType?: string, + @Query() province?: string, + @Query() district?: string, + @Query() subDistrict?: string, ) { const ret = await this.list( req, @@ -655,6 +659,10 @@ export class CustomerExportController extends CustomerController { activeBranchOnly, startDate, endDate, + businessType, + province, + district, + subDistrict, ); this.setHeader("Content-Type", "text/csv"); From 7e7b8025c9884090e75e3fecd0109fdac7be1751 Mon Sep 17 00:00:00 2001 From: HAM Date: Wed, 17 Sep 2025 12:58:14 +0700 Subject: [PATCH 3/3] refactor: change to id --- src/controllers/03-customer-controller.ts | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/src/controllers/03-customer-controller.ts b/src/controllers/03-customer-controller.ts index 43dd376..95e2df6 100644 --- a/src/controllers/03-customer-controller.ts +++ b/src/controllers/03-customer-controller.ts @@ -201,37 +201,25 @@ export class CustomerController extends Controller { AND: [ businessType ? { - OR: [ - { businessType: { name: { contains: businessType, mode: "insensitive" } } }, - { businessType: { nameEN: { contains: businessType, mode: "insensitive" } } }, - ], + OR: [{ businessType: { id: businessType } }], } : {}, province ? { - OR: [ - { province: { name: { contains: province, mode: "insensitive" } } }, - { province: { nameEN: { contains: province, mode: "insensitive" } } }, - ], + OR: [{ province: { id: province } }], } : {}, district ? { - OR: [ - { district: { name: { contains: district, mode: "insensitive" } } }, - { district: { nameEN: { contains: district, mode: "insensitive" } } }, - ], + OR: [{ district: { id: district } }], } : {}, subDistrict ? { - OR: [ - { subDistrict: { name: { contains: subDistrict, mode: "insensitive" } } }, - { subDistrict: { nameEN: { contains: subDistrict, mode: "insensitive" } } }, - ], + OR: [{ subDistrict: { id: subDistrict } }], } : {}, ],