import { isNumber } from 'lodash'; import { Between, Like, ObjectLiteral, ObjectType } from 'typeorm'; export const fieldSearch = (entity: Partial): 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; };