import { Controller, Get, Post, Put, Delete, Patch, Route, Security, Tags, Body, Path, Request, Example, SuccessResponse, Response, } from "tsoa"; import { AppDataSource } from "../database/data-source"; import HttpSuccess from "../interfaces/http-success"; import HttpStatusCode from "../interfaces/http-status"; import { PosExecutive } from "../entities/PosExecutive"; import { PosType } from "../entities/PosType"; import { PosLevel } from "../entities/PosLevel"; @Route("api/v1/org/pos") @Tags("Position") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class PositionController extends Controller { private posExecutiveRepository = AppDataSource.getRepository(PosExecutive); private posTypeRepository = AppDataSource.getRepository(PosType) private posLevelRepository = AppDataSource.getRepository(PosLevel); /** * API รายการตำแหน่งทางการบริหาร * * @summary ORG_026 - รายการตำแหน่งทางการบริหาร (ADMIN) #28 * */ @Get("executive") @Example([ { id: "00000000-0000-0000-0000-000000000000", posExecutiveName: "นักบริหาร", posExecutivePriority: 1 }, ]) async GetPosExecutive() { try { const posExecutive = await this.posExecutiveRepository.find({ select: [ "id", "posExecutiveName", "posExecutivePriority" ] }); if (!posExecutive) { return new HttpSuccess([]); } return new HttpSuccess(posExecutive); } 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", "posLevels" ] }); if (!posType) { return new HttpSuccess([]); } return new HttpSuccess(posType); } catch (error) { return error; } } /** * API รายการระดับตำแหน่ง * * @summary ORG_028 - รายการระดับตำแหน่ง (ADMIN) #30 * */ @Get("level") @Example([ { id: "00000000-0000-0000-0000-000000000000", posLevelName: "นักบริหาร", posLevelRank: 1, posLevelAuthority: "HEAD", posTypes: [ { id: "00000000-0000-0000-0000-000000000000", posTypeName: "นักบริหาร", posTypeRank: 1 } ] }, ]) async GetPosLevel() { try { const posLevel = await this.posLevelRepository.find({ select: [ "id", "posLevelName", "posLevelRank", "posLevelAuthority", "posTypeId" ], relations: ["posType"], }); if (!posLevel) { return new HttpSuccess([]); } const mapPosLevel = posLevel.map(item => ({ id: item.id, posLevelName: item.posLevelName, posLevelRank: item.posLevelRank, posLevelAuthority: item.posLevelAuthority, posTypes: [ { id: item.posType.id, posTypeName: item.posType.posTypeName, posTypeRank: item.posType.posTypeRank, } ] })); return new HttpSuccess(mapPosLevel); } catch (error) { return error; } } }