origin/apps/web/src/components/models/post/PostSelect/utils.ts

47 lines
1.2 KiB
TypeScript
Executable File

type PrismaCondition = Record<string, any>;
type SafeOROptions = {
/**
* 当所有条件为空时的处理方式
* @default 'return-undefined' 返回 undefined (等效查询所有)
* 'throw-error' 抛出错误
* 'return-empty' 返回空对象
*/
emptyBehavior?: "return-undefined" | "throw-error" | "return-empty";
};
/**
* 安全合并多个查询条件为 OR 关系
* @param conditions 多个查询条件
* @param options 配置选项
* @returns 安全的 Prisma WHERE 条件
*/
const safeOR = (
conditions: PrismaCondition[],
options?: SafeOROptions
): PrismaCondition | undefined => {
const { emptyBehavior = "return-undefined" } = options || {};
// 过滤空条件和无效值
const validConditions = conditions.filter(
(cond) => cond && Object.keys(cond).length > 0
);
// 处理全空情况
if (validConditions.length === 0) {
switch (emptyBehavior) {
case "throw-error":
throw new Error("No valid conditions provided to OR query");
case "return-empty":
return {};
case "return-undefined":
default:
return undefined;
}
}
// 优化单条件查询
return validConditions.length === 1
? validConditions[0]
: { OR: validConditions };
};