36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
import { isNumber } from 'lodash';
|
|
import { Between, Like, ObjectLiteral, ObjectType } from 'typeorm';
|
|
export const fieldSearch = <T>(entity: Partial<T>): ObjectLiteral => {
|
|
let result = {};
|
|
for (let key in entity) {
|
|
if (entity.hasOwnProperty(key)) {
|
|
switch (typeof entity[key]) {
|
|
case 'number':
|
|
result = { ...result, ...(isNumber(entity[key]) ? { [key]: entity[key] } : null) };
|
|
break;
|
|
case 'string':
|
|
result = { ...result, ...(entity[key] ? { [key]: Like(`%${entity[key]}%`) } : null) };
|
|
break;
|
|
case 'boolean':
|
|
result = { ...result, ...(entity[key] === true ? { [key]: 1 } : { [key]: 0 }) };
|
|
break;
|
|
case 'object':
|
|
if (Array.isArray(entity[key])) {
|
|
result = {
|
|
...result,
|
|
...(entity[key] && { createdAt: Between(entity[key][0], entity[key][1]) })
|
|
};
|
|
} else {
|
|
// Handle other object types
|
|
}
|
|
break;
|
|
|
|
default:
|
|
result = { ...result, ...(entity[key] ? { [key]: entity[key] } : null) };
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
};
|