diff --git a/src/controllers/ProfileController.ts b/src/controllers/ProfileController.ts new file mode 100644 index 00000000..bb93a4af --- /dev/null +++ b/src/controllers/ProfileController.ts @@ -0,0 +1,158 @@ +import { + Controller, + Post, + Put, + Delete, + Route, + Security, + Tags, + Body, + Path, + Request, + SuccessResponse, + Response, + Get, +} from "tsoa"; +import { AppDataSource } from "../database/data-source"; +import HttpSuccess from "../interfaces/http-success"; +import HttpStatusCode from "../interfaces/http-status"; +import HttpError from "../interfaces/http-error"; +import { Profile, CreateProfile, UpdateProfile } from "../entities/Profile"; +import { Not } from "typeorm"; + +@Route("api/v1/org/profile") +@Tags("Profile") +@Security("bearerAuth") +@Response( + HttpStatusCode.INTERNAL_SERVER_ERROR, + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", +) +@SuccessResponse(HttpStatusCode.OK, "สำเร็จ") +export class ProfileController extends Controller { + private profileRepository = AppDataSource.getRepository(Profile); + + /** + * API สร้างทะเบียนประวัติ + * + * @summary ORG_065 - สร้างทะเบียนประวัติ (ADMIN) #70 + * + */ + @Post() + async createProfile( + @Body() + requestBody: CreateProfile, + @Request() request: { user: Record }, + ) { + + try { + const profile = Object.assign(new Profile(), requestBody); + profile.createdUserId = request.user.sub; + profile.createdFullName = request.user.name; + profile.lastUpdateUserId = request.user.sub; + profile.lastUpdateFullName = request.user.name; + await this.profileRepository.save(profile); + return new HttpSuccess(); + } catch (error) { + return error; + } + } + + /** + * API แก้ไขทะเบียนประวัติ + * + * @summary ORG_065 - แก้ไขทะเบียนประวัติ (ADMIN) #70 + * + * @param {string} id Id ทะเบียนประวัติ + */ + @Put("{id}") + async updateProfile( + @Path() id: string, + @Body() + requestBody: CreateProfile, + @Request() request: { user: Record }, + ) { + const profile = await this.profileRepository.findOne({ where: { id: id } }); + if (!profile) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลไอดีนี้ : " + id); + } + + try { + profile.lastUpdateUserId = request.user.sub; + profile.lastUpdateFullName = request.user.name; + this.profileRepository.merge(profile, requestBody); + await this.profileRepository.save(profile); + return new HttpSuccess(); + } catch (error) { + return error; + } + } + + /** + * API ลบทะเบียนประวัติ + * + * @summary ORG_065 - ลบทะเบียนประวัติ (ADMIN) #70 + * + * @param {string} id Id ทะเบียนประวัติ + */ + @Delete("{id}") + async deleteProfile(@Path() id: string) { + const delProfile = await this.profileRepository.findOne({ + where: { id }, + }); + if (!delProfile) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลตำแหน่งตามไอดีนี้ : " + id); + } + try { + await this.profileRepository.delete({ id: id }); + return new HttpSuccess(); + } catch (error) { + return error; + } + } + + /** + * API รายละเอียดรายการทะเบียนประวัติ + * + * @summary ORG_065 - รายละเอียดรายการทะเบียนประวัติ (ADMIN) #70 + * + * @param {string} id Id ทะเบียนประวัติ + */ + @Get("{id}") + async detailProfile(@Path() id: string) { + const profile = await this.profileRepository.findOne({ + where: { id }, + select: ["id","prefix","firstName","lastName","citizenId","position","posLevelId","posTypeId"], + }); + if (!profile) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } + try { + return new HttpSuccess(profile); + } catch (error) { + return error; + } + } + + /** + * API รายการทะเบียนประวัติ + * + * @summary ORG_065 - รายการทะเบียนประวัติ (ADMIN) #70 + * + */ + @Get() + async listProfile() { + const profile = await this.profileRepository.find({ + select: ["id","prefix","firstName","lastName","citizenId","position","posLevelId","posTypeId"], + order: { createdAt: "ASC" }, + }); + + if (!profile) { + return new HttpSuccess([]); + } + try { + return new HttpSuccess(profile); + } catch (error) { + return error; + } + } +} diff --git a/src/entities/Profile.ts b/src/entities/Profile.ts index 10794bb1..6cecec0c 100644 --- a/src/entities/Profile.ts +++ b/src/entities/Profile.ts @@ -107,6 +107,15 @@ export class CreateProfile { @Column() citizenId: string; + + @Column() + position: string; + + @Column("uuid") + posLevelId: string | null; + + @Column("uuid") + posTypeId: string | null; } export type UpdateProfile = Partial;