// 规则页纯逻辑:四级合并展示、请求体组装、级别文案。 // 对齐 C3 扩(GET/POST .../rules)。纯逻辑,便于 node 环境单测。 import type { RuleCreateRequest, RuleView } from "@/lib/api/types"; // 四级规则(global→genre→style→project,越具体越优先;对齐后端 RuleCreateRequest Literal)。 export type RuleLevel = "global" | "genre" | "style" | "project"; export const RULE_LEVELS: readonly RuleLevel[] = [ "global", "genre", "style", "project", ] as const; export const RULE_LEVEL_LABELS: Record = { global: "全局", genre: "题材", style: "文风", project: "本作", }; export function isRuleLevel(v: string): v is RuleLevel { return ( v === "global" || v === "genre" || v === "style" || v === "project" ); } export type RuleGroups = Record; function emptyGroups(): RuleGroups { return { global: [], genre: [], style: [], project: [] }; } // 按 level 分组(未知 level 落 project 兜底,保持服务端顺序)。 export function groupByLevel( rules: readonly RuleView[] | undefined, ): RuleGroups { const groups = emptyGroups(); for (const rule of rules ?? []) { const level = isRuleLevel(rule.level) ? rule.level : "project"; groups[level] = [...groups[level], rule]; } return groups; } // 组装新增规则请求体(去空白)。 export function buildRuleCreateRequest( level: RuleLevel, content: string, ): RuleCreateRequest { return { level, content: content.trim() }; } // 内容是否可提交(非空白)。 export function hasUsableContent(content: string): boolean { return content.trim().length > 0; }