# PostgREST 请求模块完整清单 > 本文档记录了项目中所有直接使用 PostgREST 客户端发送请求的模块和函数。 > > **更新时间**: 2025-11-24 > **PostgREST 客户端位置**: `app/api/postgrest-client.ts` --- ## 📚 目录 - [API 模块](#api-模块) - [首页与统计](#1-首页与统计) - [认证服务](#2-认证服务) - [文档管理](#3-文档管理) - [文件上传](#4-文件上传) - [评查点管理](#5-评查点管理) - [评查点分组](#6-评查点分组) - [评查文件审核](#7-评查文件审核) - [评审结果](#8-评审结果) - [文档类型](#9-文档类型) - [入口模块](#10-入口模块) - [交叉评查](#11-交叉评查) - [提示词模板](#12-提示词模板) - [系统配置](#13-系统配置) - [合同模板](#14-合同模板) - [路由模块](#路由模块) - [评查点编辑页面](#15-评查点编辑页面) --- ## API 模块 ### 1. 首页与统计 **文件路径**: `app/api/home/home.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `getEntryModules()` | `postgrestGet` | `entry_modules` | 获取用户可访问的入口模块 | | `getEntryModules()` | `postgrestGet` | `document_types` | 查询入口模块关联的文档类型 | #### 主要功能 - ✅ 获取首页统计数据(通过后端 API,非 PostgREST) - ✅ 获取高频错误评查点(通过后端 API) - ✅ 获取高风险用户(通过后端 API) - ✅ 获取用户可访问的入口模块(使用 PostgREST) - 根据用户角色和地区过滤模块 - 查询模块关联的文档类型 - 在客户端进行地区启用状态过滤 --- ### 2. 认证服务 **文件路径**: `app/api/login/auth.server.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | *待补充* | - | - | 用户会话管理相关功能 | #### 主要功能 - ✅ 用户身份验证 - ✅ 会话管理 - ✅ 登出功能 --- ### 3. 文档管理 **文件路径**: `app/api/files/documents.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `getDocument()` | `postgrestGet` | `documents` | 获取单个文档详情 | | `getDocumentWithNoUserId()` | `postgrestGet` | `documents` | 获取文档(无用户ID限制) | | `getEvaluationResults()` | `postgrestGet` | `evaluation_results` | 获取文档的评查结果 | | `updateDocument()` | `postgrestPut` | `documents` | 更新文档信息 | | `deleteDocument()` | `postgrestDelete` | `documents` | 删除文档 | | `getDocumentHistory()` | `postgrestPost` | `rpc/documents_get_document_history` | 获取文档历史版本(RPC函数) | #### 主要功能 - ✅ 获取单个文档详情(包含评查结果统计) - ✅ 获取文档列表(使用后端 API `/admin/versions/documents-list`) - ✅ 更新文档信息(文档编号、审核状态、备注等) - ✅ 删除文档(仅限用户自己的文档) - ✅ 获取文档历史版本列表 - ✅ 计算文档问题数量(基于评查结果) --- ### 4. 文件上传 **文件路径**: `app/api/files/files-upload.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `getTodayDocuments()` | `postgrestGet` | `documents` | 获取当天上传的文档列表 | | `getDocumentTypes()` | `postgrestGet` | `document_types` | 获取文档类型列表 | | `getDocumentsStatus()` | `postgrestGet` | `documents` | 获取文档状态 | | `getDocumentsStatus()` | `postgrestGet` | `contract_structure_comparison` | 获取合同附件状态 | #### 主要功能 - ✅ 获取当天文档列表 - 根据用户ID和文档类型过滤 - 从 sessionStorage 读取文档类型 ID - ✅ 获取文档类型列表(支持动态类型过滤) - ✅ 获取指定文档的状态(支持主文档和合同附件) - ✅ 上传文件到服务器(使用后端 API,非 PostgREST) - ✅ 上传合同模板(使用后端 API) - ✅ 追加合同附件(使用后端 API) --- ### 5. 评查点管理 **文件路径**: `app/api/evaluation_points/rules.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `getRulesList()` | `postgrestGet` | `evaluation_points` | 获取评查点列表 | | `getRulesList()` | `postgrestGet` | `evaluation_point_groups` | 查询规则组(用于类型筛选) | | `getRule()` | `postgrestGet` | `evaluation_points` | 获取单个评查点详情 | | `getRule()` | `postgrestGet` | `evaluation_point_groups` | 获取评查点所属分组信息 | | `createRule()` | `postgrestPost` | `evaluation_points` | 创建新评查点 | | `updateRule()` | `postgrestPut` | `evaluation_points` | 更新评查点 | | `deleteRule()` | `postgrestDelete` | `evaluation_points` | 删除评查点 | | `getRuleTypes()` | `postgrestGet` | `document_types` | 获取文档类型 | | `getRuleTypes()` | `postgrestGet` | `evaluation_point_groups` | 获取评查点类型 | | `getRuleGroupsByType()` | `postgrestGet` | `evaluation_point_groups` | 根据类型获取规则组 | | `getEvaluationPoint()` | `postgrestGet` | `evaluation_points` | 获取评查点数据(编辑用) | | `getEvaluationPointGroups()` | `postgrestGet` | `evaluation_point_groups` | 获取所有评查点组 | | `saveEvaluationPoint()` | `postgrestPut` / `postgrestPost` | `evaluation_points` | 保存评查点(新建或更新) | #### 主要功能 - ✅ 评查点列表查询 - 支持分页、排序 - 支持按类型、分组、状态、关键词筛选 - 支持按地区过滤(省级管理员可见所有) - 使用 PostgREST 双连接查询获取父子分组 - ✅ 评查点 CRUD 操作 - ✅ 评查点复制功能 - ✅ 评查点编码清洗(移除地区后缀) - ✅ 评查点分组查询(支持嵌套父子关系) --- ### 6. 评查点分组 **文件路径**: `app/api/evaluation_points/rule-groups.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `getRuleGroups()` | `postgrestGet` | `evaluation_point_groups` | 获取顶级评查点分组列表 | | `getChildGroups()` | `postgrestGet` | `evaluation_point_groups` | 获取子分组列表 | | `getChildGroups()` | `postgrestGet` | `evaluation_points` | 查询子分组的评查点数量 | | `getAllRuleGroups()` | `postgrestGet` | `evaluation_point_groups` | 获取所有分组(树形结构) | | `getAllRuleGroups()` | `postgrestGet` | `evaluation_points` | 查询每个子分组的评查点数量 | | `getRuleGroup()` | `postgrestGet` | `evaluation_point_groups` | 获取单个分组详情 | | `getRuleGroup()` | `postgrestGet` | `evaluation_points` | 查询分组的评查点数量 | | `createRuleGroup()` | `postgrestPost` | `evaluation_point_groups` | 创建新分组 | | `updateRuleGroup()` | `postgrestPut` | `evaluation_point_groups` | 更新分组 | | `deleteRuleGroup()` | `postgrestDelete` | `evaluation_point_groups` | 删除分组 | | `deleteEvaluationPointsByGroupId()` | `postgrestDelete` | `evaluation_points` | 删除分组下的所有评查点 | #### 主要功能 - ✅ 评查点分组 CRUD 操作 - ✅ 分组树形结构查询(一级分组+二级分组) - ✅ 查询分组关联的评查点数量 - ✅ 删除分组时级联删除子分组和评查点 - ✅ 支持父分组(pid=0)和子分组(pid>0) --- ### 7. 评查文件审核 **文件路径**: `app/api/evaluation_points/rules-files.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `updateDocumentAuditStatus()` | `postgrestPut` | `documents` | 更新文档审核状态 | #### 主要功能 - ✅ 更新文件的审核状态 - 确保只能更新用户自己的文档 - 支持状态:待审核(0)、通过(1)、不通过(-1)、警告(-2) --- ### 8. 评审结果 **文件路径**: `app/api/evaluation_points/reviews.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `getReviewPoints()` | `postgrestGet` | `contract_structure_comparison` | 获取文档附件数据 | | `getReviewPoints()` | `postgrestGet` | `evaluation_results` | 获取评查结果 | | `getReviewPoints()` | `postgrestGet` | `evaluation_points` | 获取评查点详情 | | `getReviewPoints()` | `postgrestGet` | `evaluation_point_groups` | 获取评查点组信息 | | `getReviewPoints()` | `postgrestGet` | `audit_status` | 获取人工审核状态 | | `getReviewPoints()` | `postgrestGet` | `cross_scoring_proposals` | 获取交叉评分提案 | | `updateReviewResult()` | `postgrestGet` | `evaluation_results` | 获取当前评查结果 | | `updateReviewResult()` | `postgrestPut` | `evaluation_results` | 更新评查结果 | | `updateReviewResult()` | `postgrestPut` | `audit_status` | 更新审核状态 | | `updateReviewResult()` | `postgrestPost` | `audit_status` | 创建新审核状态记录 | | `confirmReviewResults()` | `postgrestPut` | `documents` | 确认评查并更新文档状态 | #### 主要功能 - ✅ 获取文档的完整评查结果 - 查询评查点结果(evaluation_results) - 关联评查点详情(evaluation_points) - 关联评查点分组(evaluation_point_groups) - 获取人工审核状态(audit_status) - 获取合同附件比对结果(contract_structure_comparison) - 获取交叉评分提案(cross_scoring_proposals) - ✅ 更新评查结果 - 修改评查意见和结果 - 更新或创建人工审核状态 - 支持重新审核操作 - ✅ 确认评查结果(将文档审核状态设为通过) --- ### 9. 文档类型 **文件路径**: `app/api/document-types/document-types.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `getDocumentTypes()` | `postgrestGet` | `document_types` | 获取文档类型列表 | | `getDocumentType()` | `postgrestGet` | `document_types` | 获取文档类型详情 | | `createDocumentType()` | `postgrestPost` | `document_types` | 创建文档类型 | | `updateDocumentType()` | `postgrestPut` | `document_types` | 更新文档类型 | | `deleteDocumentType()` | `postgrestDelete` | `document_types` | 删除文档类型 | | `getAllEvaluationPointGroups()` | `postgrestGet` | `evaluation_point_groups` | 获取所有评查点分组 | | `getParentEvaluationPointGroups()` | `postgrestGet` | `evaluation_point_groups` | 获取父级分组 | | `getEntryModules()` | `postgrestGet` | `entry_modules` | 获取入口模块列表 | | `getEvaluationPointGroupsByIds()` | `postgrestGet` | `evaluation_point_groups` | 根据ID获取分组信息 | #### 主要功能 - ✅ 文档类型 CRUD 操作 - ✅ 文档类型列表查询 - 支持分页、排序 - 支持按名称、分组筛选 - 支持按文档类型 ID 数组过滤 - 使用 PostgREST 外键关联查询入口模块 - ✅ 文档类型关联评查点分组 - ✅ 文档类型关联入口模块 - ✅ 文档类型提示词配置(LLM抽取、VLM抽取、评查、总结) --- ### 10. 入口模块 **文件路径**: `app/api/entry-modules/entry-modules.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `getEntryModules()` | `postgrestGet` | `entry_modules` | 获取入口模块列表 | | `getEntryModuleById()` | `postgrestGet` | `entry_modules` | 根据ID获取入口模块 | | `createEntryModule()` | `postgrestPost` | `entry_modules` | 创建入口模块 | | `updateEntryModule()` | `postgrestPut` | `entry_modules` | 更新入口模块 | | `deleteEntryModule()` | `postgrestDelete` | `entry_modules` | 删除入口模块 | #### 主要功能 - ✅ 入口模块 CRUD 操作 - ✅ 入口模块列表查询 - 支持分页、排序 - 支持按名称、地区筛选 - 支持 JSONB 数组查询(areas字段) - ✅ 入口模块地区配置管理 --- ### 11. 交叉评查 **文件路径**: - `app/api/cross-checking/cross-files.ts` - `app/api/cross-checking/cross-file-result.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `updateDocumentAuditStatus()` | `postgrestPut` | `documents` | 更新文档审核状态 | | `findIsProposer()` | `postgrestGet` | `cross_examination_tasks` | 查找是否是任务发起人 | | `confirmReviewResults()` | `postgrestPut` | `documents` | 完成评查并更新文档状态 | #### 主要功能 **cross-files.ts**: - ✅ 获取用户任务列表(使用后端 API) - ✅ 获取任务文档列表(使用后端 API) - ✅ 获取统计数据(使用后端 API) - ✅ 更新文档审核状态(使用 PostgREST) **cross-file-result.ts**: - ✅ 提交交叉评查意见(使用后端 API) - ✅ 获取交叉评查意见列表(使用后端 API) - ✅ 执行意见操作(赞同、反对、撤销,使用后端 API) - ✅ 完成评查(使用 PostgREST 更新文档状态) - ✅ 检查提案投票状态(使用后端 API) - ✅ 查找是否是任务发起人(使用 PostgREST) --- ### 12. 提示词模板 **文件路径**: `app/api/prompts/prompts.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `getPromptTemplates()` | `postgrestGet` | `prompt_templates` | 获取提示词模板列表 | | `getPromptTemplate()` | `postgrestGet` | `prompt_templates` | 获取模板详情 | | `createPromptTemplate()` | `postgrestPost` | `prompt_templates` | 创建提示词模板 | | `updatePromptTemplate()` | `postgrestPut` | `prompt_templates` | 更新提示词模板 | | `deletePromptTemplate()` | `postgrestDelete` | `prompt_templates` | 删除提示词模板 | | `getPromptTemplateOptions()` | `postgrestGet` | `prompt_templates` | 获取模板选项列表 | #### 主要功能 - ✅ 提示词模板 CRUD 操作 - ✅ 提示词模板列表查询 - 支持分页、排序 - 支持按名称、类型、状态筛选 - 使用 PostgREST 外键关联查询创建者信息(sso_users表) - ✅ 提示词模板类型 - LLM抽取(LLM_Extraction) - VLM抽取(VLM_Extraction) - 评查(Evaluation) - 总结(Summary) - 通用(Common) - ✅ 获取指定类型的模板选项(用于下拉选择) --- ### 13. 系统配置 **文件路径**: `app/api/system_setting/config-lists.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `getConfigLists()` | `postgrestGet` | `configurations` | 获取配置列表 | | `getConfigOptions()` | `postgrestGet` | `configurations` | 获取配置类型和环境选项 | | `getConfigDetail()` | `postgrestGet` | `configurations` | 获取配置详情 | | `createConfig()` | `postgrestPost` | `configurations` | 创建配置 | | `updateConfig()` | `postgrestPut` | `configurations` | 更新配置 | | `updateConfigStatus()` | `postgrestPut` | `configurations` | 更新配置状态 | #### 主要功能 - ✅ 系统配置 CRUD 操作 - ✅ 配置列表查询 - 支持分页、排序 - 支持按名称、类型、环境、状态筛选 - ✅ 配置类型和环境动态选项查询 - ✅ 配置状态管理(启用/禁用) --- ### 14. 合同模板 **文件路径**: `app/api/contract-template/templates.ts` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `getContractCategories()` | `postgrestGet` | `contract_categories` | 获取合同分类列表 | | `getContractCategoriesWithCount()` | `postgrestGet` | `contract_categories` | 获取分类及模板数量 | | `getContractCategoriesWithCount()` | `postgrestGet` | `contract_templates` | 统计每个分类的模板数量 | | `getContractTemplates()` | `postgrestGet` | `contract_categories` | 查询分类(用于关键词搜索) | | `getContractTemplates()` | `postgrestGet` | `contract_templates` | 获取合同模板列表 | | `getContractTemplate()` | `postgrestGet` | `contract_templates` | 获取单个模板详情 | | `getFeaturedTemplates()` | `postgrestGet` | `contract_templates` | 获取推荐模板 | #### 主要功能 - ✅ 合同分类管理 - 获取所有分类 - 统计每个分类的模板数量 - ✅ 合同模板查询 - 支持分页、排序 - 支持按分类、格式、推荐状态筛选 - 支持关键词搜索(标题、描述、模板编码、分类名) - 使用 PostgREST 外键关联查询分类信息 - ✅ 获取推荐模板列表 - ✅ 智能搜索功能 --- ## 路由模块 ### 15. 评查点编辑页面 **文件路径**: `app/routes/rules.new.tsx` #### 使用的 PostgREST 函数 | 函数名 | 操作 | 表名 | 说明 | |--------|------|------|------| | `fetchEvaluationPoint()` | `postgrestGet` | `evaluation_points` | 获取评查点数据(编辑模式) | | `fetchEvaluationPointGroups()` | `postgrestGet` | `evaluation_point_groups` | 获取评查点组数据 | | `handleSave()` | `postgrestPut` | `evaluation_points` | 更新评查点(编辑模式) | | `handleSave()` | `postgrestPost` | `evaluation_points` | 创建评查点(新建模式) | #### 主要功能 - ✅ 评查点创建/编辑/复制页面 - ✅ 评查点数据加载(支持编辑和复制模式) - ✅ 评查点分组数据加载(用于下拉选择) - ✅ 评查点保存(新建或更新) - 基本信息设置 - 抽取设置(LLM、VLM、Regex) - 评查设置(规则配置、消息配置) - ✅ 评查点编码清洗(移除地区后缀) - ✅ 表单验证(必填字段、规则完整性) --- ## 📊 统计信息 ### 模块统计 | 类型 | 数量 | |------|------| | API 模块 | 14 | | 路由模块 | 1 | | 总计 | 15 | ### 数据库表统计 | 表名 | 操作频率 | 主要操作 | |------|---------|---------| | `evaluation_points` | 🔥🔥🔥🔥🔥 | GET, POST, PUT, DELETE | | `evaluation_point_groups` | 🔥🔥🔥🔥 | GET, POST, PUT, DELETE | | `documents` | 🔥🔥🔥🔥 | GET, PUT, DELETE | | `document_types` | 🔥🔥🔥 | GET, POST, PUT, DELETE | | `evaluation_results` | 🔥🔥🔥 | GET, PUT | | `prompt_templates` | 🔥🔥🔥 | GET, POST, PUT, DELETE | | `entry_modules` | 🔥🔥 | GET, POST, PUT, DELETE | | `contract_templates` | 🔥🔥 | GET | | `contract_categories` | 🔥🔥 | GET | | `configurations` | 🔥 | GET, POST, PUT | | `audit_status` | 🔥 | GET, PUT, POST | | `cross_examination_tasks` | 🔥 | GET | | `cross_scoring_proposals` | 🔥 | GET | | `contract_structure_comparison` | 🔥 | GET | ### PostgREST 操作统计 | 操作 | 使用次数 | |------|---------| | `postgrestGet` | 🔥🔥🔥🔥🔥 | | `postgrestPost` | 🔥🔥🔥 | | `postgrestPut` | 🔥🔥🔥🔥 | | `postgrestDelete` | 🔥🔥 | --- ## 🔧 PostgREST 使用特性 ### 1. 资源嵌入(Resource Embedding) **使用示例**: ```typescript // 查询文档类型并关联入口模块 select: ` id, name, description, entry_modules!fk_document_types_entry_module(id, name) ` // 查询提示词模板并关联创建者 select: ` id, template_name, template_type, sso_users!created_by(username) ` // 查询评查点并关联父子分组 select: ` id, code, name, child_group:evaluation_point_groups!fk_evaluation_points_group(id,name), parent_group:evaluation_point_groups!fk_evaluation_points_parent_group(id,name) ` ``` **使用场景**: - 文档类型查询(关联入口模块) - 提示词模板查询(关联创建者信息) - 评查点查询(关联父子分组) - 合同模板查询(关联分类信息) ### 2. 过滤查询(Filtering) **使用示例**: ```typescript // 精确匹配 filter: { 'id': 'eq.123' } // 模糊搜索 filter: { 'name': 'ilike.*关键词*' } // 数组包含(in) filter: { 'id': 'in.(1,2,3)' } // JSONB 数组包含(cs) filter: { 'areas': 'cs.{"梅州"}' } // 大于等于 filter: { 'status': 'gte.0' } // NULL 判断 filter: { 'deleted_at': 'is.null' } ``` ### 3. OR 条件查询 **使用示例**: ```typescript // 多字段模糊搜索 or: [ { name: 'ilike.*关键词*' }, { code: 'ilike.*关键词*' } ] // 或者使用字符串格式 or: `(title.ilike.*关键词*,description.ilike.*关键词*)` ``` ### 4. 分页与排序 **使用示例**: ```typescript // 分页 limit: 10, offset: (page - 1) * 10, // 排序 order: 'created_at.desc', order: 'sort_order.asc,name.asc', // 获取总数 headers: { 'Prefer': 'count=exact' } ``` ### 5. RPC 函数调用 **使用示例**: ```typescript // 调用存储过程 await postgrestPost( 'rpc/documents_get_document_history', { p_document_name: documentName, p_user_id: parseInt(userId, 10), p_exclude_id: excludeId }, token ); ``` --- ## ⚠️ 注意事项 ### 1. 数据提取 所有模块都使用统一的 `extractApiData()` 函数处理 API 响应: ```typescript function extractApiData(responseData: unknown): T | null { if (!responseData) return null; // 格式1: { code: number, msg: string, data: T } if (typeof responseData === 'object' && responseData !== null && 'code' in responseData && 'data' in responseData) { return (responseData as { data: T }).data; } // 格式2: 直接是数据对象 return responseData as T; } ``` ### 2. JWT 认证 所有 PostgREST 请求都支持 JWT token 参数: ```typescript const params: PostgrestParams = { // ... 其他参数 token: frontendJWT }; ``` ### 3. 错误处理 统一的错误处理模式: ```typescript const response = await postgrestGet(...); if (response.error) { return { error: response.error, status: response.status }; } const data = extractApiData(response.data); if (!data) { return { error: '获取数据失败', status: 500 }; } ``` ### 4. 用户权限控制 - 大多数更新/删除操作都会检查 `user_id` 确保用户只能操作自己的数据 - 省级管理员(`provincial_admin`)可以查看所有地区的数据 - 普通用户只能查看自己地区的数据 --- ## 🔄 混合使用情况 部分模块同时使用了 PostgREST 和后端 API: | 模块 | PostgREST | 后端 API | |------|-----------|---------| | 文档管理 | ✅ 单个文档查询、更新、删除 | ✅ 文档列表查询 | | 首页统计 | ✅ 入口模块查询 | ✅ 统计数据查询 | | 文件上传 | ✅ 文档类型、状态查询 | ✅ 文件上传操作 | | 交叉评查 | ✅ 文档状态更新 | ✅ 任务和意见管理 | --- ## 📝 更新记录 | 日期 | 说明 | |------|------| | 2025-11-24 | 初始版本,整理完整的 PostgREST 使用清单 | --- **文档维护**: 当添加新的 PostgREST 请求时,请及时更新此文档。