app-template/packages/models/AGENTS.md

47 lines
1.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AGENTS.md — @app/models
## 职责
**Drizzle ORM 表定义**(数据库 schema 的唯一源)。只描述表结构与行类型,不含连接、查询逻辑或迁移脚本。
## 结构
```
src/
users.ts # users + User / NewUser
sessions.ts # sessions + Session / NewSession
password-resets.ts # passwordResets + PasswordReset / NewPasswordReset
mounts.ts # mounts(网盘挂载:WebDAV 等)+ Mount / NewMount
media-items.ts # mediaItems(媒体条目,唯一键含 mountId)+ MediaItem / NewMediaItem
playback-progress.ts # playbackProgress(观看进度)
danmaku-cache.ts # danmakuCache(弹幕缓存行)
index.ts # 重导出全部表与行类型
```
域划分:**账户域**(users / sessions / password-resets)与**媒体域**(mounts / media-items / playback-progress / danmaku-cache)。
## 约定
- 表用 `sqliteTable`(Turso/libSQL)。主键默认 `text` + `crypto.randomUUID()`。
- 时间戳用 `integer(..., { mode: "timestamp" })`,默认 `unixepoch()`。
- 同步导出 `$inferSelect` / `$inferInsert` 类型(如 `User`、`NewUser`)。
- `mediaItems` 唯一约束含 `mountId`(同路径可存在于不同挂载)。
## 修改指南
- **加表/改列**:改这里 → `yarn workspace @app/db db:generate`(或 `db:push`)→ 更新 `@app/dao` 对应 dao。
- 查询写在 `@app/dao`,不在本包写 `db.select`。
- 不要引入 `@libsql/client` 或环境变量;本包保持纯 schema。
- 重命名/删除列是破坏性变更:先确认无 dao/service/API 依赖,再生成迁移。
- 新表在 `index.ts` 重导出表 + 行类型,保持命名 `xxx` / `Xxx` / `NewXxx`。
## 命令
```bash
yarn workspace @app/models typecheck
yarn workspace @app/models build
# schema 变更后的迁移在 @app/db:
yarn db:generate
yarn db:push
```