feat: filter status created and active treated as same

This commit is contained in:
Methapon2001 2024-06-14 11:54:13 +07:00
parent fa8e21166b
commit af6d915106
6 changed files with 84 additions and 25 deletions

View file

@ -117,20 +117,28 @@ export class CustomerBranchController 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: [
{ nameEN: { contains: query }, zipCode, status }, { nameEN: { contains: query }, zipCode, ...filterStatus(status) },
{ name: { contains: query }, zipCode, status }, { name: { contains: query }, zipCode, ...filterStatus(status) },
{ email: { contains: query }, zipCode, status }, { email: { contains: query }, zipCode, ...filterStatus(status) },
{ code: { contains: query }, zipCode, status }, { code: { contains: query }, zipCode, ...filterStatus(status) },
{ address: { contains: query }, zipCode, status }, { address: { contains: query }, zipCode, ...filterStatus(status) },
{ addressEN: { contains: query }, zipCode, status }, { addressEN: { contains: query }, zipCode, ...filterStatus(status) },
{ province: { name: { contains: query } }, zipCode, status }, { province: { name: { contains: query } }, zipCode, ...filterStatus(status) },
{ province: { nameEN: { contains: query } }, zipCode, status }, { province: { nameEN: { contains: query } }, zipCode, ...filterStatus(status) },
{ district: { name: { contains: query } }, zipCode, status }, { district: { name: { contains: query } }, zipCode, ...filterStatus(status) },
{ district: { nameEN: { contains: query } }, zipCode, status }, { district: { nameEN: { contains: query } }, zipCode, ...filterStatus(status) },
{ subDistrict: { name: { contains: query } }, zipCode, status }, { subDistrict: { name: { contains: query } }, zipCode, ...filterStatus(status) },
{ subDistrict: { nameEN: { contains: query } }, zipCode, status }, { subDistrict: { nameEN: { contains: query } }, zipCode, ...filterStatus(status) },
{ {
customer: { customer: {
OR: [{ customerName: { contains: query } }, { customerNameEN: { contains: query } }], OR: [{ customerName: { contains: query } }, { customerNameEN: { contains: query } }],

View file

@ -143,10 +143,17 @@ export class CustomerController extends Controller {
@Query() pageSize: number = 30, @Query() pageSize: number = 30,
@Query() includeBranch: boolean = false, @Query() includeBranch: boolean = false,
) { ) {
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: [
{ customerName: { contains: query }, customerType, status }, { customerName: { contains: query }, customerType, status, ...filterStatus(status) },
{ customerNameEN: { contains: query }, customerType, status }, { customerNameEN: { contains: query }, customerType, status, ...filterStatus(status) },
], ],
} satisfies Prisma.CustomerWhereInput; } satisfies Prisma.CustomerWhereInput;

View file

@ -234,12 +234,20 @@ 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 }, zipCode, gender, status }, { firstName: { contains: query }, zipCode, gender, ...filterStatus(status) },
{ firstNameEN: { contains: query }, zipCode, gender, status }, { firstNameEN: { contains: query }, zipCode, gender, ...filterStatus(status) },
{ lastName: { contains: query }, zipCode, gender, status }, { lastName: { contains: query }, zipCode, gender, ...filterStatus(status) },
{ lastNameEN: { contains: query }, zipCode, gender, status }, { lastNameEN: { contains: query }, zipCode, gender, ...filterStatus(status) },
], ],
} satisfies Prisma.EmployeeWhereInput; } satisfies Prisma.EmployeeWhereInput;

View file

@ -41,12 +41,22 @@ export class ProductGroup extends Controller {
} }
@Get() @Get()
async getProductGroup(@Query() query: string = "") { async getProductGroup(@Query() query: string = "", @Query() status?: Status) {
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: [{ name: { contains: query } }, { detail: { contains: query } }], OR: [
{ name: { contains: query }, ...filterStatus(status) },
{ detail: { contains: query }, ...filterStatus(status) },
],
} satisfies Prisma.ProductGroupWhereInput; } satisfies Prisma.ProductGroupWhereInput;
const result = prisma.productGroup.findMany({ orderBy: { createdAt: "asc" }, where }); return prisma.productGroup.findMany({ orderBy: { createdAt: "asc" }, where });
return result;
} }
@Get("{groupId}") @Get("{groupId}")

View file

@ -55,12 +55,24 @@ function imageLocation(id: string) {
export class ProductController extends Controller { export class ProductController extends Controller {
@Get() @Get()
async getProduct( async getProduct(
@Query() status?: Status,
@Query() query: string = "", @Query() query: string = "",
@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: [{ name: { contains: query } }, { detail: { contains: query } }], OR: [
{ name: { contains: query }, ...filterStatus(status) },
{ detail: { contains: query }, ...filterStatus(status) },
],
} satisfies Prisma.ProductWhereInput; } satisfies Prisma.ProductWhereInput;
const [result, total] = await prisma.$transaction([ const [result, total] = await prisma.$transaction([

View file

@ -43,10 +43,24 @@ export class ProductType extends Controller {
} }
@Get() @Get()
async getProductType(@Query() query: string = "", @Query() productGroupId?: string) { async getProductType(
@Query() query: string = "",
@Query() productGroupId?: string,
@Query() status?: Status,
) {
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 = {
AND: { productGroupId }, AND: { productGroupId },
OR: [{ name: { contains: query } }, { detail: { contains: query } }], OR: [
{ name: { contains: query }, ...filterStatus(status) },
{ detail: { contains: query }, ...filterStatus(status) },
],
} satisfies Prisma.ProductTypeWhereInput; } satisfies Prisma.ProductTypeWhereInput;
const result = prisma.productType.findMany({ orderBy: { createdAt: "asc" }, where }); const result = prisma.productType.findMany({ orderBy: { createdAt: "asc" }, where });
return result; return result;