Skip to content

Commit 5108f3e

Browse files
committed
docs: cursor rules
1 parent e55880b commit 5108f3e

10 files changed

+606
-4
lines changed

.cursor/rules/common-package.mdc

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
description:
3+
globs:
4+
alwaysApply: false
5+
---
6+
# Common Package
7+
8+
[packages/common](mdc:packages/common) 是项目的公共包,包含各种共享工具和功能。
9+
10+
## 主要组件
11+
12+
### Composables
13+
14+
[packages/common/src/composable](mdc:packages/common/src/composable) 包含可复用的组合式函数:
15+
16+
- **useConfig.ts**: [packages/common/src/composable/useConfig.ts](mdc:packages/common/src/composable/useConfig.ts) 配置管理函数
17+
18+
### Helper 工具
19+
20+
[packages/common/src/helper](mdc:packages/common/src/helper) 包含各种辅助工具函数:
21+
22+
- **logger.ts**: [packages/common/src/helper/logger.ts](mdc:packages/common/src/helper/logger.ts) 日志记录工具
23+
- **config-schema.ts**: [packages/common/src/helper/config-schema.ts](mdc:packages/common/src/helper/config-schema.ts) 配置模式定义
24+
- **default-config.ts**: [packages/common/src/helper/default-config.ts](mdc:packages/common/src/helper/default-config.ts) 默认配置
25+
26+
## Logger 使用
27+
28+
日志工具 `useLogger()` 基于 @guiiai/logg 构建,提供了便捷的日志记录功能:
29+
30+
```ts
31+
import { useLogger } from 'packages/common'
32+
33+
// 基本使用
34+
useLogger().log('日志消息')
35+
36+
// 带字段记录
37+
useLogger().withFields({ user: 'admin', action: 'login' }).info('用户登录')
38+
39+
// 错误记录
40+
useLogger().withErr(new Error('失败原因')).error('操作失败')
41+
```
42+
43+
自动收集调用位置信息,无需手动指定日志来源。

.cursor/rules/core-package.mdc

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
---
2+
description:
3+
globs:
4+
alwaysApply: false
5+
---
6+
# Core Package
7+
8+
[packages/core](mdc:packages/core) 是项目的核心包,负责与 Telegram API 的交互以及数据库操作。
9+
10+
## 主要组件
11+
12+
- **Models**: [packages/core/src/models](mdc:packages/core/src/models) 包含了数据模型定义
13+
- [chat-message.ts](mdc:packages/core/src/models/chat-message.ts): 聊天消息模型
14+
- [chats.ts](mdc:packages/core/src/models/chats.ts): 聊天会话模型
15+
- [common.ts](mdc:packages/core/src/models/common.ts): 通用模型定义
16+
17+
- **Services**: [packages/core/src/services](mdc:packages/core/src/services) 包含核心服务
18+
- [connection.ts](mdc:packages/core/src/services/connection.ts): Telegram 连接管理
19+
- [message.ts](mdc:packages/core/src/services/message.ts): 消息处理服务
20+
- [dialog.ts](mdc:packages/core/src/services/dialog.ts): 对话服务
21+
- [session.ts](mdc:packages/core/src/services/session.ts): 会话管理
22+
23+
- **Database**: [packages/core/src/db](mdc:packages/core/src/db) 包含数据库相关代码
24+
- [schema.ts](mdc:packages/core/src/db/schema.ts): 数据库表结构
25+
26+
- **事件处理**: [packages/core/src/event-handler.ts](mdc:packages/core/src/event-handler.ts) 和 [packages/core/src/event-handlers](mdc:packages/core/src/event-handlers) 负责事件处理
27+
28+
## 上下文管理
29+
30+
[context.ts](mdc:packages/core/src/context.ts) 提供了应用的上下文管理,包括 Telegram 客户端实例和数据库连接。

