1.5 KiB
1.5 KiB
AGENTS.md — @app/dao
职责
数据访问层(DAO):封装 Drizzle 查询。service 只调本包,不直接 db.select。不含业务规则、HTTP/tRPC。
结构
src/
index.ts # 出口:daos + 行类型
users.ts # userDao
sessions.ts # sessionDao
password-resets.ts # passwordResetDao
mounts.ts # mountDao
media-items.ts # mediaItemDao
playback-progress.ts # playbackProgressDao
danmaku-cache.ts # danmakuCacheDao
依赖
@app/db:db单例(连接)@app/models:表定义与$infer*行类型
约定
- 一表一个 dao 对象;方法名
list/getById/create/update/delete(媒体域可加getByPath、upsert等,但保持动词清晰)。 exactOptionalPropertyTypes:update 入参用Partial<Omit<Row, "id" | "createdAt" | "updatedAt">>。noUncheckedIndexedAccess:returning()[0]判空后抛错或?? null。- 不读 env、不建 client;环境变量校验在
@app/db。 - 分页/过滤等查询参数类型一并从本包导出(如
ListUsersParams)。
修改指南
- 加查询:新建或扩展对应
*.ts,在index.ts导出。 - 新表:先改
@app/models→yarn db:generate/db:push→ 本包加 dao。 - 媒体域查询注意
mediaItems唯一键含mountId,按路径查找时必须带挂载维度。
命令
yarn workspace @app/dao typecheck
yarn workspace @app/dao build