diff --git a/src/controllers/StrategyController.ts b/src/controllers/StrategyController.ts new file mode 100644 index 0000000..858d8fe --- /dev/null +++ b/src/controllers/StrategyController.ts @@ -0,0 +1,332 @@ +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(); + } +} diff --git a/src/entities/StrategyChild5.ts b/src/entities/StrategyChild5.ts index 2fa84a4..01d9c0e 100644 --- a/src/entities/StrategyChild5.ts +++ b/src/entities/StrategyChild5.ts @@ -10,7 +10,7 @@ import { StrategyChild4 } from "./StrategyChild4"; export class StrategyChild5 extends EntityBase { @Column({ nullable: true, - comment: "กลยุทธ์ที่", + comment: "กลยุทธ์ที่/เป้าประสงค์ที่", length: 255, default: null, })