Merge branch 'develop'

This commit is contained in:
DESKTOP-2S5P7D1\Windows 10 2024-12-18 09:58:14 +07:00
commit b0617959d5
6 changed files with 89 additions and 163 deletions

View file

@ -1,5 +1,5 @@
name: release-test name: release
run-name: release-test ${{ github.actor }} run-name: release ${{ github.actor }}
on: on:
push: push:
tags: tags:
@ -9,11 +9,11 @@ env:
REGISTRY: docker.frappet.com REGISTRY: docker.frappet.com
IMAGE_NAME: ehr/bma-ehr-evaluation-service IMAGE_NAME: ehr/bma-ehr-evaluation-service
DEPLOY_HOST: frappet.com DEPLOY_HOST: frappet.com
# COMPOSE_PATH: /home/frappet/docker/bma-ehr
COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-evaluation COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-evaluation
jobs: jobs:
# act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=latest -s DOCKER_USER=admin -s DOCKER_PASS=FPTadmin2357 -s SSH_PASSWORD=FPTadmin2357 # act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=latest -s DOCKER_USER=admin -s DOCKER_PASS=FPTadmin2357 -s SSH_PASSWORD=FPTadmin2357
release-test: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
@ -67,21 +67,40 @@ jobs:
docker compose pull docker compose pull
docker compose up -d docker compose up -d
echo "${{ steps.gen_ver.outputs.image_ver }}"> success echo "${{ steps.gen_ver.outputs.image_ver }}"> success
- uses: snow-actions/line-notify@v1.1.0 - name: Notify Discord Success
if: success() if: success()
with: run: |
access_token: ${{ secrets.TOKEN_LINE }} curl -H "Content-Type: application/json" \
message: | -X POST \
-Success✅✅✅ -d '{
Image: ${{env.IMAGE_NAME}} "embeds": [{
Version: ${{ steps.gen_ver.outputs.IMAGE_VER }} "title": "✅ Deployment Success!",
By: ${{github.actor}} "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Deployed by: `${{github.actor}}`",
- uses: snow-actions/line-notify@v1.1.0 "color": 3066993,
"footer": {
"text": "Release Notification",
"icon_url": "https://example.com/success-icon.png"
},
"timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"
}]
}' \
${{ secrets.DISCORD_WEBHOOK }}
- name: Notify Discord Failure
if: failure() if: failure()
with: run: |
access_token: ${{ secrets.TOKEN_LINE }} curl -H "Content-Type: application/json" \
message: | -X POST \
-Failure❌❌❌ -d '{
Image: ${{env.IMAGE_NAME}} "embeds": [{
Version: ${{ steps.gen_ver.outputs.IMAGE_VER }} "title": "❌ Deployment Failed!",
By: ${{github.actor}} "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Attempted by: `${{github.actor}}`",
"color": 15158332,
"footer": {
"text": "Release Notification",
"icon_url": "https://example.com/failure-icon.png"
},
"timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"
}]
}' \
${{ secrets.DISCORD_WEBHOOK }}

View file

