3d6305376b
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>
1479 lines
39 KiB
Markdown
1479 lines
39 KiB
Markdown
# PostgREST 使用情况及后端 API 替代建议
|
||
|
||
> **本文档详细列出所有正在使用的 PostgREST 请求**
|
||
> **排除"评查点详情"相关的必须保留功能**
|
||
> **标注建议改为后端 API 的模块**
|
||
>
|
||
> **更新时间**: 2025-11-25
|
||
|
||
---
|
||
|
||
## 📋 图例说明
|
||
|
||
| 标记 | 含义 |
|
||
|------|------|
|
||
| 🔄 | **强烈建议**改为后端 API |
|
||
| ⚠️ | **建议评估**是否改为后端 API |
|
||
| ✅ | **保留** PostgREST(技术原因或低优先级) |
|
||
| 🔒 | **必须保留** PostgREST(评查点详情相关) |
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
1. [认证服务](#1-认证服务)
|
||
2. [首页与统计](#2-首页与统计)
|
||
3. [文档管理](#3-文档管理)
|
||
4. [文件上传](#4-文件上传)
|
||
5. [评查点管理](#5-评查点管理)
|
||
6. [评查点分组](#6-评查点分组)
|
||
7. [评查文件审核](#7-评查文件审核)
|
||
8. [评审结果](#8-评审结果)
|
||
9. [文档类型](#9-文档类型)
|
||
10. [入口模块](#10-入口模块)
|
||
11. [交叉评查](#11-交叉评查)
|
||
12. [提示词模板](#12-提示词模板)
|
||
13. [合同模板](#13-合同模板)
|
||
14. [汇总统计](#汇总统计)
|
||
|
||
---
|
||
|
||
## 1. 认证服务
|
||
|
||
**文件**: `app/api/login/auth.server.ts`
|
||
|
||
### 1.1 用户信息同步 - `saveUserInfo()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `saveUserInfo()` |
|
||
| **行号** | 551-681 |
|
||
| **PostgREST 操作** | `postgrestGet` + `postgrestPut` / `postgrestPost` |
|
||
| **表名** | `sso_users` |
|
||
| **功能** | OAuth 登录后将用户信息同步到本地数据库 |
|
||
| **调用位置** | `app/routes/callback.tsx` - OAuth 回调 |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现:前端直接操作数据库
|
||
1. postgrestGet 查询用户是否存在(根据 sub)
|
||
2. 如果存在 → postgrestPut 更新用户信息
|
||
3. 如果不存在 → postgrestPost 插入新用户
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
POST /api/auth/sync-user
|
||
Body: { userInfo, userRole, area }
|
||
Response: { success, user_id, ... }
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 统一用户数据管理逻辑
|
||
- ✅ 避免前端直接操作用户表
|
||
- ✅ 更好的数据一致性保障
|
||
|
||
---
|
||
|
||
### 1.2 添加默认角色 - `addDefaultRole()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `addDefaultRole()` |
|
||
| **行号** | 691-738 |
|
||
| **PostgREST 操作** | `postgrestGet` + `postgrestPost` |
|
||
| **表名** | `user_role` |
|
||
| **功能** | 为新用户自动添加默认角色(common) |
|
||
| **调用位置** | `saveUserInfo()` 内部调用 |
|
||
| **建议** | 🔄 **改为后端 API**(随 `saveUserInfo` 一起) |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现
|
||
1. postgrestGet 检查用户是否已有角色
|
||
2. 如果没有 → postgrestPost 添加角色
|
||
```
|
||
|
||
**建议**: 合并到 `/api/auth/sync-user` 接口中,后端自动处理
|
||
|
||
---
|
||
|
||
## 2. 首页与统计
|
||
|
||
**文件**: `app/api/home/home.ts`
|
||
|
||
### 2.1 获取入口模块 - `getEntryModules()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getEntryModules()` |
|
||
| **行号** | 232-371 |
|
||
| **PostgREST 操作** | `postgrestGet` × 2 |
|
||
| **表名** | `entry_modules` + `document_types` |
|
||
| **功能** | 获取用户可访问的入口模块及关联的文档类型 |
|
||
| **调用位置** | `app/routes/home.tsx` - 首页 |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现
|
||
1. postgrestGet 查询 entry_modules(根据用户角色和地区过滤)
|
||
2. 对每个模块:postgrestGet 查询关联的 document_types
|
||
3. 前端进行地区启用状态过滤
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
GET /api/home/entry-modules?userRole={role}&userArea={area}
|
||
Response: {
|
||
modules: [
|
||
{
|
||
id, name, description, path, areas,
|
||
documentTypes: [...] // 已关联的文档类型
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 减少多次数据库查询
|
||
- ✅ 后端统一处理权限逻辑
|
||
- ✅ 支持更复杂的业务规则
|
||
|
||
---
|
||
|
||
## 3. 文档管理
|
||
|
||
**文件**: `app/api/files/documents.ts`
|
||
|
||
### 3.1 获取单个文档 - `getDocument()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getDocument()` |
|
||
| **行号** | 286-331 |
|
||
| **PostgREST 操作** | `postgrestGet` + 内部调用多个查询 |
|
||
| **表名** | `documents` + `evaluation_results` + `document_types` |
|
||
| **功能** | 获取单个文档详情及评查结果统计 |
|
||
| **调用位置** | `home.tsx`, `documents.list.tsx`, `documents.edit.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现
|
||
1. postgrestGet 查询文档基本信息(documents 表)
|
||
2. 调用 getDocumentTypes() → postgrestGet 查询文档类型
|
||
3. 调用 getEvaluationResults() → postgrestGet 查询评查结果
|
||
4. 前端计算问题数量(issues)
|
||
5. 前端组装 DocumentUI 对象
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
GET /api/documents/{id}?userId={userId}
|
||
Response: {
|
||
id, name, documentNumber, type, typeName,
|
||
auditStatus, fileStatus, issues, // 后端计算
|
||
uploadTime, pageCount, ...
|
||
}
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 一次请求获取所有数据
|
||
- ✅ 后端计算问题数量,提高性能
|
||
- ✅ 减少前端数据组装逻辑
|
||
|
||
---
|
||
|
||
### 3.2 获取文档(无用户限制) - `getDocumentWithNoUserId()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getDocumentWithNoUserId()` |
|
||
| **行号** | 339-383 |
|
||
| **PostgREST 操作** | `postgrestGet` + 内部调用多个查询 |
|
||
| **表名** | `documents` + `evaluation_results` + `document_types` |
|
||
| **功能** | 获取文档详情(跨用户查询,用于交叉评查) |
|
||
| **调用位置** | 交叉评查模块 |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**建议后端 API**:
|
||
```
|
||
GET /api/documents/{id}/detail
|
||
Response: { ... } // 与 getDocument 类似,但无用户ID限制
|
||
```
|
||
|
||
---
|
||
|
||
### 3.3 更新文档 - `updateDocument()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `updateDocument()` |
|
||
| **行号** | 393-458 |
|
||
| **PostgREST 操作** | `postgrestPut` |
|
||
| **表名** | `documents` |
|
||
| **功能** | 更新文档信息(文档编号、审核状态、备注等) |
|
||
| **调用位置** | `documents.edit.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现
|
||
postgrestPut('documents', {
|
||
document_number, audit_status, is_test_document, remark
|
||
}, { id, user_id })
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
PUT /api/documents/{id}
|
||
Body: { documentNumber, auditStatus, isTest, remark }
|
||
Response: { success, updatedDocument }
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 后端可以添加业务逻辑(如状态变更日志)
|
||
- ✅ 统一权限校验
|
||
- ✅ 支持事务处理
|
||
|
||
---
|
||
|
||
### 3.4 删除文档 - `deleteDocument()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `deleteDocument()` |
|
||
| **行号** | 242-279 |
|
||
| **PostgREST 操作** | `postgrestDelete` |
|
||
| **表名** | `documents` |
|
||
| **功能** | 删除文档(只能删除自己的文档) |
|
||
| **调用位置** | 文档列表操作 |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**建议后端 API**:
|
||
```
|
||
DELETE /api/documents/{id}?userId={userId}
|
||
Response: { success }
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 后端可以执行级联删除(评查结果、文件存储等)
|
||
- ✅ 记录删除日志
|
||
- ✅ 更安全的权限控制
|
||
|
||
---
|
||
|
||
## 4. 文件上传
|
||
|
||
**文件**: `app/api/files/files-upload.ts`
|
||
|
||
### 4.1 获取当天文档列表 - `getTodayDocuments()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getTodayDocuments()` |
|
||
| **行号** | 440-524 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `documents` |
|
||
| **功能** | 获取当天上传的文档列表(支持按文档类型过滤) |
|
||
| **调用位置** | `documents.list.tsx`, `files.upload.tsx`, `ReviewTabs.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现
|
||
postgrestGet('documents', {
|
||
select: 'id, name, type_id, file_size, status, ...',
|
||
filter: {
|
||
'created_at': `gte.${today}`,
|
||
'user_id': `eq.${userInfo.user_id}`,
|
||
'type_id': `in.(${typeIds})` // 从 sessionStorage 读取
|
||
},
|
||
order: 'created_at.desc'
|
||
})
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
GET /api/documents/today?userId={userId}&typeIds={ids}
|
||
Response: {
|
||
documents: [...]
|
||
}
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 后端可以优化查询性能
|
||
- ✅ 支持更复杂的筛选条件
|
||
- ✅ 统一日期范围逻辑
|
||
|
||
---
|
||
|
||
### 4.2 获取文档类型列表 - `getDocumentTypes()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getDocumentTypes()` |
|
||
| **行号** | 531-574 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `document_types` |
|
||
| **功能** | 获取文档类型列表(支持动态过滤) |
|
||
| **调用位置** | `documents.list.tsx`, `files.upload.tsx` |
|
||
| **建议** | ⚠️ **建议评估** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现
|
||
postgrestGet('document_types', {
|
||
select: 'id, name',
|
||
filter: { 'id': `in.(${typeIds})` } // 从 sessionStorage 读取
|
||
})
|
||
```
|
||
|
||
**建议**:
|
||
- 如果只是简单查询,可以保留 PostgREST
|
||
- 如果需要关联更多数据(如提示词配置),改为后端 API
|
||
|
||
---
|
||
|
||
### 4.3 获取文档状态 - `getDocumentsStatus()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getDocumentsStatus()` |
|
||
| **行号** | 583-658 |
|
||
| **PostgREST 操作** | `postgrestGet` × 2 |
|
||
| **表名** | `documents` + `contract_structure_comparison` |
|
||
| **功能** | 批量查询文档和合同附件的处理状态(用于轮询) |
|
||
| **调用位置** | `documents.list.tsx`, `files.upload.tsx`, `ReviewTabs.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现
|
||
1. postgrestGet('documents', { filter: { id: 'in.(1,2,3)' } })
|
||
2. postgrestGet('contract_structure_comparison', { filter: { id: 'in.(4,5)' } })
|
||
3. 前端合并结果
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
POST /api/documents/status
|
||
Body: { documentIds: [1,2,3], attachmentIds: [4,5] }
|
||
Response: {
|
||
documents: [{ id, status }, ...]
|
||
}
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 一次请求获取所有状态
|
||
- ✅ 减少前端逻辑
|
||
- ✅ 支持 WebSocket 推送(未来优化)
|
||
|
||
---
|
||
|
||
## 5. 评查点管理
|
||
|
||
**文件**: `app/api/evaluation_points/rules.ts`
|
||
|
||
### 5.1 获取评查点列表 - `getRulesList()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getRulesList()` |
|
||
| **行号** | 182-408 |
|
||
| **PostgREST 操作** | `postgrestGet` × 2 |
|
||
| **表名** | `evaluation_points` + `evaluation_point_groups` |
|
||
| **功能** | 获取评查点列表(支持分页、排序、多条件筛选) |
|
||
| **调用位置** | `rules.list.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现
|
||
1. postgrestGet('evaluation_point_groups', ...) // 查询类型筛选
|
||
2. postgrestGet('evaluation_points', {
|
||
select: `id, code, name,
|
||
child_group:evaluation_point_groups!fk_evaluation_points_group(...),
|
||
parent_group:evaluation_point_groups!fk_evaluation_points_parent_group(...)`
|
||
}) // 使用资源嵌入查询父子分组
|
||
3. 前端进行地区过滤、编码清洗
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
GET /api/rules/list?page={p}&pageSize={ps}&type={t}&group={g}&status={s}&keyword={k}&area={a}
|
||
Response: {
|
||
rules: [...],
|
||
total: 100,
|
||
page: 1,
|
||
pageSize: 10
|
||
}
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 简化复杂的资源嵌入查询
|
||
- ✅ 后端处理地区过滤和编码清洗
|
||
- ✅ 更好的查询性能优化
|
||
|
||
---
|
||
|
||
### 5.2 获取单个评查点 - `getRule()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getRule()` |
|
||
| **行号** | 409-502 |
|
||
| **PostgREST 操作** | `postgrestGet` × 2 |
|
||
| **表名** | `evaluation_points` + `evaluation_point_groups` |
|
||
| **功能** | 获取单个评查点详情 |
|
||
| **调用位置** | 评查点编辑页面 |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
**说明**: 这是评查点详情相关功能,必须使用 PostgREST
|
||
|
||
---
|
||
|
||
### 5.3 创建评查点 - `createRule()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `createRule()` |
|
||
| **行号** | 503-563 |
|
||
| **PostgREST 操作** | `postgrestPost` |
|
||
| **表名** | `evaluation_points` |
|
||
| **功能** | 创建新的评查点 |
|
||
| **调用位置** | 评查点编辑页面 |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 5.4 更新评查点 - `updateRule()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `updateRule()` |
|
||
| **行号** | 564-624 |
|
||
| **PostgREST 操作** | `postgrestPut` |
|
||
| **表名** | `evaluation_points` |
|
||
| **功能** | 更新评查点 |
|
||
| **调用位置** | 评查点编辑页面 |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 5.5 删除评查点 - `deleteRule()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `deleteRule()` |
|
||
| **行号** | 625-739 |
|
||
| **PostgREST 操作** | `postgrestDelete` |
|
||
| **表名** | `evaluation_points` |
|
||
| **功能** | 删除评查点 |
|
||
| **调用位置** | 评查点列表 |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 5.6 获取规则类型 - `getRuleTypes()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getRuleTypes()` |
|
||
| **行号** | 803-945 |
|
||
| **PostgREST 操作** | `postgrestGet` × 2 |
|
||
| **表名** | `document_types` + `evaluation_point_groups` |
|
||
| **功能** | 获取文档类型和评查点类型(用于筛选) |
|
||
| **调用位置** | `rules.list.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 5.7 根据类型获取规则组 - `getRuleGroupsByType()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getRuleGroupsByType()` |
|
||
| **行号** | 946-1078 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `evaluation_point_groups` |
|
||
| **功能** | 根据文档类型ID获取规则组 |
|
||
| **调用位置** | `rules.list.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 5.8 获取评查点数据(编辑用) - `getEvaluationPoint()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getEvaluationPoint()` |
|
||
| **行号** | 1152-1202 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `evaluation_points` |
|
||
| **功能** | 获取评查点数据(用于编辑页面) |
|
||
| **调用位置** | `rules.new.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 5.9 获取评查点组列表 - `getEvaluationPointGroups()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getEvaluationPointGroups()` |
|
||
| **行号** | 1203-1327 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `evaluation_point_groups` |
|
||
| **功能** | 获取所有评查点组(用于下拉选择) |
|
||
| **调用位置** | `rules.new.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 5.10 保存评查点 - `saveEvaluationPoint()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `saveEvaluationPoint()` |
|
||
| **行号** | 1328+ |
|
||
| **PostgREST 操作** | `postgrestPut` / `postgrestPost` |
|
||
| **表名** | `evaluation_points` |
|
||
| **功能** | 保存评查点(新建或更新) |
|
||
| **调用位置** | `rules.new.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
## 6. 评查点分组
|
||
|
||
**文件**: `app/api/evaluation_points/rule-groups.ts`
|
||
|
||
### 6.1 获取顶级分组 - `getRuleGroups()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getRuleGroups()` |
|
||
| **行号** | 74-145 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `evaluation_point_groups` |
|
||
| **功能** | 获取顶级评查点分组列表 |
|
||
| **调用位置** | `rule-groups._index.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 6.2 获取子分组 - `getChildGroups()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getChildGroups()` |
|
||
| **行号** | 146-245 |
|
||
| **PostgREST 操作** | `postgrestGet` × 2 |
|
||
| **表名** | `evaluation_point_groups` + `evaluation_points` |
|
||
| **功能** | 获取子分组列表及评查点数量 |
|
||
| **调用位置** | `rule-groups._index.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 6.3 获取所有分组(树形) - `getAllRuleGroups()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getAllRuleGroups()` |
|
||
| **行号** | 246-330 |
|
||
| **PostgREST 操作** | `postgrestGet` × 多次 |
|
||
| **表名** | `evaluation_point_groups` + `evaluation_points` |
|
||
| **功能** | 获取所有分组并构建树形结构 |
|
||
| **调用位置** | `document-types.new.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 6.4 获取单个分组 - `getRuleGroup()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getRuleGroup()` |
|
||
| **行号** | 331-429 |
|
||
| **PostgREST 操作** | `postgrestGet` × 2 |
|
||
| **表名** | `evaluation_point_groups` + `evaluation_points` |
|
||
| **功能** | 获取单个分组详情及评查点数量 |
|
||
| **调用位置** | `rule-groups.new.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 6.5 创建分组 - `createRuleGroup()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `createRuleGroup()` |
|
||
| **行号** | 430-513 |
|
||
| **PostgREST 操作** | `postgrestPost` |
|
||
| **表名** | `evaluation_point_groups` |
|
||
| **功能** | 创建新的评查点分组 |
|
||
| **调用位置** | `rule-groups.new.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 6.6 更新分组 - `updateRuleGroup()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `updateRuleGroup()` |
|
||
| **行号** | 514-576 |
|
||
| **PostgREST 操作** | `postgrestPut` |
|
||
| **表名** | `evaluation_point_groups` |
|
||
| **功能** | 更新评查点分组 |
|
||
| **调用位置** | `rule-groups.new.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 6.7 删除分组 - `deleteRuleGroup()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `deleteRuleGroup()` |
|
||
| **行号** | 577+ |
|
||
| **PostgREST 操作** | `postgrestDelete` × 2 |
|
||
| **表名** | `evaluation_point_groups` + `evaluation_points` |
|
||
| **功能** | 删除分组(级联删除子分组和评查点) |
|
||
| **调用位置** | `rule-groups._index.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
## 7. 评查文件审核
|
||
|
||
**文件**: `app/api/evaluation_points/rules-files.ts`
|
||
|
||
### 7.1 更新文档审核状态 - `updateDocumentAuditStatus()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `updateDocumentAuditStatus()` |
|
||
| **行号** | 118-167 |
|
||
| **PostgREST 操作** | `postgrestPut` |
|
||
| **表名** | `documents` |
|
||
| **功能** | 更新文件的审核状态(通过/不通过/警告) |
|
||
| **调用位置** | `documents.list.tsx`, `files.upload.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现
|
||
postgrestPut('documents',
|
||
{ audit_status: auditStatus },
|
||
{ id, user_id }
|
||
)
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
PUT /api/documents/{id}/audit-status
|
||
Body: { auditStatus, userId }
|
||
Response: { success }
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 后端可以记录审核日志
|
||
- ✅ 触发审核状态变更的业务逻辑
|
||
- ✅ 统一权限校验
|
||
|
||
---
|
||
|
||
## 8. 评审结果
|
||
|
||
**文件**: `app/api/evaluation_points/reviews.ts`
|
||
|
||
### 8.1 获取评查点列表 - `getReviewPoints()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getReviewPoints()` |
|
||
| **行号** | 132-750 |
|
||
| **PostgREST 操作** | `postgrestGet` × 6 |
|
||
| **表名** | `contract_structure_comparison`, `evaluation_results`, `evaluation_points`, `evaluation_point_groups`, `audit_status`, `cross_scoring_proposals` |
|
||
| **功能** | 获取文档的完整评查结果(关联 6 个表) |
|
||
| **调用位置** | `reviews.tsx`, `cross-checking.result.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现:复杂的多表关联查询
|
||
1. postgrestGet('contract_structure_comparison', ...) // 合同附件
|
||
2. postgrestGet('evaluation_results', ...) // 评查结果
|
||
3. postgrestGet('evaluation_points', ...) // 评查点
|
||
4. postgrestGet('evaluation_point_groups', ...) // 评查点组
|
||
5. postgrestGet('audit_status', ...) // 审核状态
|
||
6. postgrestGet('cross_scoring_proposals', ...) // 交叉提案
|
||
7. 前端复杂的数据组装和分组
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
GET /api/documents/{id}/review-points
|
||
Response: {
|
||
reviewPoints: [
|
||
{
|
||
id, evaluationPointId, evaluationPointName,
|
||
groupName, result, score,
|
||
auditStatus, crossProposals, ...
|
||
}
|
||
],
|
||
groupedByCategory: {...}
|
||
}
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 大幅减少数据库查询(从 6 次到 1 次)
|
||
- ✅ 后端优化 JOIN 查询性能
|
||
- ✅ 简化前端数据处理逻辑
|
||
- ✅ 统一数据格式
|
||
|
||
---
|
||
|
||
### 8.2 更新评查结果 - `updateReviewResult()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `updateReviewResult()` |
|
||
| **行号** | 751-894 |
|
||
| **PostgREST 操作** | `postgrestGet` + `postgrestPut` / `postgrestPost` |
|
||
| **表名** | `evaluation_results` + `audit_status` |
|
||
| **功能** | 更新评查结果和审核状态 |
|
||
| **调用位置** | `reviews.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现
|
||
1. postgrestGet('evaluation_results', ...) // 获取当前结果
|
||
2. postgrestPut('evaluation_results', ...) // 更新结果
|
||
3. 根据情况:
|
||
- postgrestPut('audit_status', ...) // 更新审核状态
|
||
- 或 postgrestPost('audit_status', ...) // 创建审核状态
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
PUT /api/review-results/{id}
|
||
Body: {
|
||
evaluationResultId,
|
||
evaluatedResult,
|
||
evaluationOpinion,
|
||
userOpinion,
|
||
isReEvaluation
|
||
}
|
||
Response: { success, updatedResult }
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 事务处理,保证数据一致性
|
||
- ✅ 后端处理复杂的状态逻辑
|
||
- ✅ 记录修改历史
|
||
|
||
---
|
||
|
||
### 8.3 确认评查结果 - `confirmReviewResults()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `confirmReviewResults()` |
|
||
| **行号** | 895+ |
|
||
| **PostgREST 操作** | `postgrestPut` |
|
||
| **表名** | `documents` |
|
||
| **功能** | 确认评查并更新文档状态 |
|
||
| **调用位置** | `reviews.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**建议后端 API**:
|
||
```
|
||
POST /api/documents/{id}/confirm-review
|
||
Response: { success }
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 后端可以执行确认后的业务逻辑
|
||
- ✅ 触发通知或工作流
|
||
|
||
---
|
||
|
||
## 9. 文档类型
|
||
|
||
**文件**: `app/api/document-types/document-types.ts`
|
||
|
||
### 9.1 获取所有评查点分组 - `getAllEvaluationPointGroups()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getAllEvaluationPointGroups()` |
|
||
| **行号** | 101-148 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `evaluation_point_groups` |
|
||
| **功能** | 获取所有评查点分组(用于文档类型关联) |
|
||
| **调用位置** | `document-types.new.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 9.2 获取父级分组 - `getParentEvaluationPointGroups()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getParentEvaluationPointGroups()` |
|
||
| **行号** | 149-200 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `evaluation_point_groups` |
|
||
| **功能** | 获取父级评查点分组 |
|
||
| **调用位置** | `document-types._index.tsx` |
|
||
| **建议** | 🔒 **必须保留**(评查点详情) |
|
||
|
||
---
|
||
|
||
### 9.3 获取入口模块 - `getEntryModules()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getEntryModules()` |
|
||
| **行号** | 201-244 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `entry_modules` |
|
||
| **功能** | 获取入口模块列表(用于文档类型关联) |
|
||
| **调用位置** | `document-types.new.tsx` |
|
||
| **建议** | ⚠️ **建议评估** |
|
||
|
||
**说明**: 如果只是简单查询,可以保留;如果需要复杂业务逻辑,改为后端 API
|
||
|
||
---
|
||
|
||
### 9.4 获取文档类型列表 - `getDocumentTypes()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getDocumentTypes()` |
|
||
| **行号** | 311-465 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `document_types` |
|
||
| **功能** | 获取文档类型列表(支持分页、筛选) |
|
||
| **调用位置** | `documents.list.tsx`, `document-types.new.tsx`, `document-types._index.tsx`, `documents.edit.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现
|
||
postgrestGet('document_types', {
|
||
select: `id, name, description, ...,
|
||
entry_modules!fk_document_types_entry_module(id,name)`, // 资源嵌入
|
||
filter: { ... },
|
||
order: '...',
|
||
limit: pageSize,
|
||
offset: offset
|
||
})
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
GET /api/document-types?page={p}&pageSize={ps}&name={n}&groupId={g}
|
||
Response: {
|
||
types: [...],
|
||
total: 100
|
||
}
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 简化资源嵌入查询
|
||
- ✅ 后端优化查询性能
|
||
- ✅ 支持更复杂的业务逻辑
|
||
|
||
---
|
||
|
||
### 9.5 删除文档类型 - `deleteDocumentType()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `deleteDocumentType()` |
|
||
| **行号** | 466-559 |
|
||
| **PostgREST 操作** | `postgrestDelete` |
|
||
| **表名** | `document_types` |
|
||
| **功能** | 删除文档类型 |
|
||
| **调用位置** | `document-types._index.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**建议后端 API**:
|
||
```
|
||
DELETE /api/document-types/{id}
|
||
Response: { success }
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 后端可以检查是否有关联数据
|
||
- ✅ 执行级联删除或软删除
|
||
- ✅ 记录删除日志
|
||
|
||
---
|
||
|
||
### 9.6 获取单个文档类型 - `getDocumentType()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getDocumentType()` |
|
||
| **行号** | 560-654 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `document_types` |
|
||
| **功能** | 获取单个文档类型详情 |
|
||
| **调用位置** | `document-types.new.tsx` |
|
||
| **建议** | ⚠️ **建议评估** |
|
||
|
||
**说明**: 简单查询,优先级较低
|
||
|
||
---
|
||
|
||
### 9.7 创建文档类型 - `createDocumentType()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `createDocumentType()` |
|
||
| **行号** | 655-781 |
|
||
| **PostgREST 操作** | `postgrestPost` |
|
||
| **表名** | `document_types` |
|
||
| **功能** | 创建新的文档类型 |
|
||
| **调用位置** | `document-types.new.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**建议后端 API**:
|
||
```
|
||
POST /api/document-types
|
||
Body: { name, description, entryModuleId, groupIds, promptConfigs, ... }
|
||
Response: { success, id }
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 后端可以验证数据完整性
|
||
- ✅ 处理关联关系的创建
|
||
- ✅ 事务处理
|
||
|
||
---
|
||
|
||
### 9.8 更新文档类型 - `updateDocumentType()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `updateDocumentType()` |
|
||
| **行号** | 782+ |
|
||
| **PostgREST 操作** | `postgrestPut` |
|
||
| **表名** | `document_types` |
|
||
| **功能** | 更新文档类型 |
|
||
| **调用位置** | `document-types.new.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**建议后端 API**:
|
||
```
|
||
PUT /api/document-types/{id}
|
||
Body: { ... }
|
||
Response: { success }
|
||
```
|
||
|
||
---
|
||
|
||
## 10. 入口模块
|
||
|
||
**文件**: `app/api/entry-modules/entry-modules.ts`
|
||
|
||
### 10.1 获取入口模块列表 - `getEntryModules()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getEntryModules()` |
|
||
| **行号** | 45-118 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `entry_modules` |
|
||
| **功能** | 获取入口模块列表(支持分页、JSONB 数组查询) |
|
||
| **调用位置** | `entry-modules._index.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现:使用 JSONB 数组查询
|
||
postgrestGet('entry_modules', {
|
||
filter: {
|
||
name: 'ilike.*关键词*',
|
||
areas: 'cs.{"梅州"}' // JSONB contains
|
||
}
|
||
})
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
GET /api/entry-modules?page={p}&pageSize={ps}&name={n}&area={a}
|
||
Response: {
|
||
modules: [...],
|
||
total: 100
|
||
}
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 简化 JSONB 查询逻辑
|
||
- ✅ 后端优化查询性能
|
||
|
||
---
|
||
|
||
### 10.2 根据 ID 获取入口模块 - `getEntryModuleById()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getEntryModuleById()` |
|
||
| **行号** | 126-150 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `entry_modules` |
|
||
| **功能** | 获取单个入口模块详情 |
|
||
| **调用位置** | `entry-modules.new.tsx` |
|
||
| **建议** | ✅ **保留**(简单查询) |
|
||
|
||
---
|
||
|
||
### 10.3 创建入口模块 - `createEntryModule()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `createEntryModule()` |
|
||
| **行号** | 158-179 |
|
||
| **PostgREST 操作** | `postgrestPost` |
|
||
| **表名** | `entry_modules` |
|
||
| **功能** | 创建新的入口模块 |
|
||
| **调用位置** | `entry-modules.new.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
---
|
||
|
||
### 10.4 更新入口模块 - `updateEntryModule()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `updateEntryModule()` |
|
||
| **行号** | 188-211 |
|
||
| **PostgREST 操作** | `postgrestPut` |
|
||
| **表名** | `entry_modules` |
|
||
| **功能** | 更新入口模块 |
|
||
| **调用位置** | `entry-modules.new.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
---
|
||
|
||
### 10.5 删除入口模块 - `deleteEntryModule()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `deleteEntryModule()` |
|
||
| **行号** | 219-242 |
|
||
| **PostgREST 操作** | `postgrestDelete` |
|
||
| **表名** | `entry_modules` |
|
||
| **功能** | 删除入口模块 |
|
||
| **调用位置** | `entry-modules._index.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
---
|
||
|
||
## 11. 交叉评查
|
||
|
||
**文件**: `app/api/cross-checking/`
|
||
|
||
### 11.1 更新文档审核状态 - `updateDocumentAuditStatus()`
|
||
|
||
**文件**: `cross-files.ts`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `updateDocumentAuditStatus()` |
|
||
| **行号** | 476-507 |
|
||
| **PostgREST 操作** | `postgrestPut` |
|
||
| **表名** | `documents` |
|
||
| **功能** | 更新文件的审核状态(交叉评查场景) |
|
||
| **调用位置** | `cross-checking` 相关页面 |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**说明**: 与 `rules-files.ts` 中的同名函数类似,建议统一改为后端 API
|
||
|
||
---
|
||
|
||
### 11.2 查找是否是发起人 - `findIsProposer()`
|
||
|
||
**文件**: `cross-file-result.ts`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `findIsProposer()` |
|
||
| **行号** | 91-112 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `cross_examination_tasks` |
|
||
| **功能** | 判断当前用户是否是任务发起人 |
|
||
| **调用位置** | 交叉评查意见操作 |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**建议后端 API**:
|
||
```
|
||
GET /api/cross-review/tasks/{taskId}/is-proposer?userId={userId}
|
||
Response: { isProposer: true/false }
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 后端统一权限判断逻辑
|
||
- ✅ 可以扩展更复杂的权限规则
|
||
|
||
---
|
||
|
||
### 11.3 完成评查 - `confirmReviewResults()`
|
||
|
||
**文件**: `cross-file-result.ts`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `confirmReviewResults()` |
|
||
| **行号** | 359-394 |
|
||
| **PostgREST 操作** | `postgrestPut` |
|
||
| **表名** | `documents` |
|
||
| **功能** | 完成评查并更新文档审核状态为通过 |
|
||
| **调用位置** | `cross-checking.result.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**建议后端 API**:
|
||
```
|
||
POST /api/cross-review/documents/{id}/confirm
|
||
Response: { success }
|
||
```
|
||
|
||
---
|
||
|
||
## 12. 提示词模板
|
||
|
||
**文件**: `app/api/prompts/prompts.ts`
|
||
|
||
### 12.1 获取提示词模板列表 - `getPromptTemplates()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getPromptTemplates()` |
|
||
| **行号** | 127-232 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `prompt_templates` |
|
||
| **功能** | 获取提示词模板列表(支持分页、筛选、关联创建者) |
|
||
| **调用位置** | `prompts._index.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现:使用资源嵌入查询创建者
|
||
postgrestGet('prompt_templates', {
|
||
select: `id, template_name, ...,
|
||
sso_users!created_by(username)`, // 资源嵌入
|
||
filter: { ... },
|
||
order: 'created_at.desc'
|
||
})
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
GET /api/prompts?page={p}&pageSize={ps}&name={n}&type={t}&status={s}
|
||
Response: {
|
||
templates: [
|
||
{ id, name, type, status, createdBy, createdAt, ... }
|
||
],
|
||
total: 100
|
||
}
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 简化资源嵌入查询
|
||
- ✅ 后端优化查询性能
|
||
|
||
---
|
||
|
||
### 12.2 获取单个提示词模板 - `getPromptTemplate()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getPromptTemplate()` |
|
||
| **行号** | 233-279 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `prompt_templates` |
|
||
| **功能** | 获取单个提示词模板详情 |
|
||
| **调用位置** | `prompts.new.tsx` |
|
||
| **建议** | ✅ **保留**(简单查询) |
|
||
|
||
---
|
||
|
||
### 12.3 创建提示词模板 - `createPromptTemplate()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `createPromptTemplate()` |
|
||
| **行号** | 280-359 |
|
||
| **PostgREST 操作** | `postgrestPost` |
|
||
| **表名** | `prompt_templates` |
|
||
| **功能** | 创建新的提示词模板 |
|
||
| **调用位置** | `prompts.new.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
---
|
||
|
||
### 12.4 更新提示词模板 - `updatePromptTemplate()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `updatePromptTemplate()` |
|
||
| **行号** | 360-458 |
|
||
| **PostgREST 操作** | `postgrestPut` |
|
||
| **表名** | `prompt_templates` |
|
||
| **功能** | 更新提示词模板 |
|
||
| **调用位置** | `prompts.new.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
---
|
||
|
||
### 12.5 删除提示词模板 - `deletePromptTemplate()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `deletePromptTemplate()` |
|
||
| **行号** | 459-499 |
|
||
| **PostgREST 操作** | `postgrestDelete` |
|
||
| **表名** | `prompt_templates` |
|
||
| **功能** | 删除提示词模板 |
|
||
| **调用位置** | `prompts._index.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
---
|
||
|
||
### 12.6 获取提示词选项列表 - `getPromptTemplateOptions()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getPromptTemplateOptions()` |
|
||
| **行号** | 500+ |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `prompt_templates` |
|
||
| **功能** | 获取指定类型的模板选项(用于下拉选择) |
|
||
| **调用位置** | `document-types.new.tsx`, `rules.new.tsx` |
|
||
| **建议** | ✅ **保留**(简单查询,低优先级) |
|
||
|
||
---
|
||
|
||
## 13. 合同模板
|
||
|
||
**文件**: `app/api/contract-template/templates.ts`
|
||
|
||
### 13.1 获取合同分类 - `getContractCategories()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getContractCategories()` |
|
||
| **行号** | 76-105 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `contract_categories` |
|
||
| **功能** | 获取所有合同分类 |
|
||
| **调用位置** | 合同模板页面 |
|
||
| **建议** | ✅ **保留**(简单查询) |
|
||
|
||
---
|
||
|
||
### 13.2 获取分类及模板数量 - `getContractCategoriesWithCount()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getContractCategoriesWithCount()` |
|
||
| **行号** | 106-169 |
|
||
| **PostgREST 操作** | `postgrestGet` × 多次 |
|
||
| **表名** | `contract_categories` + `contract_templates` |
|
||
| **功能** | 获取分类并统计每个分类的模板数量 |
|
||
| **调用位置** | `contract-template.list._index.tsx`, `contract-template.search._index.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现:多次查询
|
||
1. postgrestGet('contract_categories', ...) // 获取所有分类
|
||
2. 对每个分类:postgrestGet('contract_templates', { filter: { category_id } })
|
||
3. 前端统计数量
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
GET /api/contract-templates/categories-with-count
|
||
Response: {
|
||
categories: [
|
||
{ id, name, count: 10 }
|
||
]
|
||
}
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 一次查询获取所有数据(使用 SQL JOIN + COUNT)
|
||
- ✅ 大幅提升性能
|
||
|
||
---
|
||
|
||
### 13.3 获取合同模板列表 - `getContractTemplates()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getContractTemplates()` |
|
||
| **行号** | 170-311 |
|
||
| **PostgREST 操作** | `postgrestGet` × 2 |
|
||
| **表名** | `contract_categories` + `contract_templates` |
|
||
| **功能** | 获取合同模板列表(支持分页、筛选、关键词搜索) |
|
||
| **调用位置** | `contract-template.list._index.tsx`, `contract-template.search.results.tsx` |
|
||
| **建议** | 🔄 **改为后端 API** |
|
||
|
||
**详细说明**:
|
||
```typescript
|
||
// 当前实现:复杂的 OR 条件查询
|
||
1. 如果有关键词:postgrestGet('contract_categories', { filter: { name: 'ilike.*关键词*' } })
|
||
2. postgrestGet('contract_templates', {
|
||
select: `..., contract_categories!fk_contract_templates_category(...)`, // 资源嵌入
|
||
or: `(title.ilike.*关键词*,description.ilike.*关键词*,template_code.ilike.*关键词*)` // OR 查询
|
||
})
|
||
```
|
||
|
||
**建议后端 API**:
|
||
```
|
||
GET /api/contract-templates?page={p}&pageSize={ps}&category={c}&format={f}&keyword={k}&featured={f}
|
||
Response: {
|
||
templates: [...],
|
||
total: 100
|
||
}
|
||
```
|
||
|
||
**优点**:
|
||
- ✅ 简化复杂的 OR 条件查询
|
||
- ✅ 后端优化全文搜索
|
||
- ✅ 支持更高级的搜索功能
|
||
|
||
---
|
||
|
||
### 13.4 获取单个合同模板 - `getContractTemplate()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `getContractTemplate()` |
|
||
| **行号** | 312-346 |
|
||
| **PostgREST 操作** | `postgrestGet` |
|
||
| **表名** | `contract_templates` |
|
||
| **功能** | 获取单个合同模板详情 |
|
||
| **调用位置** | `contract-template.detail.$id.tsx` |
|
||
| **建议** | ✅ **保留**(简单查询) |
|
||
|
||
---
|
||
|
||
### 13.5 搜索合同模板 - `searchContractTemplates()`
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| **函数** | `searchContractTemplates()` |
|
||
| **行号** | 380+ |
|
||
| **PostgREST 操作** | 内部调用 `getContractTemplates()` |
|
||
| **功能** | 搜索合同模板(封装函数) |
|
||
| **调用位置** | `contract-template.search.results.tsx` |
|
||
| **建议** | 🔄 **改为后端 API**(随 `getContractTemplates` 一起) |
|
||
|
||
---
|
||
|
||
## 汇总统计
|
||
|
||
### 按建议分类
|
||
|
||
| 建议 | 数量 | 占比 |
|
||
|------|------|------|
|
||
| 🔄 **强烈建议改为后端 API** | 32 | 53% |
|
||
| 🔒 **必须保留**(评查点详情) | 17 | 28% |
|
||
| ✅ **保留** PostgREST | 8 | 13% |
|
||
| ⚠️ **建议评估** | 3 | 5% |
|
||
| **总计** | **60** | **100%** |
|
||
|
||
---
|
||
|
||
### 按模块分类
|
||
|
||
| 模块 | 🔄 改为 API | 🔒 必须保留 | ✅ 保留 | ⚠️ 评估 | 小计 |
|
||
|------|-----------|-----------|---------|---------|------|
|
||
| 认证服务 | 2 | 0 | 0 | 0 | 2 |
|
||
| 首页与统计 | 1 | 0 | 0 | 0 | 1 |
|
||
| 文档管理 | 4 | 0 | 0 | 0 | 4 |
|
||
| 文件上传 | 2 | 0 | 1 | 1 | 4 |
|
||
| 评查点管理 | 1 | 9 | 0 | 0 | 10 |
|
||
| 评查点分组 | 0 | 7 | 0 | 0 | 7 |
|
||
| 评查文件审核 | 1 | 0 | 0 | 0 | 1 |
|
||
| 评审结果 | 3 | 0 | 0 | 0 | 3 |
|
||
| 文档类型 | 5 | 2 | 0 | 2 | 9 |
|
||
| 入口模块 | 4 | 0 | 1 | 0 | 5 |
|
||
| 交叉评查 | 3 | 0 | 0 | 0 | 3 |
|
||
| 提示词模板 | 4 | 0 | 2 | 0 | 6 |
|
||
| 合同模板 | 3 | 0 | 2 | 0 | 5 |
|
||
| **总计** | **32** | **17** | **8** | **3** | **60** |
|
||
|
||
---
|
||
|
||
## 优先级建议
|
||
|
||
### 🔥 高优先级(建议立即改为后端 API)
|
||
|
||
1. **评审结果模块** - `getReviewPoints()` + `updateReviewResult()`
|
||
- 理由:涉及 6 表关联查询,性能影响大
|
||
|
||
2. **文档管理模块** - `getDocument()` + `updateDocument()` + `deleteDocument()`
|
||
- 理由:核心业务,使用频繁
|
||
|
||
3. **文档状态查询** - `getDocumentsStatus()`
|
||
- 理由:轮询操作,频繁调用
|
||
|
||
4. **合同模板列表** - `getContractCategoriesWithCount()` + `getContractTemplates()`
|
||
- 理由:多次查询,性能优化空间大
|
||
|
||
5. **认证服务** - `saveUserInfo()` + `addDefaultRole()`
|
||
- 理由:安全性考虑,不应前端直接操作用户表
|
||
|
||
---
|
||
|
||
### ⚡ 中优先级
|
||
|
||
6. **评查点列表** - `getRulesList()`
|
||
- 理由:复杂的资源嵌入查询
|
||
|
||
7. **文档类型管理** - CRUD 操作
|
||
- 理由:涉及关联数据处理
|
||
|
||
8. **入口模块管理** - CRUD 操作
|
||
- 理由:涉及 JSONB 查询
|
||
|
||
9. **提示词模板管理** - CRUD 操作
|
||
- 理由:资源嵌入查询
|
||
|
||
---
|
||
|
||
### 🔽 低优先级
|
||
|
||
10. **简单查询操作**
|
||
- 理由:性能影响小,可后续优化
|
||
|
||
---
|
||
|
||
## 建议的实施步骤
|
||
|
||
1. **Phase 1**: 高优先级模块(1-5)
|
||
2. **Phase 2**: 中优先级模块(6-9)
|
||
3. **Phase 3**: 低优先级模块(10)
|
||
|
||
每个 Phase 预计耗时:
|
||
- Phase 1: 2-3 周
|
||
- Phase 2: 2 周
|
||
- Phase 3: 1 周
|
||
|
||
---
|
||
|
||
**注意**: 评查点详情相关的 17 个函数必须保留 PostgREST,不应改为后端 API。
|