diff --git a/src/controllers/PosTypeController.ts b/src/controllers/PosTypeController.ts new file mode 100644 index 00000000..4d7320a3 --- /dev/null +++ b/src/controllers/PosTypeController.ts @@ -0,0 +1,242 @@ +import { + Controller, + Get, + Post, + Put, + Delete, + Patch, + Route, + Security, + Tags, + Body, + Path, + Request, + Example, + SuccessResponse, + Response, + Query, +} from "tsoa"; +import { AppDataSource } from "../database/data-source"; +import HttpSuccess from "../interfaces/http-success"; +import HttpStatusCode from "../interfaces/http-status"; +import { PosType, CreatePosType, UpdatePosType } from "../entities/PosType"; +import { PosLevel } from "../entities/PosLevel"; +import HttpError from "../interfaces/http-error"; +import { Not } from "typeorm"; + +@Route("api/v1/org/pos/type") +@Tags("PosType") +@Security("bearerAuth") +@Response( + HttpStatusCode.INTERNAL_SERVER_ERROR, + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", +) +@SuccessResponse(HttpStatusCode.OK, "สำเร็จ") + +export class PosTypeController extends Controller { + + private posTypeRepository = AppDataSource.getRepository(PosType); + private posLevelRepository = AppDataSource.getRepository(PosLevel); + + /** + * API เพิ่มประเภทตำแหน่ง + * + * @summary ORG_045 - เพิ่มประเภทตำแหน่ง (ADMIN) #48 + * + */ + @Post() + @Example( + { + positionName: "นักบริหาร", + posTypeRank: 1, + }, + ) + async createType( + @Body() + requestBody: CreatePosType, + @Request() request: { user: Record }, + ) { + const posType = Object.assign(new PosType(), requestBody); + if (!posType) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } + const chkPosTypeName = await this.posTypeRepository.findOne({ where: { + posTypeName: requestBody.posTypeName } + }) + if(chkPosTypeName){ + throw new HttpError(HttpStatusCode.NOT_FOUND, "ชื่อประเภทตำแหน่ง: " + requestBody.posTypeName + " มีอยู่ในระบบแล้ว"); + } + try { + posType.createdUserId = request.user.sub; + posType.createdFullName = request.user.name; + posType.lastUpdateUserId = request.user.sub; + posType.lastUpdateFullName = request.user.name; + await this.posTypeRepository.save(posType); + return new HttpSuccess(posType); + } catch (error) { + return error; + } + } + + /** + * API แก้ไขประเภทตำแหน่ง + * + * @summary ORG_046 - แก้ไขประเภทตำแหน่ง (ADMIN) #49 + * + * @param {string} id Id ประเภทตำแหน่ง + */ + @Put("{id}") + @Example( + { + positionName: "นักบริหาร", + posTypeRank: 1, + }, + ) + async editType( + @Path() id: string, + @Body() requestBody: UpdatePosType, + @Request() request: { user: Record }, + ) { + const posType = await this.posTypeRepository.findOne({ where: { id } }); + if (!posType) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลไอดีนี้ : " + id); + } + const chkPosTypeName = await this.posTypeRepository.findOne({ where: { + id: Not(id), + posTypeName: requestBody.posTypeName } + }) + if(chkPosTypeName){ + throw new HttpError(HttpStatusCode.NOT_FOUND, "ชื่อประเภทตำแหน่ง: " + requestBody.posTypeName + " มีอยู่ในระบบแล้ว"); + } + try { + posType.lastUpdateUserId = request.user.sub; + posType.lastUpdateFullName = request.user.name; + this.posTypeRepository.merge(posType, requestBody); + await this.posTypeRepository.save(posType); + return new HttpSuccess(posType.id); + } catch (error) { + return error; + } + } + + /** + * API ลบประเภทตำแหน่ง + * + * @summary ORG_047 - ลบประเภทตำแหน่ง (ADMIN) #50 + * + * @param {string} id Id ตำแหน่ง + */ + @Delete("{id}") + async deleteType(@Path() id: string) { + const delPosType = await this.posTypeRepository.findOne({ where: { id } }); + if (!delPosType) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลไอดีนี้ : " + id); + } + try { + await this.posTypeRepository.remove(delPosType); + return new HttpSuccess(); + } catch (error) { + return error; + } + } + + /** + * API รายละเอียดประเภทตำแหน่ง + * + * @summary ORG_048 - รายละเอียดประเภทตำแหน่ง (ADMIN) #51 + * + * @param {string} id Id ประเภทตำแหน่ง + */ + @Get("{id}") + @Example([ + { + id: "00000000-0000-0000-0000-000000000000", + posTypeName: "นักบริหาร", + posLevelposTypeRanks: 1, + posLevels: [ + { + id: "00000000-0000-0000-0000-000000000000", + posLevelName: "นักบริหาร", + posLevelRank: 1, + posLevelAuthority: "HEAD" + } + ] + }, + ]) + async GetTypeDetail(@Path() id: string) { + try { + const getPosType = await this.posTypeRepository.findOne({ + select: ["id", "posTypeName", "posTypeRank"], + relations: ["posLevels"], + where: { id: id } + }); + if (!getPosType) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลไอดีนี้ : " + id); + } + + const mapGetPosType = { + id : getPosType.id, + posTypeName : getPosType.posTypeName, + posTypeRank : getPosType.posTypeRank, + posLevels : getPosType.posLevels.map((posLevel) => ({ + id: posLevel.id, + posLevelName: posLevel.posLevelName, + posLevelRank: posLevel.posLevelRank, + posLevelAuthority: posLevel.posLevelAuthority, + })), + } + + return new HttpSuccess(mapGetPosType); + } catch (error) { + return error; + } + } + + /** + * API รายการประเภทตำแหน่ง + * + * @summary ORG_027 - รายการประเภทตำแหน่ง (ADMIN) #29 + * + */ + @Get() + @Example([ + { + id: "00000000-0000-0000-0000-000000000000", + posTypeName: "นักบริหาร", + posTypeRank: 1, + posLevels: [ + { + id: "00000000-0000-0000-0000-000000000000", + posLevelName: "นักบริหาร", + posLevelRank: 1, + posLevelAuthority: "HEAD", + }, + ], + }, + ]) + async GetPosType() { + try { + const posType = await this.posTypeRepository.find({ + select: ["id", "posTypeName", "posTypeRank"], + relations: ["posLevels"], + }); + if (!posType) { + return new HttpSuccess([]); + } + const mapPosType = posType.map((item) => ({ + id: item.id, + posTypeName: item.posTypeName, + posTypeRank: item.posTypeRank, + posLevels: item.posLevels.map((posLevel) => ({ + id: posLevel.id, + posLevelName: posLevel.posLevelName, + posLevelRank: posLevel.posLevelRank, + posLevelAuthority: posLevel.posLevelAuthority, + })), + })); + return new HttpSuccess(mapPosType); + } catch (error) { + return error; + } + } +} diff --git a/src/controllers/PositionController.ts b/src/controllers/PositionController.ts index 6ef864f2..13248726 100644 --- a/src/controllers/PositionController.ts +++ b/src/controllers/PositionController.ts @@ -85,53 +85,53 @@ export class PositionController extends Controller { } } - /** - * API รายการประเภทตำแหน่ง - * - * @summary ORG_027 - รายการประเภทตำแหน่ง (ADMIN) #29 - * - */ - @Get("type") - @Example([ - { - id: "00000000-0000-0000-0000-000000000000", - posTypeName: "นักบริหาร", - posTypeRank: 1, - posLevels: [ - { - id: "00000000-0000-0000-0000-000000000000", - posLevelName: "นักบริหาร", - posLevelRank: 1, - posLevelAuthority: "HEAD", - }, - ], - }, - ]) - async GetPosType() { - try { - const posType = await this.posTypeRepository.find({ - select: ["id", "posTypeName", "posTypeRank"], - relations: ["posLevels"], - }); - if (!posType) { - return new HttpSuccess([]); - } - const mapPosType = posType.map((item) => ({ - id: item.id, - posTypeName: item.posTypeName, - posTypeRank: item.posTypeRank, - posLevels: item.posLevels.map((posLevel) => ({ - id: posLevel.id, - posLevelName: posLevel.posLevelName, - posLevelRank: posLevel.posLevelRank, - posLevelAuthority: posLevel.posLevelAuthority, - })), - })); - return new HttpSuccess(mapPosType); - } catch (error) { - return error; - } - } + // /** + // * API รายการประเภทตำแหน่ง + // * + // * @summary ORG_027 - รายการประเภทตำแหน่ง (ADMIN) #29 + // * + // */ + // @Get("type") + // @Example([ + // { + // id: "00000000-0000-0000-0000-000000000000", + // posTypeName: "นักบริหาร", + // posTypeRank: 1, + // posLevels: [ + // { + // id: "00000000-0000-0000-0000-000000000000", + // posLevelName: "นักบริหาร", + // posLevelRank: 1, + // posLevelAuthority: "HEAD", + // }, + // ], + // }, + // ]) + // async GetPosType() { + // try { + // const posType = await this.posTypeRepository.find({ + // select: ["id", "posTypeName", "posTypeRank"], + // relations: ["posLevels"], + // }); + // if (!posType) { + // return new HttpSuccess([]); + // } + // const mapPosType = posType.map((item) => ({ + // id: item.id, + // posTypeName: item.posTypeName, + // posTypeRank: item.posTypeRank, + // posLevels: item.posLevels.map((posLevel) => ({ + // id: posLevel.id, + // posLevelName: posLevel.posLevelName, + // posLevelRank: posLevel.posLevelRank, + // posLevelAuthority: posLevel.posLevelAuthority, + // })), + // })); + // return new HttpSuccess(mapPosType); + // } catch (error) { + // return error; + // } + // } /** * API รายการระดับตำแหน่ง diff --git a/tsoa.json b/tsoa.json index 2ffb35e2..1af11402 100644 --- a/tsoa.json +++ b/tsoa.json @@ -46,6 +46,15 @@ }, { "name": "Position", "description": "ตำแหน่ง" + }, + { + "name": "PosType", "description": "ประเภทตำแหน่ง" + }, + { + "name": "PosLevel", "description": "ระดับตำแหน่ง" + }, + { + "name": "PosExecutive", "description": "ตำแหน่งทางการบริหาร" } ] },