.cursor/rules/database-schema.mdc

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
---
2+
description:
3+
globs:
4+
alwaysApply: false
5+
---
6+
# 数据库结构
7+
8+
数据库使用 PostgreSQL 和 Drizzle ORM。主要表结构定义位于 [packages/core/src/db/schema.ts](mdc:packages/core/src/db/schema.ts)。
9+
10+
## 主要表
11+
12+
### 消息表
13+
14+
[chatMessagesTable](mdc:packages/core/src/db/schema.ts) 存储所有聊天消息。
15+
16+
关键字段:
17+
- `id`: UUID 主键
18+
- `platform`: 平台标识 (Telegram)
19+
- `platform_message_id`: 平台消息 ID
20+
- `from_id`: 发送者 ID
21+
- `from_name`: 发送者名称
22+
- `in_chat_id`: 聊天会话 ID
23+
- `content`: 消息内容
24+
- `content_vector_1536/1024/768`: 向量索引,用于语义搜索
25+
26+
### 贴纸表
27+
28+
[stickersTable](mdc:packages/core/src/db/schema.ts) 存储贴纸数据。
29+
30+
关键字段:
31+
- `id`: UUID 主键
32+
- `name`: 贴纸名称
33+
- `emoji`: 关联表情
34+
- `file_id`: 文件 ID
35+
- `description`: 描述
36+
- `description_vector_1536/1024/768`: 向量索引,用于语义搜索
37+
38+
### 贴纸包表
39+
40+
[stickerPacksTable](mdc:packages/core/src/db/schema.ts) 存储贴纸包信息。
41+
42+
### 照片表
43+
44+
[photosTable](mdc:packages/core/src/db/schema.ts) 存储图片数据。
45+
46+
关键字段:
47+
- `file_id`: 文件 ID
48+
- `caption`: 图片标题
49+
- `description`: 描述
50+
- `description_vector_1536/1024/768`: 向量索引,用于语义搜索
51+
52+
### 聊天会话表
53+
54+
[joinedChatsTable](mdc:packages/core/src/db/schema.ts) 存储已加入的聊天会话。
55+
56+
关键字段:
57+
- `chat_id`: 会话 ID
58+
- `chat_name`: 会话名称
59+
- `chat_type`: 会话类型 (user/channel/group)
60+
61+
## 视图
62+
63+
[chatMessageStatsView](mdc:packages/core/src/db/schema.ts) 提供聊天统计信息,包括每个聊天的消息数量和最新消息时间。
64+
65+
## 向量搜索
66+
67+
数据库支持使用 pgvector 进行向量搜索,各表都有相应的向量字段和索引:
68+
- 消息内容向量索引
69+
- 贴纸描述向量索引
70+
- 图片描述向量索引
+140
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
---
2+
description:
3+
globs:
4+
alwaysApply: false
5+
---
6+
# 开发工作流
7+
8+
项目使用 pnpm 作为包管理器,采用 monorepo 结构组织代码。开发流程和命令定义在 [package.json](mdc:package.json) 中。
9+
10+
## 环境设置
11+
12+
1. 安装依赖:
13+
14+
```bash
15+
# 使用 pnpm 安装项目依赖
16+
pnpm install
17+
18+
# 如果安装了 ni,也可以使用更简洁的命令
19+
# ni
20+
```
21+
22+
2. 配置环境:
23+
24+
```bash
25+
# 复制配置示例
26+
cp config/config.example.yaml config/config.yaml
27+
28+
# 编辑配置文件,填入 Telegram API 凭据
29+
```
30+
31+
3. 启动数据库:
32+
33+
```bash
34+
# 启动 PostgreSQL 容器
35+
docker compose up -d
36+
```
37+
38+
4. 初始化数据库:
39+
40+
```bash
41+
# 运行数据库迁移(使用 pnpm)
42+
pnpm run db migrate
43+
44+
# 如果安装了 nr,可以使用更简洁的命令
45+
# nr db migrate
46+
```
47+
48+
## 开发命令
49+
50+
### 构建
51+
52+
```bash
53+
# 构建所有包
54+
pnpm run build
55+
# 或使用 nr:nr build
56+
57+
# 构建特定包
58+
pnpm run packages:build
59+
# 或使用 nr:nr packages:build
60+
61+
# 构建服务器
62+
pnpm run build:server
63+
# 或使用 nr:nr build:server
64+
```
65+
66+
### 开发服务
67+
68+
```bash
69+
# 启动后端服务
70+
pnpm run dev:server
71+
# 或使用 nr:nr dev:server
72+
73+
# 启动前端开发服务器
74+
pnpm run dev:frontend
75+
# 或使用 nr:nr dev:frontend
76+
```
77+
78+
### 数据库操作
79+
80+
```bash
81+
# 生成迁移
82+
pnpm run db generate
83+
# 或使用 nr:nr db generate
84+
85+
# 应用迁移
86+
pnpm run db migrate
87+
# 或使用 nr:nr db migrate
88+
89+
# 检查迁移状态
90+
pnpm run db status
91+
# 或使用 nr:nr db status
92+
```
93+
94+
### 代码质量
95+
96+
```bash
97+
# 运行 ESLint
98+
pnpm run lint
99+
# 或使用 nr:nr lint
100+
101+
# 修复 ESLint 问题
102+
pnpm run lint:fix
103+
# 或使用 nr:nr lint:fix
104+
105+
# 类型检查
106+
pnpm run typecheck
107+
# 或使用 nr:nr typecheck
108+
109+
# 运行测试
110+
pnpm run test
111+
# 或使用 nr:nr test
112+
113+
# 生成测试覆盖率报告
114+
pnpm run test:coverage
115+
# 或使用 nr:nr test:coverage
116+
```
117+
118+
### 版本管理
119+
120+
```bash
121+
# 更新版本号
122+
pnpm run bump
123+
# 或使用 nr:nr bump
124+
125+
# 更新依赖版本
126+
pnpm run bump:deps
127+
# 或使用 nr:nr bump:deps
128+
```
129+
130+
## 代码提交
131+
132+
项目使用 Husky 和 lint-staged 确保提交前进行代码检查:
133+
134+
```bash
135+
# 提交代码
136+
git add .
137+
git commit -m "feat: 添加新功能"
138+
```
139+
140+
提交前会自动运行 ESLint 检查。

