forked from EduCraft/curriculum-project-hub
b4dd8f09e1
按 ADR-0001..0004/0017 重塑 schema,非照搬旧服务: - ADR-0001: ProjectGroupBinding project↔chat 1:1(chatId @unique 钉单射不变式) - ADR-0002: ProjectAgentLock projectId @id(at-most-one)+runId @unique;holder=run 非 session - ADR-0004: PermissionGrant(resource×principal×role)+PermissionSettings(六旋钮)新落; PermissionRole=read/edit/manage 与 PlatformRole=admin/teacher 分离(旧 schema 混淆了) - ADR-0017: AgentSession 无 claudeSessionId,改 provider+model(切 model 即新 session) - RunState 对齐 spec:加 WAITING_FOR_USER/TIMED_OUT(枚举完整性 OPEN) - Audit:runId 是 PINNED 关系,其余 OPEN 旧 schema 的 FeishuProjectBinding(user/chat 混表)拆为单一 ProjectGroupBinding。 prisma validate 通过;generate 通过;tsc --noEmit rc=0; 类型级 schema 约束检查全部通过(ADR-0002 主键/唯一、ADR-0017 无 claudeSessionId 等)。
22 lines
744 B
TypeScript
22 lines
744 B
TypeScript
/**
|
|
* Prisma client singleton.
|
|
*
|
|
* Prisma's client is a connection-pooled datasource; constructing it per-query
|
|
* exhausts connections. This module exports one shared instance per process.
|
|
* Hot-reload (tsx watch) can re-import this module — the global guard prevents
|
|
* a second PrismaClient from being created.
|
|
*/
|
|
import { PrismaClient } from "@prisma/client";
|
|
|
|
const globalForPrisma = globalThis as unknown as { __hubPrisma?: PrismaClient };
|
|
|
|
export const prisma: PrismaClient =
|
|
globalForPrisma.__hubPrisma ??
|
|
new PrismaClient({
|
|
log: process.env["HUB_PRISMA_LOG"] !== undefined ? ["query", "error", "warn"] : ["error", "warn"],
|
|
});
|
|
|
|
if (process.env["NODE_ENV"] !== "production") {
|
|
globalForPrisma.__hubPrisma = prisma;
|
|
}
|