diff --git a/src/controllers/OrganizationController.ts b/src/controllers/OrganizationController.ts index a80f626a..e458df70 100644 --- a/src/controllers/OrganizationController.ts +++ b/src/controllers/OrganizationController.ts @@ -109,7 +109,7 @@ export class OrganizationController extends Controller { /** * API สร้างโครงสร้างระดับ4 * - * @summary ORG_022 - สร้างโครงสร้างใหม่ #23 (ยังไม่เสร็จ) + * @summary ORG_022 - สร้างโครงสร้างใหม่ #23 * */ @Post("draft") @@ -288,177 +288,194 @@ export class OrganizationController extends Controller { */ @Get("{id}") async detail(@Path() id: string) { - const orgRootData = await AppDataSource.getRepository(OrgRoot) - .createQueryBuilder("orgRoot") - .where("orgRoot.orgRevisionId = :id", { id }) - .select([ - "orgRoot.id", - "orgRoot.orgRootName", - "orgRoot.orgRootShortName", - "orgRoot.orgRootCode", - "orgRoot.orgRootOrder", - "orgRoot.orgRootPhoneEx", - "orgRoot.orgRootPhoneIn", - "orgRoot.orgRootFax", - "orgRoot.orgRevisionId", - ]) - .getMany(); + try { + const orgRevision = await this.orgRevisionRepository.findOne({ where: { id } }); + if (!orgRevision) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } - const orgRootIds = orgRootData.map((orgRoot) => orgRoot.id); - const orgChild1Data = await AppDataSource.getRepository(OrgChild1) - .createQueryBuilder("orgChild1") - .where("orgChild1.orgRootId IN (:...ids)", { ids: orgRootIds }) - .select([ - "orgChild1.id", - "orgChild1.orgChild1Name", - "orgChild1.orgChild1ShortName", - "orgChild1.orgChild1Code", - "orgChild1.orgChild1Order", - "orgChild1.orgChild1PhoneEx", - "orgChild1.orgChild1PhoneIn", - "orgChild1.orgChild1Fax", - "orgChild1.orgRootId", - ]) - .getMany(); + const orgRootData = await AppDataSource.getRepository(OrgRoot) + .createQueryBuilder("orgRoot") + .where("orgRoot.orgRevisionId = :id", { id }) + .select([ + "orgRoot.id", + "orgRoot.orgRootName", + "orgRoot.orgRootShortName", + "orgRoot.orgRootCode", + "orgRoot.orgRootOrder", + "orgRoot.orgRootPhoneEx", + "orgRoot.orgRootPhoneIn", + "orgRoot.orgRootFax", + "orgRoot.orgRevisionId", + ]) + .getMany(); - const orgChild1Ids = orgChild1Data.map((orgChild1) => orgChild1.id); - const orgChild2Data = await AppDataSource.getRepository(OrgChild2) - .createQueryBuilder("orgChild2") - .where("orgChild2.orgChild1Id IN (:...ids)", { ids: orgChild1Ids }) - .select([ - "orgChild2.id", - "orgChild2.orgChild2Name", - "orgChild2.orgChild2ShortName", - "orgChild2.orgChild2Code", - "orgChild2.orgChild2Order", - "orgChild2.orgChild2PhoneEx", - "orgChild2.orgChild2PhoneIn", - "orgChild2.orgChild2Fax", - "orgChild2.orgRootId", + const orgRootIds = orgRootData.map((orgRoot) => orgRoot.id) || null; + const orgChild1Data = orgRootIds && orgRootIds.length > 0 + ? await AppDataSource.getRepository(OrgChild1) + .createQueryBuilder("orgChild1") + .where("orgChild1.orgRootId IN (:...ids)", { ids: orgRootIds }) + .select([ + "orgChild1.id", + "orgChild1.orgChild1Name", + "orgChild1.orgChild1ShortName", + "orgChild1.orgChild1Code", + "orgChild1.orgChild1Order", + "orgChild1.orgChild1PhoneEx", + "orgChild1.orgChild1PhoneIn", + "orgChild1.orgChild1Fax", + "orgChild1.orgRootId", + ]) + .getMany() + :[]; - "orgChild2.orgChild1Id", - ]) - .getMany(); + const orgChild1Ids = orgChild1Data.map((orgChild1) => orgChild1.id) || null; + const orgChild2Data = orgChild1Ids && orgChild1Ids.length > 0 + ? await AppDataSource.getRepository(OrgChild2) + .createQueryBuilder("orgChild2") + .where("orgChild2.orgChild1Id IN (:...ids)", { ids: orgChild1Ids }) + .select([ + "orgChild2.id", + "orgChild2.orgChild2Name", + "orgChild2.orgChild2ShortName", + "orgChild2.orgChild2Code", + "orgChild2.orgChild2Order", + "orgChild2.orgChild2PhoneEx", + "orgChild2.orgChild2PhoneIn", + "orgChild2.orgChild2Fax", + "orgChild2.orgRootId", - const orgChild2Ids = orgChild2Data.map((orgChild2) => orgChild2.id); - const orgChild3Data = await AppDataSource.getRepository(OrgChild3) - .createQueryBuilder("orgChild3") - .where("orgChild3.orgChild2Id IN (:...ids)", { ids: orgChild2Ids }) - .select([ - "orgChild3.id", - "orgChild3.orgChild3Name", - "orgChild3.orgChild3ShortName", - "orgChild3.orgChild3Code", - "orgChild3.orgChild3Order", - "orgChild3.orgChild3PhoneEx", - "orgChild3.orgChild3PhoneIn", - "orgChild3.orgChild3Fax", - "orgChild3.orgRootId", + "orgChild2.orgChild1Id", + ]) + .getMany() + :[]; - "orgChild3.orgChild2Id", - ]) - .getMany(); + const orgChild2Ids = orgChild2Data.map((orgChild2) => orgChild2.id) || null; + const orgChild3Data = orgChild2Ids && orgChild2Ids.length > 0 + ? await AppDataSource.getRepository(OrgChild3) + .createQueryBuilder("orgChild3") + .where("orgChild3.orgChild2Id IN (:...ids)", { ids: orgChild2Ids }) + .select([ + "orgChild3.id", + "orgChild3.orgChild3Name", + "orgChild3.orgChild3ShortName", + "orgChild3.orgChild3Code", + "orgChild3.orgChild3Order", + "orgChild3.orgChild3PhoneEx", + "orgChild3.orgChild3PhoneIn", + "orgChild3.orgChild3Fax", + "orgChild3.orgRootId", - const orgChild3Ids = orgChild3Data.map((orgChild3) => orgChild3.id); - const orgChild4Data = await AppDataSource.getRepository(OrgChild4) - .createQueryBuilder("orgChild4") - .where("orgChild4.orgChild3Id IN (:...ids)", { ids: orgChild3Ids }) - .select([ - "orgChild4.id", - "orgChild4.orgChild4Name", - "orgChild4.orgChild4ShortName", - "orgChild4.orgChild4Code", - "orgChild4.orgChild4Order", - "orgChild4.orgChild4PhoneEx", - "orgChild4.orgChild4PhoneIn", - "orgChild4.orgChild4Fax", - "orgChild4.orgRootId", + "orgChild3.orgChild2Id", + ]) + .getMany() + :[]; - "orgChild4.orgChild3Id", - ]) - .getMany(); + const orgChild3Ids = orgChild3Data.map((orgChild3) => orgChild3.id) || null; + const orgChild4Data = orgChild3Ids && orgChild3Ids.length > 0 + ? await AppDataSource.getRepository(OrgChild4) + .createQueryBuilder("orgChild4") + .where("orgChild4.orgChild3Id IN (:...ids)", { ids: orgChild3Ids }) + .select([ + "orgChild4.id", + "orgChild4.orgChild4Name", + "orgChild4.orgChild4ShortName", + "orgChild4.orgChild4Code", + "orgChild4.orgChild4Order", + "orgChild4.orgChild4PhoneEx", + "orgChild4.orgChild4PhoneIn", + "orgChild4.orgChild4Fax", + "orgChild4.orgRootId", - const formattedData = orgRootData.map((orgRoot) => { - return { - orgRootId: orgRoot.id, - orgLevel: 0, - orgRootName: orgRoot.orgRootName, - orgRootShortName: orgRoot.orgRootShortName, - orgRootCode: orgRoot.orgRootCode, - orgCode: orgRoot.orgRootCode + "00", - orgRootOrder: orgRoot.orgRootOrder, - orgRootPhoneEx: orgRoot.orgRootPhoneEx, - orgRootPhoneIn: orgRoot.orgRootPhoneIn, - orgRootFax: orgRoot.orgRootFax, - orgRevisionId: orgRoot.orgRevisionId, - orgChild1: orgChild1Data - .filter((orgChild1) => orgChild1.orgRootId === orgRoot.id) - .map((orgChild1) => ({ - orgChild1Id: orgChild1.id, - orgLevel: 1, - orgChild1Name: orgChild1.orgChild1Name, - orgChild1ShortName: orgChild1.orgChild1ShortName, - orgChild1Code: orgChild1.orgChild1Code, - orgCode: orgRoot.orgRootCode + orgChild1.orgChild1Code, - orgChild1Order: orgChild1.orgChild1Order, - orgRootCode: orgRoot.orgRootCode, - orgChild1PhoneEx: orgChild1.orgChild1PhoneEx, - orgChild1PhoneIn: orgChild1.orgChild1PhoneIn, - orgChild1Fax: orgChild1.orgChild1Fax, - orgRevisionId: orgRoot.orgRevisionId, - orgChild2: orgChild2Data - .filter((orgChild2) => orgChild2.orgChild1Id === orgChild1.id) - .map((orgChild2) => ({ - orgChild2Id: orgChild2.id, - orgLevel: 2, - orgChild2Name: orgChild2.orgChild2Name, - orgChild2ShortName: orgChild2.orgChild2ShortName, - orgChild2Code: orgChild2.orgChild2Code, - orgCode: orgRoot.orgRootCode + orgChild2.orgChild2Code, - orgChild2Order: orgChild2.orgChild2Order, - orgRootCode: orgRoot.orgRootCode, - orgChild2PhoneEx: orgChild2.orgChild2PhoneEx, - orgChild2PhoneIn: orgChild2.orgChild2PhoneIn, - orgChild2Fax: orgChild2.orgChild2Fax, - orgRevisionId: orgRoot.orgRevisionId, - orgChild3: orgChild3Data - .filter((orgChild3) => orgChild3.orgChild2Id === orgChild2.id) - .map((orgChild3) => ({ - orgChild3Id: orgChild3.id, - orgLevel: 3, - orgChild3Name: orgChild3.orgChild3Name, - orgChild3ShortName: orgChild3.orgChild3ShortName, - orgChild3Code: orgChild3.orgChild3Code, - orgCode: orgRoot.orgRootCode + orgChild3.orgChild3Code, - orgChild3Order: orgChild3.orgChild3Order, - orgRootCode: orgRoot.orgRootCode, - orgChild3PhoneEx: orgChild3.orgChild3PhoneEx, - orgChild3PhoneIn: orgChild3.orgChild3PhoneIn, - orgChild3Fax: orgChild3.orgChild3Fax, - orgRevisionId: orgRoot.orgRevisionId, - orgChild4: orgChild4Data - .filter((orgChild4) => orgChild4.orgChild3Id === orgChild3.id) - .map((orgChild4) => ({ - orgChild4Id: orgChild4.id, - orgLevel: 4, - orgChild4Name: orgChild4.orgChild4Name, - orgChild4ShortName: orgChild4.orgChild4ShortName, - orgChild4Code: orgChild4.orgChild4Code, - orgCode: orgRoot.orgRootCode + orgChild4.orgChild4Code, - orgChild4Order: orgChild4.orgChild4Order, - orgRootCode: orgRoot.orgRootCode, - orgChild4PhoneEx: orgChild4.orgChild4PhoneEx, - orgChild4PhoneIn: orgChild4.orgChild4PhoneIn, - orgChild4Fax: orgChild4.orgChild4Fax, - orgRevisionId: orgRoot.orgRevisionId, - })), - })), - })), - })), - }; - }); + "orgChild4.orgChild3Id", + ]) + .getMany() + :[]; - return new HttpSuccess(formattedData); + const formattedData = orgRootData.map((orgRoot) => { + return { + orgRootId: orgRoot.id, + orgLevel: 0, + orgRootName: orgRoot.orgRootName, + orgRootShortName: orgRoot.orgRootShortName, + orgRootCode: orgRoot.orgRootCode, + orgCode: orgRoot.orgRootCode + "00", + orgRootOrder: orgRoot.orgRootOrder, + orgRootPhoneEx: orgRoot.orgRootPhoneEx, + orgRootPhoneIn: orgRoot.orgRootPhoneIn, + orgRootFax: orgRoot.orgRootFax, + orgRevisionId: orgRoot.orgRevisionId, + orgChild1: orgChild1Data + .filter((orgChild1) => orgChild1.orgRootId === orgRoot.id) + .map((orgChild1) => ({ + orgChild1Id: orgChild1.id, + orgLevel: 1, + orgChild1Name: orgChild1.orgChild1Name, + orgChild1ShortName: orgChild1.orgChild1ShortName, + orgChild1Code: orgChild1.orgChild1Code, + orgCode: orgRoot.orgRootCode + orgChild1.orgChild1Code, + orgChild1Order: orgChild1.orgChild1Order, + orgRootCode: orgRoot.orgRootCode, + orgChild1PhoneEx: orgChild1.orgChild1PhoneEx, + orgChild1PhoneIn: orgChild1.orgChild1PhoneIn, + orgChild1Fax: orgChild1.orgChild1Fax, + orgRevisionId: orgRoot.orgRevisionId, + orgChild2: orgChild2Data + .filter((orgChild2) => orgChild2.orgChild1Id === orgChild1.id) + .map((orgChild2) => ({ + orgChild2Id: orgChild2.id, + orgLevel: 2, + orgChild2Name: orgChild2.orgChild2Name, + orgChild2ShortName: orgChild2.orgChild2ShortName, + orgChild2Code: orgChild2.orgChild2Code, + orgCode: orgRoot.orgRootCode + orgChild2.orgChild2Code, + orgChild2Order: orgChild2.orgChild2Order, + orgRootCode: orgRoot.orgRootCode, + orgChild2PhoneEx: orgChild2.orgChild2PhoneEx, + orgChild2PhoneIn: orgChild2.orgChild2PhoneIn, + orgChild2Fax: orgChild2.orgChild2Fax, + orgRevisionId: orgRoot.orgRevisionId, + orgChild3: orgChild3Data + .filter((orgChild3) => orgChild3.orgChild2Id === orgChild2.id) + .map((orgChild3) => ({ + orgChild3Id: orgChild3.id, + orgLevel: 3, + orgChild3Name: orgChild3.orgChild3Name, + orgChild3ShortName: orgChild3.orgChild3ShortName, + orgChild3Code: orgChild3.orgChild3Code, + orgCode: orgRoot.orgRootCode + orgChild3.orgChild3Code, + orgChild3Order: orgChild3.orgChild3Order, + orgRootCode: orgRoot.orgRootCode, + orgChild3PhoneEx: orgChild3.orgChild3PhoneEx, + orgChild3PhoneIn: orgChild3.orgChild3PhoneIn, + orgChild3Fax: orgChild3.orgChild3Fax, + orgRevisionId: orgRoot.orgRevisionId, + orgChild4: orgChild4Data + .filter((orgChild4) => orgChild4.orgChild3Id === orgChild3.id) + .map((orgChild4) => ({ + orgChild4Id: orgChild4.id, + orgLevel: 4, + orgChild4Name: orgChild4.orgChild4Name, + orgChild4ShortName: orgChild4.orgChild4ShortName, + orgChild4Code: orgChild4.orgChild4Code, + orgCode: orgRoot.orgRootCode + orgChild4.orgChild4Code, + orgChild4Order: orgChild4.orgChild4Order, + orgRootCode: orgRoot.orgRootCode, + orgChild4PhoneEx: orgChild4.orgChild4PhoneEx, + orgChild4PhoneIn: orgChild4.orgChild4PhoneIn, + orgChild4Fax: orgChild4.orgChild4Fax, + orgRevisionId: orgRoot.orgRevisionId, + })), + })), + })), + })), + }; + }); + + return new HttpSuccess(formattedData); + } catch (error) { + return error; + } } /**