172 lines
6.1 KiB
TypeScript
172 lines
6.1 KiB
TypeScript
|
|
import {
|
||
|
|
Controller,
|
||
|
|
Get,
|
||
|
|
Post,
|
||
|
|
Put,
|
||
|
|
Delete,
|
||
|
|
Route,
|
||
|
|
Security,
|
||
|
|
Tags,
|
||
|
|
Body,
|
||
|
|
Path,
|
||
|
|
Request,
|
||
|
|
Query,
|
||
|
|
Example
|
||
|
|
} from "tsoa";
|
||
|
|
import { AppDataSource } from "../database/data-source";
|
||
|
|
import { In, Not, MoreThan, Brackets, Like, MoreThanOrEqual, } from "typeorm";
|
||
|
|
import HttpSuccess from "../interfaces/http-success";
|
||
|
|
import HttpError from "../interfaces/http-error";
|
||
|
|
import HttpStatusCode from "../interfaces/http-status";
|
||
|
|
import { Development, CreateDevelopment, UpdateDevelopment } from "../entities/Development";
|
||
|
|
|
||
|
|
@Route("api/v1/development/main")
|
||
|
|
@Tags("Development")
|
||
|
|
@Security("bearerAuth")
|
||
|
|
export class DevelopmentController extends Controller {
|
||
|
|
private developmentRepository = AppDataSource.getRepository(Development);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* API เพิ่มโครงการ/หลักสูตรการฝึกอบรม
|
||
|
|
*
|
||
|
|
* @summary DEV_001 - เพิ่มโครงการ/หลักสูตรการฝึกอบรม#1
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
@Post()
|
||
|
|
@Example({
|
||
|
|
name: "",
|
||
|
|
year: 2024,
|
||
|
|
})
|
||
|
|
async CreateDevelopment(
|
||
|
|
@Body() requestBody: CreateDevelopment,
|
||
|
|
@Request() request: { user: Record<string, any> },
|
||
|
|
) {
|
||
|
|
const development = Object.assign(new Development(), requestBody);
|
||
|
|
if (!development) {
|
||
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
||
|
|
}
|
||
|
|
const chk_name = await this.developmentRepository.find({
|
||
|
|
where: {
|
||
|
|
name: requestBody.name,
|
||
|
|
year: requestBody.year
|
||
|
|
},
|
||
|
|
});
|
||
|
|
if (chk_name.length > 0) {
|
||
|
|
throw new HttpError(
|
||
|
|
HttpStatusCode.NOT_FOUND,
|
||
|
|
"โครงการ/หลักสูตรการฝึกอบรม: " + requestBody.name + " ปีงบประมาณ: " + requestBody.year + " มีอยู่ในระบบแล้ว",
|
||
|
|
);
|
||
|
|
}
|
||
|
|
development.createdUserId = request.user.sub;
|
||
|
|
development.createdFullName = request.user.name;
|
||
|
|
development.lastUpdateUserId = request.user.sub;
|
||
|
|
development.lastUpdateFullName = request.user.name;
|
||
|
|
await this.developmentRepository.save(development);
|
||
|
|
return new HttpSuccess(development.id);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* API แก้ไขโครงการ/หลักสูตรการฝึกอบรม
|
||
|
|
*
|
||
|
|
* @summary DEV_002 - แก้ไขโครงการ/หลักสูตรการฝึกอบรม #2
|
||
|
|
*
|
||
|
|
* @param {string} id Id โครงการ
|
||
|
|
*/
|
||
|
|
@Put("{id}")
|
||
|
|
async UpdateDevelopment(
|
||
|
|
@Path() id: string,
|
||
|
|
@Body() requestBody: UpdateDevelopment,
|
||
|
|
@Request() request: { user: Record<string, any> },
|
||
|
|
) {
|
||
|
|
const development = await this.developmentRepository.findOne({ where: { id } });
|
||
|
|
if (!development) {
|
||
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงการ/หลักสูตรการฝึกอบรมนี้");
|
||
|
|
}
|
||
|
|
const chk_name = await this.developmentRepository.find({
|
||
|
|
where: {
|
||
|
|
name: requestBody.name,
|
||
|
|
year: requestBody.year,
|
||
|
|
id: Not(id)
|
||
|
|
},
|
||
|
|
});
|
||
|
|
if (chk_name.length > 0) {
|
||
|
|
throw new HttpError(
|
||
|
|
HttpStatusCode.NOT_FOUND,
|
||
|
|
"โครงการ/หลักสูตรการฝึกอบรม: " + requestBody.name + " ปีงบประมาณ: " + requestBody.year + " มีอยู่ในระบบแล้ว",
|
||
|
|
);
|
||
|
|
}
|
||
|
|
development.lastUpdateUserId = request.user.sub;
|
||
|
|
development.lastUpdateFullName = request.user.name;
|
||
|
|
this.developmentRepository.merge(development, requestBody);
|
||
|
|
await this.developmentRepository.save(development);
|
||
|
|
return new HttpSuccess(development.id);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* API ลบโครงการ/หลักสูตรการฝึกอบรม
|
||
|
|
*
|
||
|
|
* @summary DEV_003 - ลบโครงการ/หลักสูตรการฝึกอบรม #3
|
||
|
|
*
|
||
|
|
* @param {string} id Id โครงการ
|
||
|
|
*/
|
||
|
|
@Delete("{id}")
|
||
|
|
async DeleteDevelopment(@Path() id: string) {
|
||
|
|
const delDevelopment = await this.developmentRepository.findOne({ where: { id } });
|
||
|
|
if (!delDevelopment) {
|
||
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงการ/หลักสูตรการฝึกอบรมนี้");
|
||
|
|
}
|
||
|
|
await this.developmentRepository.remove(delDevelopment);
|
||
|
|
return new HttpSuccess();
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* API รายการโครงการ/หลักสูตรการฝึกอบรม
|
||
|
|
*
|
||
|
|
* @summary DEV_004 - รายการโครงการ/หลักสูตรการฝึกอบรม #4
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
@Get()
|
||
|
|
async GetDevelopmentLists(
|
||
|
|
@Query("page") page: number = 1,
|
||
|
|
@Query("pageSize") pageSize: number = 10,
|
||
|
|
@Query("keyword") keyword?: string,
|
||
|
|
@Query("year") year: number = 2024,
|
||
|
|
) {
|
||
|
|
const [development, total] = await AppDataSource.getRepository(Development)
|
||
|
|
.createQueryBuilder("development")
|
||
|
|
.andWhere(year != 0 ? "development.year LIKE :year" : "1=1", { year: `${year}` })
|
||
|
|
.orWhere("development.name LIKE :keyword", { keyword: `${keyword}` })
|
||
|
|
.select([
|
||
|
|
"development.id",
|
||
|
|
"development.name",
|
||
|
|
"development.year",
|
||
|
|
])
|
||
|
|
.orderBy("development.year", "DESC")
|
||
|
|
.skip((page - 1) * pageSize)
|
||
|
|
.take(pageSize)
|
||
|
|
.getManyAndCount();
|
||
|
|
|
||
|
|
return new HttpSuccess({ data: development, total });
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* API รายละเอียดโครงการ/หลักสูตรการฝึกอบรม
|
||
|
|
*
|
||
|
|
* @summary DEV_005 - รายละเอียดโครงการ/หลักสูตรการฝึกอบรม #5
|
||
|
|
*
|
||
|
|
* @param {string} id Id โครงการ
|
||
|
|
*/
|
||
|
|
@Get("{id}")
|
||
|
|
async GetDevelopemtById(@Path() id: string) {
|
||
|
|
const getDevelopment = await this.developmentRepository.findOne({
|
||
|
|
select: ["id", "name", "year"],
|
||
|
|
where: { id: id },
|
||
|
|
});
|
||
|
|
if (!getDevelopment) {
|
||
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงการ/หลักสูตรการฝึกอบรมนี้");
|
||
|
|
}
|
||
|
|
return new HttpSuccess(getDevelopment);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|