import { Controller, Get, Post, Put, Delete, Route, Security, Tags, Body, Path, Request, Query, } from "tsoa"; import { AppDataSource } from "../database/data-source"; import { Not } from "typeorm"; import HttpSuccess from "../interfaces/http-success"; import HttpError from "../interfaces/http-error"; import HttpStatusCode from "../interfaces/http-status"; import { Development } from "../entities/Development"; import { CreateDevelopmentHistory, DevelopmentHistory, UpdateDevelopmentHistory, } from "../entities/DevelopmentHistory"; @Route("api/v1/development/history") @Tags("DevelopmentHistory") @Security("bearerAuth") export class DevelopmentHistoryController extends Controller { private developmentHistoryRepository = AppDataSource.getRepository(DevelopmentHistory); private developmentRepository = AppDataSource.getRepository(Development); /** * API เพิ่มประวัติการฝึกอบรม/ดูงาน * * @summary DEV_006 - เพิ่มประวัติการฝึกอบรม/ดูงาน#6 * */ @Post() async CreateDevelopmentHistory( @Body() requestBody: CreateDevelopmentHistory, @Request() request: { user: Record }, ) { const chk_name = await this.developmentHistoryRepository.find({ where: { citizenId: requestBody.citizenId, developmentId: requestBody.developmentId, }, }); if (chk_name.length > 0) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ประวัติการฝึกอบรม/ดูงาน มีอยู่ในระบบแล้ว"); } const checkId = await this.developmentRepository.findOne({ where: { id: requestBody.developmentId }, }); if (!checkId) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงการ/หลักสูตรการฝึกอบรม"); } const development = Object.assign(new DevelopmentHistory(), requestBody); development.createdUserId = request.user.sub; development.createdFullName = request.user.name; development.lastUpdateUserId = request.user.sub; development.lastUpdateFullName = request.user.name; await this.developmentHistoryRepository.save(development); return new HttpSuccess(development.id); } /** * API แก้ไขประวัติการฝึกอบรม/ดูงาน * * @summary DEV_007 - แก้ไขประวัติการฝึกอบรม/ดูงาน #7 * * @param {string} id Id โครงการ */ @Put("{id}") async UpdateDevelopmentHistory( @Path() id: string, @Body() requestBody: UpdateDevelopmentHistory, @Request() request: { user: Record }, ) { const development = await this.developmentHistoryRepository.findOne({ where: { id }, }); if (!development) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลประวัติการฝึกอบรม/ดูงานนี้"); } const chk_name = await this.developmentHistoryRepository.find({ where: { citizenId: requestBody.citizenId, developmentId: requestBody.developmentId, id: Not(id), }, }); if (chk_name.length > 0) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ประวัติการฝึกอบรม/ดูงาน มีอยู่ในระบบแล้ว"); } const checkId = await this.developmentRepository.findOne({ where: { id: requestBody.developmentId }, }); if (!checkId) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงการ/หลักสูตรการฝึกอบรม"); } Object.assign(development, requestBody); development.lastUpdateUserId = request.user.sub; development.lastUpdateFullName = request.user.name; await this.developmentHistoryRepository.save(development); return new HttpSuccess(development.id); } /** * API ลบประวัติการฝึกอบรม/ดูงาน * * @summary DEV_008 - ลบประวัติการฝึกอบรม/ดูงาน #8 * * @param {string} id Id โครงการ */ @Delete("{id}") async DeleteDevelopmentHistory(@Path() id: string) { const development = await this.developmentHistoryRepository.findOne({ where: { id }, }); if (!development) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลประวัติการฝึกอบรม/ดูงานนี้"); } await this.developmentHistoryRepository.remove(development); return new HttpSuccess(); } /** * API รายการประวัติการฝึกอบรม/ดูงาน * * @summary DEV_009 - รายการประวัติการฝึกอบรม/ดูงาน #9 * */ @Get() async GetDevelopmentHistoryLists( @Query("page") page: number = 1, @Query("pageSize") pageSize: number = 10, @Query("keyword") keyword?: string, @Query("year") year?: number, ) { const [development, total] = await AppDataSource.getRepository(DevelopmentHistory) .createQueryBuilder("developmentHistory") // .andWhere(year == null ? "developmentHistory.year LIKE :year" : "1=1", { year: `${year}` }) // .orWhere("developmentHistory.projectName LIKE :keyword", { keyword: `${keyword}` }) // .select(["development.id", "development.projectName", "development.year"]) // .orderBy("developmentHistory.year", "DESC") .orderBy("developmentHistory.createdAt", "DESC") .skip((page - 1) * pageSize) .take(pageSize) .getManyAndCount(); return new HttpSuccess({ data: development, total }); } /** * API รายละเอียดประวัติการฝึกอบรม/ดูงาน * * @summary DEV_010 - รายละเอียดประวัติการฝึกอบรม/ดูงาน #10 * * @param {string} id Id โครงการ */ @Get("{id}") async GetDevelopemtHistoryById(@Path() id: string) { const getDevelopment = await this.developmentHistoryRepository.findOne({ where: { id: id }, }); if (!getDevelopment) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลประวัติการฝึกอบรม/ดูงานนี้"); } return new HttpSuccess(getDevelopment); } }