localhost_oa_based/src/shared/database/field-search/index.ts

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;
};