refactor: where conditions

This commit is contained in:
Methapon Metanipat 2024-09-10 13:01:43 +07:00
parent 916ea84565
commit 114f008934
2 changed files with 53 additions and 60 deletions

View file

@ -184,12 +184,24 @@ export class CustomerBranchController extends Controller {
: { : {
registeredBranch: { registeredBranch: {
OR: [ OR: [
{ user: { some: { userId: req.user.sub } } }, {
user: { some: { userId: req.user.sub } },
},
{ {
branch: globalAllow(req.user) branch: globalAllow(req.user)
? { some: { user: { some: { userId: req.user.sub } } } } ? { some: { user: { some: { userId: req.user.sub } } } }
: undefined, : undefined,
}, },
{
headOffice: globalAllow(req.user)
? { branch: { some: { user: { some: { userId: req.user.sub } } } } }
: undefined,
},
{
headOffice: globalAllow(req.user)
? { user: { some: { userId: req.user.sub } } }
: undefined,
},
], ],
}, },
}, },

View file

@ -19,6 +19,7 @@ import HttpStatus from "../interfaces/http-status";
import HttpError from "../interfaces/http-error"; import HttpError from "../interfaces/http-error";
import minio, { presignedGetObjectIfExist } from "../services/minio"; import minio, { presignedGetObjectIfExist } from "../services/minio";
import { isSystem } from "../utils/keycloak"; import { isSystem } from "../utils/keycloak";
import { filterStatus } from "../services/prisma";
if (!process.env.MINIO_BUCKET) { if (!process.env.MINIO_BUCKET) {
throw Error("Require MinIO bucket."); throw Error("Require MinIO bucket.");
@ -234,29 +235,52 @@ export class EmployeeController extends Controller {
@Get("stats/gender") @Get("stats/gender")
@Security("keycloak") @Security("keycloak")
async getEmployeeStatsGender( async getEmployeeStatsGender(
@Request() req: RequestWithUser,
@Query() customerBranchId?: string, @Query() customerBranchId?: string,
@Query() status?: Status, @Query() status?: Status,
@Query() query: string = "", @Query() query: string = "",
) { ) {
const filterStatus = (val?: Status) => {
if (!val) return {};
return val !== Status.CREATED && val !== Status.ACTIVE
? { status: val }
: { OR: [{ status: Status.CREATED }, { status: Status.ACTIVE }] };
};
return await prisma.employee return await prisma.employee
.groupBy({ .groupBy({
_count: true, _count: true,
by: ["gender"], by: ["gender"],
where: { where: {
OR: [ OR: [
{ firstName: { contains: query }, customerBranchId, ...filterStatus(status) }, { firstName: { contains: query } },
{ firstNameEN: { contains: query }, customerBranchId, ...filterStatus(status) }, { firstNameEN: { contains: query } },
{ lastName: { contains: query }, customerBranchId, ...filterStatus(status) }, { lastName: { contains: query } },
{ lastNameEN: { contains: query }, customerBranchId, ...filterStatus(status) }, { lastNameEN: { contains: query } },
], ],
AND: {
...filterStatus(status),
customerBranchId,
customerBranch: {
customer: isSystem(req.user)
? undefined
: {
registeredBranch: {
OR: [
{
user: { some: { userId: req.user.sub } },
},
{
branch: { some: { user: { some: { userId: req.user.sub } } } },
},
{
headOffice: globalAllow(req.user)
? { branch: { some: { user: { some: { userId: req.user.sub } } } } }
: undefined,
},
{
headOffice: globalAllow(req.user)
? { user: { some: { userId: req.user.sub } } }
: undefined,
},
],
},
},
},
},
}, },
}) })
.then((res) => .then((res) =>
@ -279,14 +303,6 @@ export class EmployeeController extends Controller {
@Query() page: number = 1, @Query() page: number = 1,
@Query() pageSize: number = 30, @Query() pageSize: number = 30,
) { ) {
const filterStatus = (val?: Status) => {
if (!val) return {};
return val !== Status.CREATED && val !== Status.ACTIVE
? { status: val }
: { OR: [{ status: Status.CREATED }, { status: Status.ACTIVE }] };
};
const where = { const where = {
OR: [ OR: [
{ firstName: { contains: query } }, { firstName: { contains: query } },
@ -350,16 +366,7 @@ export class EmployeeController extends Controller {
]); ]);
return { return {
result: await Promise.all( result,
result.map(async (v) => ({
...v,
profileImageUrl: await presignedGetObjectIfExist(
MINIO_BUCKET,
imageLocation(v.id),
12 * 60 * 60,
),
})),
),
page, page,
pageSize, pageSize,
total, total,
@ -580,18 +587,7 @@ export class EmployeeController extends Controller {
this.setStatus(HttpStatus.CREATED); this.setStatus(HttpStatus.CREATED);
return Object.assign(record, { return record;
profileImageUrl: await presignedGetObjectIfExist(
MINIO_BUCKET,
imageLocation(record.id),
12 * 60 * 60,
),
profileImageUploadUrl: await minio.presignedPutObject(
MINIO_BUCKET,
imageLocation(record.id),
12 * 60 * 60,
),
});
} }
@Put("{employeeId}") @Put("{employeeId}")
@ -896,18 +892,7 @@ export class EmployeeController extends Controller {
})), })),
}); });
return Object.assign(record, { return record;
profileImageUrl: await presignedGetObjectIfExist(
MINIO_BUCKET,
imageLocation(record.id),
12 * 60 * 60,
),
profileImageUploadUrl: await minio.presignedPutObject(
MINIO_BUCKET,
imageLocation(record.id),
12 * 60 * 60,
),
});
} }
@Delete("{employeeId}") @Delete("{employeeId}")
@ -998,11 +983,7 @@ export class EmployeeAttachmentController extends Controller {
} }
@Get("{filename}") @Get("{filename}")
async getAttachment( async getAttachment(@Path() employeeId: string, @Path() filename: string) {
@Request() req: RequestWithUser,
@Path() employeeId: string,
@Path() filename: string,
) {
const record = await prisma.employee.findFirst({ const record = await prisma.employee.findFirst({
where: { id: employeeId }, where: { id: employeeId },
}); });