import { Body, Controller, Delete, Example, Get, Patch, Path, Post, Request, Route, Security, Tags, } from "tsoa"; import { AppDataSource } from "../database/data-source"; import { CreateStrategyChild1, StrategyChild1, UpdateStrategyChild1, } from "../entities/StrategyChild1"; import { CreateStrategyChild2, StrategyChild2, UpdateStrategyChild2, } from "../entities/StrategyChild2"; import { CreateStrategyChild3, StrategyChild3, UpdateStrategyChild3, } from "../entities/StrategyChild3"; import { CreateStrategyChild4, StrategyChild4, UpdateStrategyChild4, } from "../entities/StrategyChild4"; import { CreateStrategyChild5, StrategyChild5, UpdateStrategyChild5, } from "../entities/StrategyChild5"; import HttpError from "../interfaces/http-error"; import HttpStatus from "../interfaces/http-status"; import HttpSuccess from "../interfaces/http-success"; import { Check } from "typeorm"; @Route("api/v1/development/strategy") @Tags("Strategy") @Security("bearerAuth") export class StrategyController extends Controller { private strategy1Repo = AppDataSource.getRepository(StrategyChild1); private strategy2Repo = AppDataSource.getRepository(StrategyChild2); private strategy3Repo = AppDataSource.getRepository(StrategyChild3); private strategy4Repo = AppDataSource.getRepository(StrategyChild4); private strategy5Repo = AppDataSource.getRepository(StrategyChild5); @Get() public async listStrategyChild1() { const listStrategyChild1 = await this.strategy1Repo.find({ relations: ["strategyChild2s", "strategyChild3s", "strategyChild4s", "strategyChild5s"], }); if (!listStrategyChild1) { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } return new HttpSuccess(listStrategyChild1); } @Post() public async newStrategyChild( @Request() request: { user: Record }, @Body() body: { name: string; levelnode: number; idnode?: string | null; }, ) { let strategyRepo: any; let strategyChild: any; let repoSave: any; switch (body.levelnode) { case 0: strategyRepo = this.strategy1Repo; repoSave = this.strategy1Repo; strategyChild = new StrategyChild1(); strategyChild.strategyChild1Name = body.name; break; case 1: strategyRepo = this.strategy1Repo; repoSave = this.strategy2Repo; strategyChild = new StrategyChild2(); strategyChild.strategyChild2Name = body.name; if(body.idnode){ const chk1 = await this.strategy1Repo.findOne({ where: { id: body.idnode }, }) if(chk1){ strategyChild.strategyChild1Id = chk1.id }else{ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } } break; case 2: strategyRepo = this.strategy2Repo; repoSave = this.strategy3Repo; strategyChild = new StrategyChild3(); strategyChild.strategyChild3Name = body.name; if(body.idnode){ const chk2 = await this.strategy2Repo.findOne({ where: { id: body.idnode }, }) if(chk2){ strategyChild.strategyChild1Id = chk2.strategyChild1Id strategyChild.strategyChild2Id = chk2.id }else{ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } } break; case 3: strategyRepo = this.strategy3Repo; repoSave = this.strategy4Repo; strategyChild = new StrategyChild4(); strategyChild.strategyChild4Name = body.name; if(body.idnode){ const chk3 = await this.strategy3Repo.findOne({ where: { id: body.idnode }, }) if(chk3){ strategyChild.strategyChild1Id = chk3.strategyChild1Id strategyChild.strategyChild2Id = chk3.strategyChild2Id strategyChild.strategyChild3Id = chk3.id }else{ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } } break; case 4: strategyRepo = this.strategy4Repo; repoSave = this.strategy5Repo; strategyChild = new StrategyChild5(); strategyChild.strategyChild5Name = body.name; if(body.idnode){ const chk4 = await this.strategy4Repo.findOne({ where: { id: body.idnode }, }) if(chk4){ strategyChild.strategyChild1Id = chk4.strategyChild1Id strategyChild.strategyChild2Id = chk4.strategyChild2Id strategyChild.strategyChild3Id = chk4.strategyChild3Id strategyChild.strategyChild4Id = chk4.id }else{ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } } break; default: throw new HttpError(HttpStatus.BAD_REQUEST, "levelnode ไม่ถูกต้อง"); } strategyChild.createdUserId = request.user.sub; strategyChild.createdFullName = request.user.name; strategyChild.lastUpdateUserId = request.user.sub; strategyChild.lastUpdateFullName = request.user.name; await repoSave.save(strategyChild); return new HttpSuccess(strategyChild.id); } @Patch("{levelnode}/{idnode}") public async editStrategyChild1( @Request() request: { user: Record }, @Body() body: { name: string; levelnode: number; idnode: string; }, ) { let strategyRepo: any; let strategyChild: any; let repoSave: any; switch (body.levelnode) { case 1: strategyRepo = this.strategy1Repo; strategyChild = await strategyRepo.findOne({ where: { id: body.idnode }, }) if(!strategyChild){ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } strategyChild.strategyChild1Name = body.name; break; case 2: strategyRepo = this.strategy2Repo; strategyChild = await strategyRepo.findOne({ where: { id: body.idnode }, }) if(!strategyChild){ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } repoSave = this.strategy2Repo; break; case 3: strategyRepo = this.strategy3Repo; strategyChild = await strategyRepo.findOne({ where: { id: body.idnode }, }) if(!strategyChild){ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } strategyChild.strategyChild3Name = body.name; break; case 4: strategyRepo = this.strategy4Repo; strategyChild = await strategyRepo.findOne({ where: { id: body.idnode }, }) if(!strategyChild){ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } strategyChild.strategyChild4Name = body.name; break; case 5: strategyRepo = this.strategy5Repo; strategyChild = await this.strategy5Repo.findOne({ where: { id: body.idnode }, }) if(!strategyChild){ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } strategyChild.strategyChild5Name = body.name; break; default: throw new HttpError(HttpStatus.BAD_REQUEST, "levelnode ไม่ถูกต้อง"); } strategyChild.lastUpdateUserId = request.user.sub; strategyChild.lastUpdateFullName = request.user.name; await strategyRepo.save(strategyChild); return new HttpSuccess(); } @Delete("{levelnode}/{idnode}") public async deleteStrategyChild( @Request() request: { user: Record }, @Body() body: { levelnode: number; idnode: string; },) { let strategyRepo: any; let data: any; switch (body.levelnode) { case 1: strategyRepo = this.strategy1Repo; data = await strategyRepo.find({ where: { id: body.idnode }, }); if(!data){ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } await this.strategy5Repo.delete({ strategyChild1Id: body.idnode }); await this.strategy4Repo.delete({ strategyChild1Id: body.idnode }); await this.strategy3Repo.delete({ strategyChild1Id: body.idnode }); await this.strategy2Repo.delete({ strategyChild1Id: body.idnode }); await this.strategy1Repo.delete({ id : body.idnode }); break; case 2: strategyRepo = this.strategy2Repo; data = await strategyRepo.find({ where: { id: body.idnode }, }); if(!data){ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } await this.strategy5Repo.delete({ strategyChild2Id: body.idnode }); await this.strategy4Repo.delete({ strategyChild2Id: body.idnode }); await this.strategy3Repo.delete({ strategyChild2Id: body.idnode }); await this.strategy2Repo.delete({ id : body.idnode }); break; case 3: strategyRepo = this.strategy3Repo; data = await strategyRepo.find({ where: { id: body.idnode }, }); if(!data){ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } await this.strategy5Repo.delete({ strategyChild3Id: body.idnode }); await this.strategy4Repo.delete({ strategyChild3Id: body.idnode }); await this.strategy3Repo.delete({ id: body.idnode }); break; case 4: strategyRepo = this.strategy4Repo; data = await strategyRepo.find({ where: { id: body.idnode }, }); if(!data){ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } await this.strategy5Repo.delete({ strategyChild4Id: body.idnode }); await this.strategy4Repo.delete({ id: body.idnode }); break; case 5: strategyRepo = this.strategy5Repo; data = await strategyRepo.find({ where: { id: body.idnode }, }); if(!data){ throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลยุทธศาสตร์"); } await this.strategy5Repo.delete({ id: body.idnode }); break; default: throw new HttpError(HttpStatus.BAD_REQUEST, "levelnode ไม่ถูกต้อง"); } if (!data) { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล"); } return new HttpSuccess(); } }