docs: 添加 PostgREST 使用情况分析和删除确认功能文档

1. PostgREST 使用情况分析文档
   - PostgREST使用情况-后端API替代建议.md: 完整的迁移建议和优先级分析
   - PostgREST实际使用清单.md: 当前使用的 PostgREST 接口清单
   - PostgREST未使用函数清单.md: 已封装但未使用的函数列表
   - PostgREST请求模块清单.md: 所有请求模块的使用情况

2. 删除操作延迟确认功能实施文档
   - 功能设计和实现细节
   - 使用示例和最佳实践
   - 技术实现说明

这些文档用于:
- 追踪 PostgREST 到 FastAPI 的迁移进度
- 指导后续的接口迁移工作
- 记录 UI 改进的实施细节

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-25 18:18:20 +08:00
parent 7c47b11ec7
commit 3d6305376b
5 changed files with 3640 additions and 0 deletions
+348
View File
@@ -0,0 +1,348 @@
# PostgREST 未使用函数清单
> **本文档记录所有定义了但未被实际引用的 PostgREST 相关函数**
> **更新时间**: 2025-11-25
---
## 📋 目录
- [完全未使用的函数](#完全未使用的函数)
- [仅内部使用的函数](#仅内部使用的函数)
- [建议的清理操作](#建议的清理操作)
---
## 完全未使用的函数
这些函数被导出但在整个项目中没有任何地方调用。
### 1. ❌ `getUserBySub()`
**文件**: `app/api/login/auth.server.ts`
**行号**: 746
**PostgREST 操作**: `postgrestGet`
**表名**: `sso_users`
```typescript
export async function getUserBySub(sub: string) {
const userResult = await postgrestGet<SsoUser[]>("sso_users", {
filter: { sub: `eq.${sub}` }
});
// ...
}
```
**搜索结果**: 只在定义文件中出现 1 次
**建议**: 🗑️ **可以删除**
---
### 2. ❌ `getDocumentHistory()`
**文件**: `app/api/files/documents.ts`
**行号**: 665
**PostgREST 操作**: `postgrestPost` (RPC)
**RPC 函数**: `rpc/documents_get_document_history`
```typescript
export async function getDocumentHistory(
documentName: string,
userId: string,
excludeId: number,
token?: string
): Promise<{data?: DocumentVersionUI[]; error?: string; status?: number}> {
const response = await postgrestPost<any[], unknown>(
'rpc/documents_get_document_history',
{ p_document_name, p_user_id, p_exclude_id },
token
);
// ...
}
```
**搜索结果**: routes 和 components 中 0 次引用
**建议**: 🗑️ **可以删除** (新API已改用 `/admin/versions/documents-list`
---
### 3. ❌ `duplicateRule()`
**文件**: `app/api/evaluation_points/rules.ts`
**行号**: 740
**PostgREST 操作**: `postgrestGet` + `postgrestPost`
**表名**: `evaluation_points`
```typescript
export async function duplicateRule(id: string, token?: string): Promise<{
data: Rule;
error?: never
} | {
data?: never;
error: string;
status?: number
}> {
// 1. 获取原规则
const originalRule = await postgrestGet(...);
// 2. 创建副本
const result = await postgrestPost(...);
// ...
}
```
**搜索结果**: 只在定义文件中出现 1 次
**建议**: 🔄 **保留但标记为未来功能** (复制功能可能有计划)
---
### 4. ❌ `getEvaluationPointGroupsByIds()`
**文件**: `app/api/document-types/document-types.ts`
**行号**: 245
**PostgREST 操作**: `postgrestGet`
**表名**: `evaluation_point_groups`
```typescript
export async function getEvaluationPointGroupsByIds(
ids: number[] | number,
token?: string
): Promise<{
data: EvaluationPointGroup[];
error?: never
} | {
data?: never;
error: string;
status?: number
}> {
const response = await postgrestGet<EvaluationPointGroup[]>(
"evaluation_point_groups",
{
filter: { id: `in.(${idsArray.join(',')})` },
token
}
);
// ...
}
```
**搜索结果**: 只在定义文件中出现 5 次(都是定义和类型导出)
**建议**: 🗑️ **可以删除**
---
### 5. ❌ `createSimpleUserSession()`
**文件**: `app/api/login/auth.server.ts`
**行号**: 412
**PostgREST 操作**: 无(仅 session 管理)
```typescript
export async function createSimpleUserSession(
isAuthenticated: boolean,
userRole: UserRole,
redirectTo: string
) {
const session = await sessionStorage.getSession();
session.set("isAuthenticated", isAuthenticated);
session.set("userRole", userRole);
// ...
}
```
**搜索结果**: 只在定义文件中出现 1 次
**建议**: 🗑️ **可以删除** (已统一使用 `createUserSession`
---
### 6. ❌ `getFeaturedTemplates()`
**文件**: `app/api/contract-template/templates.ts`
**行号**: 347
**PostgREST 操作**: `postgrestGet`
**表名**: `contract_templates`
```typescript
export async function getFeaturedTemplates(
limit: number = 6,
jwt?: string
) {
const response = await postgrestGet<ContractTemplate[]>(
'contract_templates',
{
filter: { is_featured: 'eq.true' },
order: 'created_at.desc',
limit: limit,
token: jwt
}
);
// ...
}
```
**搜索结果**: 只在定义文件中出现 1 次
**建议**: 🔄 **保留但标记为未来功能** (推荐模板功能可能有计划)
---
## 仅内部使用的函数
这些函数虽然被导出,但只在同一个文件内部被调用,不被其他文件引用。
### 7. ⚠️ `getEvaluationResults()`
**文件**: `app/api/files/documents.ts`
**行号**: 147-159
**PostgREST 操作**: `postgrestGet`
**表名**: `evaluation_results`
```typescript
async function getEvaluationResults(id: number, frontendJWT?: string) {
const response = await postgrestGet<[]>('evaluation_results', {
filter: { 'document_id': `eq.${id}` },
token: frontendJWT
});
// ...
}
```
**搜索结果**: 只在 `documents.ts` 内部被 `convertToUIDocument()` 调用
**建议**: ✅ **改为内部函数**(去掉 export
---
### 8. ⚠️ `convertToUIDocument()`
**文件**: `app/api/files/documents.ts`
**行号**: 165
**PostgREST 操作**: 调用 `getEvaluationResults()`
**表名**: 间接查询 `evaluation_results`
```typescript
async function convertToUIDocument(
doc: Document,
frontendJWT?: string
): Promise<DocumentUI> {
const evaluationResult = await getEvaluationResults(doc.id, frontendJWT);
// ...
}
```
**搜索结果**: 只在 `documents.ts` 内部被其他函数调用
**建议**: ✅ **改为内部函数**(去掉 export
---
### 9. ⚠️ `convertApiRuleToFormData()`
**文件**: `app/api/evaluation_points/rules.ts`
**行号**: 1079
**PostgREST 操作**: 无(数据转换函数)
```typescript
export function convertApiRuleToFormData(
apiRule: ApiRule
): FormattedEvaluationPoint {
// 数据格式转换
}
```
**搜索结果**: 只在定义文件中出现 4 次(内部调用)
**建议**: ✅ **改为内部函数**(去掉 export
---
### 10. ⚠️ `convertToUITemplate()`
**文件**: `app/api/prompts/prompts.ts`
**行号**: 102
**PostgREST 操作**: 无(数据转换函数)
```typescript
export function convertToUITemplate(
template: PromptTemplate & { sso_users?: { username: string } }
): PromptTemplateUI {
// 数据格式转换
}
```
**搜索结果**: 只在定义文件中出现 5 次(内部调用)
**建议**: ✅ **改为内部函数**(去掉 export
---
## 建议的清理操作
### 🗑️ 立即删除(6 个函数)
| 序号 | 函数名 | 文件 | 原因 |
|------|--------|------|------|
| 1 | `getUserBySub()` | `auth.server.ts` | 完全未使用 |
| 2 | `getDocumentHistory()` | `documents.ts` | 已被新 API 替代 |
| 3 | `getEvaluationPointGroupsByIds()` | `document-types.ts` | 完全未使用 |
| 4 | `createSimpleUserSession()` | `auth.server.ts` | 已统一使用 `createUserSession` |
| 5 | ~~`duplicateRule()`~~ | `rules.ts` | 保留(可能是未来功能) |
| 6 | ~~`getFeaturedTemplates()`~~ | `templates.ts` | 保留(可能是未来功能) |
**实际建议删除**: **4 个函数**
---
### ✅ 改为私有函数(4 个函数)
将这些仅内部使用的函数改为非导出(去掉 `export` 关键字):
| 序号 | 函数名 | 文件 | 操作 |
|------|--------|------|------|
| 1 | `getEvaluationResults()` | `documents.ts` | 去掉 export |
| 2 | `convertToUIDocument()` | `documents.ts` | 去掉 export |
| 3 | `convertApiRuleToFormData()` | `rules.ts` | 去掉 export |
| 4 | `convertToUITemplate()` | `prompts.ts` | 去掉 export |
---
## 🔄 保留但标记的函数(2 个)
这些函数虽然当前未使用,但可能是计划中的功能:
| 序号 | 函数名 | 文件 | 建议 |
|------|--------|------|------|
| 1 | `duplicateRule()` | `rules.ts` | 添加 `@deprecated``@future` 注释 |
| 2 | `getFeaturedTemplates()` | `templates.ts` | 添加 `@deprecated``@future` 注释 |
---
## 📊 统计总结
| 类别 | 数量 |
|------|------|
| ❌ 完全未使用(建议删除) | 4 |
| ⚠️ 仅内部使用(改为私有) | 4 |
| 🔄 保留但标记 | 2 |
| **总计** | **10** |
---
## 🔍 检查方法
使用以下命令检查函数引用:
```bash
# 检查函数是否被引用(在 routes 和 components 中)
grep -r "函数名" app/routes app/components --include="*.ts" --include="*.tsx"
# 或使用 Grep 工具
Grep: pattern="函数名", glob="app/**/*.{ts,tsx}", output_mode="count"
```
---
## ⚠️ 注意事项
1. **删除前再次确认**: 虽然这些函数当前未被引用,但可能在其他分支或未来功能中需要
2. **Git 历史**: 删除前检查 Git 历史,看是否之前被使用过
3. **API 兼容性**: 如果这些函数是 API 的一部分,删除可能影响其他项目
4. **测试代码**: 检查测试文件中是否有引用(本次未扫描测试文件)
---
**维护建议**: 定期运行此检查,避免积累过多死代码。