type SmartQueryWhere = Record>; type SmartQueryCriteria = { order?: unknown[]; where?: SmartQueryWhere; }; /** * 自动根据 req.query 生成 sequelize 查询条件, 自动判断参数清单中是否有值 */ export default class SmartQuery { query: Record; /** WHERE 查询条件 */ where: SmartQueryWhere; /** * 排序列表 */ order: unknown[]; constructor(query: Record); /** * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加全等查询条件 * @param paramName query 中的参数名称 * @param fieldName 对应的数据库字段名称,默认与 paramName 一致 * @param defaultValue 当 query 中不包含 paramName 或为空时,使用该值 */ equal(paramName: string, fieldName?: string, defaultValue?: unknown): this; /** * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 in 查询条件, 值可以为 `delimiter` 分割的字符串或者数组 * @param paramName query 中的参数名称 * @param [fieldName=paramName] 对应的数据库字段名称,默认与 paramName 一致 * @param [defaultValue=null] 当 query 中不包含 paramName 或为空时,使用该值 * @param [delimiter=,] 当值为字符串时的分隔符,默认为 , */ in(paramName: string, fieldName?: string, defaultValue?: unknown, delimiter?: string): this; /** * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 not in 查询条件, 值可以为 `delimiter` 分割的字符串或者数组 * @param paramName query 中的参数名称 * @param [fieldName=paramName] 对应的数据库字段名称,默认与 paramName 一致 * @param [defaultValue=null] 当 query 中不包含 paramName 或为空时,使用该值 * @param [delimiter=,] 当值为字符串时的分隔符,默认为 , */ notIn(paramName: string, fieldName?: string, defaultValue?: unknown, delimiter?: string): this; /** * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 LIKE 查询条件,并自动在值的头尾添加 % * @param paramName query 中的参数名称 * @param fieldName 对应的数据库字段名称,默认与 paramName 一致 * @param defaultValue 当 query 中不包含 paramName 或为空时,使用该值 */ like(paramName: string, fieldName?: string, defaultValue?: unknown): this; /** * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 LIKE 查询条件,并自动在值的尾部添加 % * @param paramName query 中的参数名称 * @param fieldName 对应的数据库字段名称,默认与 paramName 一致 * @param defaultValue 当 query 中不包含 paramName 或为空时,使用该值 */ startsWith(paramName: string, fieldName?: string, defaultValue?: unknown): this; /** * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 LIKE 查询条件,并自动在值的头部添加 % * @param paramName query 中的参数名称 * @param fieldName 对应的数据库字段名称,默认与 paramName 一致 * @param defaultValue 当 query 中不包含 paramName 或为空时,使用该值 */ endsWith(paramName: string, fieldName?: string, defaultValue?: unknown): this; /** * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 >= 查询条件 * @param paramName query 中的参数名称 * @param fieldName 对应的数据库字段名称,默认与 paramName 一致 * @param defaultValue 当 query 中不包含 paramName 或为空时,使用该值 */ gte(paramName: string, fieldName?: string, defaultValue?: unknown): this; /** * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 <= 查询条件 * @param paramName query 中的参数名称 * @param fieldName 对应的数据库字段名称,默认与 paramName 一致 * @param defaultValue 当 query 中不包含 paramName 或为空时,使用该值 */ lte(paramName: string, fieldName?: string, defaultValue?: unknown): this; /** * 当 query 中包含名为 minParamName 的属性时,为 fieldName 添加 >= 查询条件, * 当 query 中包含名为 maxParamName 的属性时,为 fieldName 添加 <= 查询条件 * @param minParamName query 中的最小值参数名称 * @param maxParamName query 中的最大值参数名称 * @param fieldName 对应的数据库字段名称 * @param minDefault 当 query 中不包含 minParamName 或为空时,使用该值作为默认值 * @param maxDefault 当 query 中不包含 maxParamName 或为空时,使用该值作为默认值 */ range(minParamName: string, maxParamName: string, fieldName: string, minDefault?: unknown, maxDefault?: unknown): this; /** * 当 query 中包含名为 minParamName 的属性时,为 fieldName 添加 >= 查询条件并将时分秒设为0格式化到 targetFormat , * 当 query 中包含名为 maxParamName 的属性时,为 fieldName 添加 <= 查询条件并将时分秒分别设为 23:59:59 后格式化到 targetFormat * @param minParamName query 中的最小值参数名称 * @param maxParamName query 中的最大值参数名称 * @param fieldName 对应的数据库字段名称 * @param [minDefault=null] 当 query 中不包含 minParamName 或为空时,使用该值作为默认值 * @param [maxDefault=null] 当 query 中不包含 maxParamName 或为空时,使用该值作为默认值 * @param [sourceFormat='YYYY-MM-DD'] 原值时间格式 * @param [targetFormat='X'] 数据库时间格式 */ dateRange(minParamName: string, maxParamName: string, fieldName: string, minDefault?: string | null, maxDefault?: string | null, sourceFormat?: string, targetFormat?: string): this; /** * 当 query 中包含名为 minParamName 的属性时,为 fieldName 添加 >= 查询条件并格式化到 targetFormat , * 当 query 中包含名为 maxParamName 的属性时,为 fieldName 添加 <= 查询条件并并格式化到 targetFormat * @param minParamName query 中的最小值参数名称 * @param maxParamName query 中的最大值参数名称 * @param fieldName 对应的数据库字段名称 * @param [minDefault=null] 当 query 中不包含 minParamName 或为空时,使用该值作为默认值 * @param [maxDefault=null] 当 query 中不包含 maxParamName 或为空时,使用该值作为默认值 * @param [sourceFormat='YYYY-MM-DD HH:mm:ss'] 原值时间格式 * @param [targetFormat='X'] 数据库时间格式 */ dateTimeRange(minParamName: string, maxParamName: string, fieldName: string, minDefault?: string | null, maxDefault?: string | null, sourceFormat?: string, targetFormat?: string): this; /** * 处理用户的排序请求 * @param [autoMapping=[]] 根据字段名自动排序,数组成员为字段名,每个字段名自动生成正反序, * 如 `created_at` 生成 `created_at` 正序和 `-created_at` 倒序 * @param [manualMapping={}] * @param [defaultOrder=null] 默认排序,当 query 中不包含 `paramName` 属性时使用。如不设置则为 `autoMapping` 的第一个字段的倒序 * @param [paramName='order'] 参数名称 */ orderable(autoMapping?: string[], manualMapping?: Record, defaultOrder?: unknown, paramName?: string): this; /** * 获取完整的有效查询参数 */ getCriteria(): SmartQueryCriteria; /** * 当 query 中包含名为 paramName 的属性时,为 fieldName 添加 in 或 not in 查询条件, 值可以为 `delimiter` 分割的字符串或者数组 * @protected * @param paramName query 中的参数名称 * @param fieldName 对应的数据库字段名称 * @param [defaultValue=null] 当 query 中不包含 paramName 或为空时,使用该值 * @param [delimiter=,] 当值为字符串时的分隔符,默认为 , * @param [negation=false] 是否取反,为 true 时使用 $notIn */ applyIn(paramName: string, fieldName: string, defaultValue?: unknown, delimiter?: string, negation?: boolean): this; /** * 添加 where * * @protected */ applyWhere(filedName: string, predicate: string, value: unknown): void; /** * 判定指定名称的参数是否有效 */ determineParam(paramName: string): boolean; } export {};