轻松聘AI开发
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

4.5 KiB

评价审核与防刷基础模块接口说明

轻松聘 (mydreamjob) · 评价审核与防刷基础模块 基础路径:/api/v1 · 审核管理接口仅 ADMIN;评价公开接口保持原路径

1. 概述

在岗位评价基础上加入确定性规则预审(非 AI)与管理员审核:

  • 无风险评价 → moderationStatus = AUTO_APPROVED,行为与旧版一致(同步 200、公开展示);
  • 命中规则 → 评价仍保存成功,moderationStatus = PENDING,不进入公开列表/详情/汇总;
  • 管理员可 APPROVED(进入公开)或 REJECTED(永不公开);
  • 公开查询只返回 status=PUBLISHED 且 moderationStatus ∈ {AUTO_APPROVED, APPROVED}。

审核状态值:AUTO_APPROVED / PENDING / APPROVED / REJECTED。

2. 防刷规则(确定性 MVP)

原因码 规则 权重
SENSITIVE_WORD 内容包含配置中的敏感词(app.review-moderation.sensitive-words) +2
CONTACT_INFO 包含手机号 / QQ / 微信 / 外链 +2
PATTERN_ANOMALY 连续重复字符或异常超长(≥800 字) +1
RAPID_SUBMISSION 同一用户窗口期内重复提交(默认 60s 内 ≥3) +1
DUPLICATE_CONTENT 同岗位窗口期内出现相同内容 SHA-256(默认 300s) +2
ABUSIVE_BATCH 同一 IP/User-Agent 哈希窗口期批量(默认 300s 内 ≥5) +2
  • 敏感词来自配置项,不硬编码在 Controller;命中时只返回原因码,不返回敏感词原文;
  • 原始 IP / User-Agent 不落明文,仅存 SHA-256 哈希;
  • 内容哈希只用于风险识别,不影响正常评价。

3. 公开查询兼容(不变路径)

  • GET /jobs/{jobId}/reviews / GET /jobs/{jobId}/reviews/{reviewId} / GET /jobs/{jobId}/reviews/summary 仅返回/统计 AUTO_APPROVED 与 APPROVED 的评价;PENDING/REJECTED 不公开。
  • 八维 dimensionScores 与 dimensionSummary 逻辑不变。

4. 审核管理接口(仅 ADMIN,身份来自 JWT)

4.1 待审列表 GET /admin/reviews/pending

  • 仅 ADMIN(非 ADMIN → 403,未登录 → 401);分页;
  • 可选筛选:jobId、riskLevel(LOW/MEDIUM/HIGH)、createdFrom、createdTo;
  • 返回:reviewId, jobId, studentUserId, rating, content, tags, dimensionScores, moderationStatus, reasonCodes, riskLevel, moderationScore, createdAt;
  • 不返回明文 IP / User-Agent / 内部哈希。

4.2 审核决策 POST /admin/reviews/{reviewId}/decision

{ "decision": "APPROVED|REJECTED", "reason": "人工审核说明(可选)" }
  • 仅 ADMIN;仅 PENDING 可审,已审核重复提交 → 409 REVIEW_ALREADY_DECIDED;
  • APPROVED → 进入公开列表/汇总;REJECTED → 永不公开;
  • 决策写入 review_moderation_history 与 audit_logs;审核人从 JWT 获取。

4.3 审核历史 GET /admin/reviews/history

  • 仅 ADMIN;分页;返回 id, reviewId, action, actorUserId, reasonCodes, reason, createdAt (含自动预审标记与管理员决策)。

5. 权限

操作 ADMIN 学生本人 其他学生 企业 未登录
创建评价 — ✅ 403(重复→409) 403 401
评价列表/详情/汇总 公开 公开 公开 公开 ✅
待审/决策/历史 ✅ 403 403 403 401

审核人/操作者一律来自 JWT,不信任请求体 userId。

6. 数据库(V18)

V18__job_review_moderation.sql:

  • job_reviews 增加:moderation_status(默认 AUTO_APPROVED,历史数据自动生效)、moderation_reason(原因码 JSON)、moderation_score、moderation_updated_at、risk_level、content_hash、ip_hash、ua_hash(SHA-256,不存明文);moderation_status 建索引;
  • 新表 review_moderation_history(自动预审标记 + 管理员决策,级联删除);
  • 不改既有表结构,V1-V17 历史迁移不动。

7. 测试

覆盖:普通评价 AUTO_APPROVED 且公开、敏感词/联系方式 PENDING 且不公开、内容哈希风险、IP/UA 仅存哈希、审核通过后公开、审核拒绝不公开、非 ADMIN 403、未登录 401、重复审核 409、历史迁移默认 AUTO_APPROVED、维度仍可保存读取、并发重复仅一条成功、审核写入 audit_logs、既有 526 测试回归。

8. 已知限制

  1. 规则为确定性 MVP,不声称 AI;权重/窗口为默认配置,可按运营调整。
  2. moderation_reason 仅存原因码,敏感词原文不落库、不返回。
  3. 已审核(APPROVED/REJECTED)评价如需复审需产品确认(当前不可重复决策)。
  4. OpenAPI 快照:docs/openapi-rc.json 由 H2 集成测试上下文导出(59 路径),现网可用 GET /api/v1/v3/api-docs 重新导出。