From e20eb9e93657c01229e293793749a5521f6d1b79 Mon Sep 17 00:00:00 2001 From: Adisak Date: Mon, 15 Dec 2025 14:06:07 +0700 Subject: [PATCH] fix search --- src/controllers/PositionController.ts | 238 ++++++++++++++++++-------- 1 file changed, 167 insertions(+), 71 deletions(-) diff --git a/src/controllers/PositionController.ts b/src/controllers/PositionController.ts index a7f2db82..4bfbb642 100644 --- a/src/controllers/PositionController.ts +++ b/src/controllers/PositionController.ts @@ -2240,7 +2240,129 @@ export class PositionController extends Controller { }, ]; - let [posMaster, total] = await AppDataSource.getRepository(PosMaster) + //Old + // let [posMaster, total] = await AppDataSource.getRepository(PosMaster) + // .createQueryBuilder("posMaster") + // .leftJoinAndSelect("posMaster.orgRoot", "orgRoot") + // .leftJoinAndSelect("posMaster.orgChild1", "orgChild1") + // .leftJoinAndSelect("posMaster.orgChild2", "orgChild2") + // .leftJoinAndSelect("posMaster.orgChild3", "orgChild3") + // .leftJoinAndSelect("posMaster.orgChild4", "orgChild4") + // .leftJoinAndSelect("posMaster.current_holder", "current_holder") + // .leftJoinAndSelect("posMaster.next_holder", "next_holder") + // .leftJoinAndSelect("posMaster.orgRevision", "orgRevision") + // .where(conditions) + // .andWhere( + // _data.root != undefined && _data.root != null + // ? _data.root[0] != null + // ? `posMaster.orgRootId IN (:...root)` + // : `posMaster.orgRootId is null` + // : "1=1", + // { + // root: _data.root, + // }, + // ) + // .andWhere( + // _data.child1 != undefined && _data.child1 != null + // ? _data.child1[0] != null + // ? `posMaster.orgChild1Id IN (:...child1)` + // : `posMaster.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}` + // : "1=1", + // { + // child1: _data.child1, + // }, + // ) + // .andWhere( + // _data.child2 != undefined && _data.child2 != null + // ? _data.child2[0] != null + // ? `posMaster.orgChild2Id IN (:...child2)` + // : `posMaster.orgChild2Id is null` + // : "1=1", + // { + // child2: _data.child2, + // }, + // ) + // .andWhere( + // _data.child3 != undefined && _data.child3 != null + // ? _data.child3[0] != null + // ? `posMaster.orgChild3Id IN (:...child3)` + // : `posMaster.orgChild3Id is null` + // : "1=1", + // { + // child3: _data.child3, + // }, + // ) + // .andWhere( + // _data.child4 != undefined && _data.child4 != null + // ? _data.child4[0] != null + // ? `posMaster.orgChild4Id IN (:...child4)` + // : `posMaster.orgChild4Id is null` + // : "1=1", + // { + // child4: _data.child4, + // }, + // ) + // .andWhere( + // new Brackets((qb) => { + // qb.orWhere( + // new Brackets((qb) => { + // qb.andWhere( + // body.keyword != null && body.keyword != "" + // ? body.isAll == false + // ? searchShortName + // : `CASE WHEN posMaster.orgChild1 is null THEN ${searchShortName0} WHEN posMaster.orgChild2 is null THEN ${searchShortName1} WHEN posMaster.orgChild3 is null THEN ${searchShortName2} WHEN posMaster.orgChild4 is null THEN ${searchShortName3} ELSE ${searchShortName4} END LIKE '%${body.keyword}%'` + // : "1=1", + // ) + // .andWhere(checkChildConditions) + // .andWhere(typeCondition) + // .andWhere(revisionCondition); + // }), + // ) + // .orWhere( + // new Brackets((qb) => { + // qb.andWhere( + // body.keyword != null && body.keyword != "" + // ? `CONCAT(current_holder.prefix, current_holder.firstName," ",current_holder.lastName) like '%${body.keyword}%'` + // : "1=1", + // { + // keyword: `%${body.keyword}%`, + // }, + // ) + // .andWhere(checkChildConditions) + // .andWhere(typeCondition) + // .andWhere(revisionCondition); + // }), + // ) + // .orWhere( + // new Brackets((qb) => { + // qb.andWhere( + // body.keyword != null && body.keyword != "" + // ? `CASE WHEN orgRevision.orgRevisionIsDraft = true THEN CONCAT(next_holder.prefix, next_holder.firstName,' ', next_holder.lastName) ELSE CONCAT(current_holder.prefix, current_holder.firstName,' ' , current_holder.lastName) END LIKE '%${body.keyword}%'` + // : "1=1", + // { + // keyword: `%${body.keyword}%`, + // }, + // ) + // .andWhere(checkChildConditions) + // .andWhere(typeCondition) + // .andWhere(revisionCondition); + // }), + // ); + // }), + // ) + // .orderBy("orgRoot.orgRootOrder", "ASC") + // .addOrderBy("orgChild1.orgChild1Order", "ASC") + // .addOrderBy("orgChild2.orgChild2Order", "ASC") + // .addOrderBy("orgChild3.orgChild3Order", "ASC") + // .addOrderBy("orgChild4.orgChild4Order", "ASC") + // .addOrderBy("posMaster.posMasterOrder", "ASC") + // .addOrderBy("posMaster.posMasterCreatedAt", "ASC") + // .skip((body.page - 1) * body.pageSize) + // .take(body.pageSize) + // .getManyAndCount(); + + //New + let query = AppDataSource.getRepository(PosMaster) .createQueryBuilder("posMaster") .leftJoinAndSelect("posMaster.orgRoot", "orgRoot") .leftJoinAndSelect("posMaster.orgChild1", "orgChild1") @@ -2254,54 +2376,25 @@ export class PositionController extends Controller { .andWhere( _data.root != undefined && _data.root != null ? _data.root[0] != null - ? `posMaster.orgRootId IN (:...root)` - : `posMaster.orgRootId is null` + ? "posMaster.orgRootId IN (:...root)" + : "posMaster.orgRootId is null" : "1=1", - { - root: _data.root, - }, + { root: _data.root } ) .andWhere( _data.child1 != undefined && _data.child1 != null ? _data.child1[0] != null - ? `posMaster.orgChild1Id IN (:...child1)` + ? "posMaster.orgChild1Id IN (:...child1)" : `posMaster.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}` : "1=1", - { - child1: _data.child1, - }, + { child1: _data.child1 } ) - .andWhere( - _data.child2 != undefined && _data.child2 != null - ? _data.child2[0] != null - ? `posMaster.orgChild2Id IN (:...child2)` - : `posMaster.orgChild2Id is null` - : "1=1", - { - child2: _data.child2, - }, - ) - .andWhere( - _data.child3 != undefined && _data.child3 != null - ? _data.child3[0] != null - ? `posMaster.orgChild3Id IN (:...child3)` - : `posMaster.orgChild3Id is null` - : "1=1", - { - child3: _data.child3, - }, - ) - .andWhere( - _data.child4 != undefined && _data.child4 != null - ? _data.child4[0] != null - ? `posMaster.orgChild4Id IN (:...child4)` - : `posMaster.orgChild4Id is null` - : "1=1", - { - child4: _data.child4, - }, - ) - .orWhere( + // .andWhere(checkChildConditions) + // .andWhere(typeCondition) + // .andWhere(revisionCondition); + + if (body.keyword != null && body.keyword != "") { + query.orWhere( new Brackets((qb) => { qb.andWhere( body.keyword != null && body.keyword != "" @@ -2315,36 +2408,39 @@ export class PositionController extends Controller { .andWhere(revisionCondition); }), ) - .orWhere( - new Brackets((qb) => { - qb.andWhere( - body.keyword != null && body.keyword != "" - ? `CONCAT(current_holder.prefix, current_holder.firstName," ",current_holder.lastName) like '%${body.keyword}%'` - : "1=1", - { - keyword: `%${body.keyword}%`, - }, - ) - .andWhere(checkChildConditions) - .andWhere(typeCondition) - .andWhere(revisionCondition); - }), - ) - .orWhere( - new Brackets((qb) => { - qb.andWhere( - body.keyword != null && body.keyword != "" - ? `CASE WHEN orgRevision.orgRevisionIsDraft = true THEN CONCAT(next_holder.prefix, next_holder.firstName,' ', next_holder.lastName) ELSE CONCAT(current_holder.prefix, current_holder.firstName,' ' , current_holder.lastName) END LIKE '%${body.keyword}%'` - : "1=1", - { - keyword: `%${body.keyword}%`, - }, - ) - .andWhere(checkChildConditions) - .andWhere(typeCondition) - .andWhere(revisionCondition); - }), - ) + .orWhere( + new Brackets((qb) => { + qb.andWhere( + body.keyword != null && body.keyword != "" + ? `CONCAT(current_holder.prefix, current_holder.firstName," ",current_holder.lastName) like '%${body.keyword}%'` + : "1=1", + { + keyword: `%${body.keyword}%`, + }, + ) + .andWhere(checkChildConditions) + .andWhere(typeCondition) + .andWhere(revisionCondition); + }), + ) + .orWhere( + new Brackets((qb) => { + qb.andWhere( + body.keyword != null && body.keyword != "" + ? `CASE WHEN orgRevision.orgRevisionIsDraft = true THEN CONCAT(next_holder.prefix, next_holder.firstName,' ', next_holder.lastName) ELSE CONCAT(current_holder.prefix, current_holder.firstName,' ' , current_holder.lastName) END LIKE '%${body.keyword}%'` + : "1=1", + { + keyword: `%${body.keyword}%`, + }, + ) + .andWhere(checkChildConditions) + .andWhere(typeCondition) + .andWhere(revisionCondition); + }), + ); + } + + let [posMaster, total] = await query .orderBy("orgRoot.orgRootOrder", "ASC") .addOrderBy("orgChild1.orgChild1Order", "ASC") .addOrderBy("orgChild2.orgChild2Order", "ASC")