@ -47,21 +47,6 @@ export class DirectorController {
@Query("keyword") keyword?: string, @Query("keyword") keyword?: string,
) { ) {
await new permission().PermissionList(request, "SYS_EVA_INFO"); await new permission().PermissionList(request, "SYS_EVA_INFO");
// const directors = await this.directorRepository.find({
// skip: (page - 1) * pageSize,
// take: pageSize,
// });
// if (keyword != undefined && keyword !== "") {
// return directors.filter(
// (x) =>
// x.prefix?.includes(keyword) ||
// x.firstName?.includes(keyword) ||
// x.lastName?.includes(keyword) ||
// x.position?.includes(keyword) ||
// x.email?.includes(keyword) ||
// x.phone?.includes(keyword),
// );
// }
const directors = await AppDataSource.getRepository(Director) const directors = await AppDataSource.getRepository(Director)
.createQueryBuilder("director") .createQueryBuilder("director")
.andWhere( .andWhere(
@ -74,30 +59,15 @@ export class DirectorController {
keyword: `%${keyword}%`, keyword: `%${keyword}%`,
}, },
) )
.orWhere( .orWhere(keyword != null && keyword != "" ? "director.position LIKE :keyword" : "1=1", {
keyword != null && keyword != ""
? "director.position LIKE :keyword"
: "1=1",
{
keyword: `%${keyword}%`, keyword: `%${keyword}%`,
}, })
) .orWhere(keyword != null && keyword != "" ? "director.email LIKE :keyword" : "1=1", {
.orWhere(
keyword != null && keyword != ""
? "director.email LIKE :keyword"
: "1=1",
{
keyword: `%${keyword}%`, keyword: `%${keyword}%`,
}, })
) .orWhere(keyword != null && keyword != "" ? "director.phone LIKE :keyword" : "1=1", {
.orWhere(
keyword != null && keyword != ""
? "director.phone LIKE :keyword"
: "1=1",
{
keyword: `%${keyword}%`, keyword: `%${keyword}%`,
}, });
);
}), }),
) )
.orderBy("director.createdAt", "DESC") .orderBy("director.createdAt", "DESC")
@ -115,21 +85,6 @@ export class DirectorController {
@Query("pageSize") pageSize: number = 10, @Query("pageSize") pageSize: number = 10,
@Query("keyword") keyword?: string, @Query("keyword") keyword?: string,
) { ) {
// const directors = await this.directorRepository.find({
// skip: (page - 1) * pageSize,
// take: pageSize,
// });
// if (keyword != undefined && keyword !== "") {
// return directors.filter(
// (x) =>
// x.prefix?.includes(keyword) ||
// x.firstName?.includes(keyword) ||
// x.lastName?.includes(keyword) ||
// x.position?.includes(keyword) ||
// x.email?.includes(keyword) ||
// x.phone?.includes(keyword),
// );
// }
const directors = await AppDataSource.getRepository(Director) const directors = await AppDataSource.getRepository(Director)
.createQueryBuilder("director") .createQueryBuilder("director")
.andWhere( .andWhere(
@ -142,30 +97,15 @@ export class DirectorController {
keyword: `%${keyword}%`, keyword: `%${keyword}%`,
}, },
) )
.orWhere( .orWhere(keyword != null && keyword != "" ? "director.position LIKE :keyword" : "1=1", {
keyword != null && keyword != ""
? "director.position LIKE :keyword"
: "1=1",
{
keyword: `%${keyword}%`, keyword: `%${keyword}%`,
}, })
) .orWhere(keyword != null && keyword != "" ? "director.email LIKE :keyword" : "1=1", {
.orWhere(
keyword != null && keyword != ""
? "director.email LIKE :keyword"
: "1=1",
{
keyword: `%${keyword}%`, keyword: `%${keyword}%`,
}, })
) .orWhere(keyword != null && keyword != "" ? "director.phone LIKE :keyword" : "1=1", {
.orWhere(
keyword != null && keyword != ""
? "director.phone LIKE :keyword"
: "1=1",
{
keyword: `%${keyword}%`, keyword: `%${keyword}%`,
}, });
);
}), }),
) )
.orderBy("director.createdAt", "DESC") .orderBy("director.createdAt", "DESC")

View file