.cursor/rules/event-handlers.mdc

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
---
2+
description:
3+
globs:
4+
alwaysApply: false
5+
---
6+
# 事件处理系统
7+
8+
项目使用基于事件的架构进行模块间通信。事件处理系统实现位于 [packages/core/src/event-handler.ts](mdc:packages/core/src/event-handler.ts) 和 [packages/core/src/event-handlers/](mdc:packages/core/src/event-handlers/) 目录。
9+
10+
## 事件处理器结构
11+
12+
事件处理器负责连接不同服务,并处理它们之间的通信。主要分为两类:
13+
14+
1. **认证事件处理器** (`authEventHandler`): 处理连接和会话相关事件
15+
2. **连接后事件处理器** (`afterConnectedEventHandler`): 处理认证成功后的事件
16+
17+
## 主要事件处理器
18+
19+
项目包含多个专门的事件处理器模块:
20+
21+
- [auth.ts](mdc:packages/core/src/event-handlers/auth.ts): 处理认证事件
22+
- [session.ts](mdc:packages/core/src/event-handlers/session.ts): 处理会话事件
23+
- [message.ts](mdc:packages/core/src/event-handlers/message.ts): 处理消息事件
24+
- [dialog.ts](mdc:packages/core/src/event-handlers/dialog.ts): 处理对话事件
25+
- [entity.ts](mdc:packages/core/src/event-handlers/entity.ts): 处理实体事件
26+
- [takeout.ts](mdc:packages/core/src/event-handlers/takeout.ts): 处理导出事件
27+
- [storage.ts](mdc:packages/core/src/event-handlers/storage.ts): 处理存储事件
28+
- [config.ts](mdc:packages/core/src/event-handlers/config.ts): 处理配置事件
29+
30+
## 事件处理流程
31+
32+
1. 初始化核心上下文 (`CoreContext`)
33+
2. 注册事件处理器
34+
3. 处理器监听特定事件
35+
4. 服务发出事件
36+
5. 处理器接收并处理事件,可能调用其他服务或发出新事件
37+
38+
## 使用方式
39+
40+
### 注册事件处理器
41+
42+
```ts
43+
import { useEventHandler, authEventHandler, afterConnectedEventHandler } from '@tg-search/core'
44+
import { useConfig } from '@tg-search/common'
45+
46+
const ctx = createCoreContext()
47+
const config = useConfig()
48+
const eventHandler = useEventHandler(ctx, config)
49+
50+
// 注册认证事件处理器
51+
eventHandler.register(authEventHandler)
52+
53+
// 注册连接后事件处理器
54+
eventHandler.register(afterConnectedEventHandler)
55+
```
56+
57+
### 创建自定义事件处理器
58+
59+
```ts
60+
function customEventHandler(ctx: CoreContext, config: Config): EventHandler {
61+
const { emitter } = ctx
62+
63+
// 注册事件监听
64+
emitter.on('custom:event', (data) => {
65+
// 处理事件
66+
console.log('收到自定义事件:', data)
67+
68+
// 可能发出其他事件
69+
emitter.emit('custom:response', { success: true })
70+
})
71+
72+
return () => {}
73+
}
74+
```
75+
76+
## 解析器注册
77+
78+
事件处理系统与解析器注册表集成,用于管理特定类型的解析器:
79+
80+
```ts
81+
// 在连接后注册解析器
82+
registry.register('embedding', createEmbeddingResolver())
83+
registry.register('link', createLinkResolver())
84+
registry.register('user', createUserResolver())
85+
```

0 commit comments

Comments
 (0)