import { Body, Controller, Get, Path, Post, Request, Route, Security, Tags } from "tsoa"; import { AppDataSource } from "../database/data-source"; import { RequestWithUser } from "../middlewares/user"; import HttpError from "../interfaces/http-error"; import HttpStatus from "../interfaces/http-status"; import HttpSuccess from "../interfaces/http-success"; import HttpStatusCode from "../interfaces/http-status"; import { AuthRole } from "../entities/AuthRole"; import { AuthRoleAttr } from "../entities/AuthRoleAttr"; import { PosMaster } from "../entities/PosMaster"; import { Profile } from "../entities/Profile"; const REDIS_HOST = process.env.REDIS_HOST; const REDIS_PORT = process.env.REDIS_PORT; @Route("api/v1/org/permission") @Tags("Permission") @Security("bearerAuth") export class PermissionController extends Controller { private profileRepo = AppDataSource.getRepository(Profile); private posMasterRepository = AppDataSource.getRepository(PosMaster); private authRoleRepo = AppDataSource.getRepository(AuthRole); private authRoleAttrRepo = AppDataSource.getRepository(AuthRoleAttr); private redis = require("redis"); @Get("") public async getPermission(@Request() request: { user: Record }) { const redisClient = await this.redis.createClient({ host: REDIS_HOST, port: REDIS_PORT, }); const formattedData = null; // await Promise.all([ return redisClient.get(request.user.sub, async (err: any, reply: any) => { if (reply != null) { return new HttpSuccess(JSON.parse(reply)); } else { const profile = await this.profileRepo.findOne({ select: ["id"], where: { keycloak: request.user.sub }, }); if (!profile) { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลบุคคลนี้ในระบบ"); } const posMaster = await this.posMasterRepository.findOne({ select: ["authRoleId"], where: { current_holderId: profile.id }, }); if (!posMaster) { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลสิทธิ์"); } const getDetail = await this.authRoleRepo.findOne({ select: ["id", "roleName", "roleDescription"], where: { id: posMaster.authRoleId }, }); if (!getDetail) { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล"); } const roleAttrData = await this.authRoleAttrRepo.find({ select: [ "authSysId", "parentNode", "attrOwnership", "attrIsCreate", "attrIsList", "attrIsGet", "attrIsUpdate", "attrIsDelete", "attrPrivilege", ], where: { authRoleId: getDetail.id }, }); const formattedData = { ...getDetail, roleAttributes: roleAttrData, }; redisClient.setex(request.user.sub, 20, JSON.stringify(formattedData)); return new HttpSuccess(formattedData); } }); // ]); } }