@ -26,7 +26,7 @@ import { Training } from "../entities/Training";
import { Assessment } from "../entities/Assessment"; import { Assessment } from "../entities/Assessment";
import { Director } from "../entities/Director"; import { Director } from "../entities/Director";
import { Meeting } from "../entities/Meeting"; import { Meeting } from "../entities/Meeting";
import { ConvertToThaiStep, ConvertToThaiType } from "../services/storage"; import { ConvertThaiToType, ConvertToThaiStep, ConvertToThaiType } from "../services/storage";
import { Brackets } from "typeorm"; import { Brackets } from "typeorm";
import CallAPI from "../interfaces/call-api"; import CallAPI from "../interfaces/call-api";
import permission from "../interfaces/permission"; import permission from "../interfaces/permission";
@ -78,15 +78,15 @@ export class EvaluationController {
}, },
) { ) {
// await new permission().PermissionList(request, "SYS_EVA_REQ"); // await new permission().PermissionList(request, "SYS_EVA_REQ");
let _data = await new permission().PermissionOrgList(request,"SYS_EVA_REQ"); let _data = await new permission().PermissionOrgList(request, "SYS_EVA_REQ");
const [evaluation, total] = await AppDataSource.getRepository(Evaluation) const [evaluation, total] = await AppDataSource.getRepository(Evaluation)
.createQueryBuilder("evaluation") .createQueryBuilder("evaluation")
.andWhere( .andWhere(
_data.root != undefined && _data.root != null _data.root != undefined && _data.root != null
? _data.root[0] != null ? _data.root[0] != null
? `evaluation.rootId IN (:...root)` ? `evaluation.rootId IN (:...root)`
: `evaluation.rootId is null` : `evaluation.rootId is null`
: "1=1", : "1=1",
{ {
root: _data.root, root: _data.root,
}, },
@ -120,7 +120,7 @@ export class EvaluationController {
{ {
child3: _data.child3, child3: _data.child3,
}, },
) )
.andWhere( .andWhere(
_data.child4 != undefined && _data.child4 != null _data.child4 != undefined && _data.child4 != null
? _data.child4[0] != null ? _data.child4[0] != null
@ -146,7 +146,10 @@ export class EvaluationController {
.orWhere("evaluation.citizenId LIKE :keyword", { keyword: `%${body.keyword}%` }) .orWhere("evaluation.citizenId LIKE :keyword", { keyword: `%${body.keyword}%` })
.orWhere("evaluation.position LIKE :keyword", { keyword: `%${body.keyword}%` }) .orWhere("evaluation.position LIKE :keyword", { keyword: `%${body.keyword}%` })
.orWhere("evaluation.posNo LIKE :keyword", { keyword: `%${body.keyword}%` }) .orWhere("evaluation.posNo LIKE :keyword", { keyword: `%${body.keyword}%` })
.orWhere("evaluation.oc LIKE :keyword", { keyword: `%${body.keyword}%` }); .orWhere("evaluation.oc LIKE :keyword", { keyword: `%${body.keyword}%` })
.orWhere("evaluation.type IN (:...type)", {
type: body.keyword == null ? [""] : ConvertThaiToType(body.keyword),
});
}), }),
); );
}), }),
@ -198,13 +201,6 @@ export class EvaluationController {
).andWhere("evaluation.createdUserId = :createdUserId", { ).andWhere("evaluation.createdUserId = :createdUserId", {
createdUserId: request.user.sub, createdUserId: request.user.sub,
}); });
// .andWhere(
// new Brackets((qb) => {
// qb.orWhere("evaluation.positionLevel LIKE :keyword", {
// keyword: `%${body.keyword}%`,
// });
// }),
// );
}), }),
) )
.orderBy("evaluation.lastUpdatedAt", "DESC") .orderBy("evaluation.lastUpdatedAt", "DESC")
@ -408,7 +404,6 @@ export class EvaluationController {
const before = null; const before = null;
//Evaluation
evaluation.step = "PREPARE_DOC_V1"; evaluation.step = "PREPARE_DOC_V1";
evaluation.type = requestBody.type == "EXPERT" ? "EXPERT" : "SPECIAL_EXPERT"; evaluation.type = requestBody.type == "EXPERT" ? "EXPERT" : "SPECIAL_EXPERT";
evaluation.fullName = requestBody.fullName; evaluation.fullName = requestBody.fullName;

View file

@ -48,33 +48,15 @@ export class MeetingController {
@Query("keyword") keyword?: string, @Query("keyword") keyword?: string,
) { ) {
await new permission().PermissionList(request, "SYS_EVA_INFO"); await new permission().PermissionList(request, "SYS_EVA_INFO");
// const meetings = await this.meetingRepository.find({
// skip: (page - 1) * pageSize,
// take: pageSize,
// });
// if (keyword != undefined && keyword !== "") {
// return meetings.filter((x) => x.title?.includes(keyword) || x.round?.includes(keyword));
// }
const meetings = await AppDataSource.getRepository(Meeting) const meetings = await AppDataSource.getRepository(Meeting)
.createQueryBuilder("meeting") .createQueryBuilder("meeting")
.andWhere( .andWhere(
new Brackets((qb) => { new Brackets((qb) => {
qb.where( qb.where(keyword != null && keyword != "" ? "meeting.title LIKE :keyword" : "1=1", {
keyword != null && keyword != "" keyword: `%${keyword}%`,
? "meeting.title LIKE :keyword" }).orWhere(keyword != null && keyword != "" ? "meeting.round LIKE :keyword" : "1=1", {
: "1=1", keyword: `%${keyword}%`,
{ });
keyword: `%${keyword}%`,
},
)
.orWhere(
keyword != null && keyword != ""
? "meeting.round LIKE :keyword"
: "1=1",
{
keyword: `%${keyword}%`,
},
);
}), }),
) )
.orderBy("meeting.createdAt", "DESC") .orderBy("meeting.createdAt", "DESC")
@ -91,34 +73,15 @@ export class MeetingController {
@Query("pageSize") pageSize: number = 10, @Query("pageSize") pageSize: number = 10,
@Query("keyword") keyword?: string, @Query("keyword") keyword?: string,
) { ) {
// const meetings = await this.meetingRepository.find({
// skip: (page - 1) * pageSize,
// take: pageSize,
// });
// if (keyword != undefined && keyword !== "") {
// return meetings.filter((x) => x.title?.includes(keyword) || x.round?.includes(keyword));
// }
const meetings = await AppDataSource.getRepository(Meeting) const meetings = await AppDataSource.getRepository(Meeting)
.createQueryBuilder("meeting") .createQueryBuilder("meeting")
.andWhere( .andWhere(
new Brackets((qb) => { new Brackets((qb) => {
qb.where( qb.where(keyword != null && keyword != "" ? "meeting.title LIKE :keyword" : "1=1", {
keyword != null && keyword != "" keyword: `%${keyword}%`,
? "meeting.title LIKE :keyword" }).orWhere(keyword != null && keyword != "" ? "meeting.round LIKE :keyword" : "1=1", {
: "1=1", keyword: `%${keyword}%`,
{ });
keyword: `%${keyword}%`,
},
)
.orWhere(
keyword != null && keyword != ""
? "meeting.round LIKE :keyword"
: "1=1",
{
keyword: `%${keyword}%`,
},
);
}), }),
) )
.orderBy("meeting.createdAt", "DESC") .orderBy("meeting.createdAt", "DESC")

View file

@ -7,7 +7,7 @@ import { promisify } from "util";
class CheckAuth { class CheckAuth {
private redis = require("redis"); private redis = require("redis");
public async Permission(req: RequestWithUser, system: string, action: string) { public async Permission(req: RequestWithUser, system: string, action: string) {
if ( if (
req.headers.hasOwnProperty("api_key") && req.headers.hasOwnProperty("api_key") &&
@ -183,7 +183,7 @@ class CheckAuth {
return false; return false;
}); });
} }
public async checkOrg(token: any,keycloakId: string) { public async checkOrg(token: any, keycloakId: string) {
const redisClient = await this.redis.createClient({ const redisClient = await this.redis.createClient({
host: process.env.REDIS_HOST, host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT, port: process.env.REDIS_PORT,
@ -194,14 +194,15 @@ class CheckAuth {
reply = JSON.parse(reply); reply = JSON.parse(reply);
} else { } else {
try { try {
if (!keycloakId) throw "Error calling API No KeycloakId";
const x = await new CallAPI().GetData( const x = await new CallAPI().GetData(
{ {
headers: { authorization: token }, headers: { authorization: token },
}, },
`/org/permission/checkOrg/${keycloakId}`, `/org/permission/checkOrg/${keycloakId}`,
false false,
); );
const data = { const data = {
orgRootId: x.orgRootId, orgRootId: x.orgRootId,
orgChild1Id: x.orgChild1Id, orgChild1Id: x.orgChild1Id,
@ -209,7 +210,7 @@ class CheckAuth {
orgChild3Id: x.orgChild3Id, orgChild3Id: x.orgChild3Id,
orgChild4Id: x.orgChild4Id, orgChild4Id: x.orgChild4Id,
}; };
return data; return data;
} catch (error) { } catch (error) {
console.error("Error calling API:", error); console.error("Error calling API:", error);

View file

@ -263,3 +263,11 @@ export function ConvertToThaiType(val: string) {
return null; return null;
} }
} }
export function ConvertThaiToType(val: string) {
const data = [""];
if ("ชำนาญการ".includes(val)) data.push("EXPERT");
if ("ชำนาญการพิเศษ".includes(val)) data.push("SPECIAL_EXPERT");
if ("เชี่ยวชาญ".includes(val)) data.push("EXPERTISE");
return data;
}