From fc8541a06b502c62d8b9f0342a1b6f641a17ab47 Mon Sep 17 00:00:00 2001 From: doublex001 <16157008+doublex001@user.noreply.gitee.com> Date: Tue, 29 Sep 2026 17:11:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(repo):=20=E8=A1=A5=E9=BD=90=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E7=BC=BA=E5=A4=B1=E6=96=87=E4=BB=B6=EF=BC=88applicati?= =?UTF-8?q?on=20=E7=B1=BB=E5=9E=8B=20/=20=E5=90=8E=E7=AB=AF=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=A5=91=E7=BA=A6=20/=20=E5=AE=A1=E8=AE=A1=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **修复一个会让别人克隆后直接编译失败的坏点**: `src/types/index.ts` 的 barrel 早已 `export ... from './application'` 并已入库, 但 `src/types/application.ts` 从未提交(一直是未跟踪状态)。本地因为文件在磁盘上 所以 tsc 通过,**新克隆的仓库会报 TS2307 找不到模块**。 同批补入此前一直未入库的资料与工具: - src/types/application.ts: 投递(Application)领域类型,被 types barrel 引用,属必需文件 - docs/职来后端接口.md: 后端接口契约全文(19645 行),前后端对齐的唯一真相源 - docs/applications-500-diagnosis.md: 投递接口 500 排查记录 - scripts/map_apits.py / scan_wrong.py: 接口映射与错位扫描审计脚本 (scripts/api.ts.bak 为 api.ts 的历史备份副本,不入库) --- docs/applications-500-diagnosis.md | 196 + docs/职来后端接口.md | 19645 +++++++++++++++++++++++++++ scripts/map_apits.py | 59 + scripts/scan_wrong.py | 23 + src/types/application.ts | 66 + 5 files changed, 19989 insertions(+) create mode 100644 docs/applications-500-diagnosis.md create mode 100644 docs/职来后端接口.md create mode 100644 scripts/map_apits.py create mode 100644 scripts/scan_wrong.py create mode 100644 src/types/application.ts diff --git a/docs/applications-500-diagnosis.md b/docs/applications-500-diagnosis.md new file mode 100644 index 0000000..fe23ac9 --- /dev/null +++ b/docs/applications-500-diagnosis.md @@ -0,0 +1,196 @@ +# `/applications` 接口 500 问题诊断报告 + +> 前端联调:2026-09-29 +> 测试账号:`19900009021` / `ZhilaiTest!2026#A` +> 后端地址:`https://job.youthome.com.cn/api/v1` + +--- + +## 问题复现 + +| 请求 | HTTP | code | message | +|---|---|---|---| +| `GET /applications`(带 Bearer token) | **500** | 500 | `internal server error` | +| `GET /applications?page=0&size=20`(带 token) | **500** | 500 | `internal server error` | +| `GET /applications`(不带 token) | 401 | 401 | `not authenticated` | +| `GET /applications/me`(带 token) | 200 | 200 | `ok` ✓ | +| `POST /applications`(带 token,投递) | 404 | 7001 | `job not found` ✓(正确路由,只是 jobId 不存在) | +| `GET /applications/me/timeline`(带 token) | 404 | 8002 | `application not found` ✓(正确路由) | + +**结论:`GET /applications` 带 token 必现 HTTP 500**,是后端 bug。 + +--- + +## 根因分析 + +### 1. OpenAPI 文档中根本没有定义 `GET /applications` + +后端公开的 28 个端点里,applications 模块只有 **5 个**: + +| 方法 | 路径 | 用途 | 状态 | +|---|---|---|---| +| POST | `/applications` | 提交投递 | ✅ 正常(jobId 不存在时返回 404) | +| GET | `/applications/me` | 我的投递列表(分页) | ✅ 正常(返回 200 + 分页结构) | +| GET | `/applications/{id}` | 投递详情 | ✅ 正常(id 不存在返回 404) | +| PATCH | `/applications/{id}/status` | 企业改投递状态 | — 未测 | +| POST | `/applications/{id}/withdraw` | 撤回投递 | — 未测 | +| GET | `/applications/{id}/timeline` | 状态时间线 | ✅ 正常(id 不存在返回 404) | + +**没有 `GET /applications` 这条路由。** + +### 2. 为什么不是 404 而是 500? + +这是 Spring Boot Controller **路由冲突** 导致的。 + +后端 Controller 大概率写了: + +```java +@RestController +@RequestMapping("/api/v1/applications") +public class ApplicationController { + + @GetMapping("/me") // GET /applications/me → 200 ✓ + public Page listMine() { ... } + + @GetMapping("/{id}") // GET /applications/{id} → 404(id 不存在)✓ + public Application getById(@PathVariable Long id) { ... } + + @PostMapping("") // POST /applications → 404(jobId 不存在)✓ + public Application create(@RequestBody ...) { ... } + + // 但没有写 @GetMapping("")! +} +``` + +当请求 `GET /applications` 进来时: +- Spring 路由解析器在候选路由里找匹配 +- `/applications/me` 需要路径是 `/me`,不匹配 +- **`/{id}` 匹配成功** —— `id` 被解析为字符串 `"applications"` +- 但方法签名上 `@PathVariable Long id` 期望 `Long` 类型 +- Spring 尝试把 `"applications"` 转成 `Long` → **类型转换异常** +- 全局异常处理器没兜住这个异常 → 返回 HTTP 500 `internal server error` + +这是 Spring Boot Controller 常见的路由设计陷阱:**一个 Controller 既有 `/{id}` 又有 `/me`,但忘了写根路径 `@GetMapping("")` 或显式拒绝根路径的 GET 请求**。 + +--- + +## 修复方案(后端二选一) + +### 方案 A:显式拦截并返回 404(推荐,防御性编程) + +```java +@GetMapping("") +public ResponseEntity listAll() { + // applications 没有"列出所有投递"这个语义 + return ResponseEntity.notFound().build(); +} +``` + +### 方案 B:确认不需要这个路由,忽略 + +如果后端根本不打算提供 `GET /applications`(全量投递列表——企业端才有意义,而且需要按企业 ID 过滤),那 Spring Boot 默认会 404。但 **当前 500 是路由冲突导致的**,需要清理路由或者统一异常处理。 + +### 方案 C:按角色分发(如果后端真打算提供) + +```java +@GetMapping("") +public ResponseEntity listAll(Authentication auth) { + // STUDENT 应该只查自己的 → 404 引导去 /applications/me + // COMPANY 可以查自己企业下的投递 → 需要 companyId 过滤 + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of( + "code", 404, "message", "这个路由不存在,请使用 /applications/me 或 /applications/{id}" + )); +} +``` + +--- + +## 其他建议 + +### 1. Spring Boot 的 `/{id}` 路由建议加类型约束 + +```java +// 只匹配数字 ID,排除 "/me" 等子路径 +@GetMapping("/{id:\\d+}") +public Application getById(@PathVariable Long id) { ... } +``` + +这样 `GET /applications` 和 `GET /applications/me` 不会被 `/{id}` 吃掉。 + +### 2. 建议加 Controller 测试 + +```java +@WebMvcTest(ApplicationController.class) +class ApplicationControllerTest { + @Test + void get_root_shouldReturn404() throws Exception { + mockMvc.perform(get("/api/v1/applications")) + .andExpect(status().isNotFound()); + } +} +``` + +### 3. 统一异常处理加类型转换兜底 + +```java +@ExceptionHandler(MethodArgumentTypeMismatchException.class) +public ResponseEntity> handleTypeMismatch(MethodArgumentTypeMismatchException e) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of( + "code", 404, + "message", "资源不存在" + )); +} +``` + +--- + +## 给后端同事的话 + +> XX,`GET /applications`(不带 /me)带 token 返回 500 我测出来了,OpenAPI 文档里也没定义这个路由。 +> +> 根因是 Spring 路由冲突:Controller 里有 `GET /applications/{id}` 但没有 `GET /applications`,所以 `"applications"` 这个字符串被当成了 `@PathVariable Long id` 传给方法,类型转换失败抛异常,全局异常处理器没兜住就 500 了。 +> +> 前端这边**不需要这个路由**——学生端调的是 `/applications/me`(正常),投递调的是 `POST /applications`(正常),详情调的是 `GET /applications/{id}`(正常)。所以最简单的修复就是给 Controller 加个 `@GetMapping("")` 返回 404,或者 `/{id}` 加类型约束 `@GetMapping("/{id:\\d+}")` 排除子路径。 +> +> 具体怎么修看你那边代码风格,上面三个方案选一个就行。 + +--- + +## 附:其他需要后端补的端点清单 + +(来自全量联调扫描,前端有调用但后端没端点) + +### 🔴 高优先级 + +| 前端路径 | 用途 | 前端函数 | +|---|---|---| +| `GET /jobs/{id}/score` | 岗位综合评分(8 维度雷达图) | `fetchJobScore` | +| `GET /jobs/{id}/salary` | 薪资分布数据 | `fetchJobSalary` | +| `GET /jobs/{id}/reviews` | 面经/岗位评价列表 | `fetchJobReviews` | +| `GET /jobs/{id}/competition-ranking` | 同岗位竞争力排名 | `fetchRankData` | +| `GET /profile/me/career-progress` | 求职进度时间轴 | `fetchJobProgress` | +| `GET /jobs/favorites` | 我的收藏岗位 | `fetchFavorites` | +| `GET /conversations` | 沟通会话列表 | `fetchConversations` | +| `GET /notifications` | 系统通知 | `fetchNotifications` | + +### 🟡 中优先级 + +| 前端路径 | 用途 | 前端函数 | +|---|---|---| +| `GET /jobs/compare` | 岗位对比 | `fetchJobCompare` | +| `GET /offers/compare` | Offer 对比 | `fetchOfferCompare` | +| `GET /profile/me/preferences` | 求职偏好 | `fetchJobPreference` | +| `PUT /profile/me/preferences` | 保存求职偏好 | 更新 | +| `POST /jobs/{id}/reviews` | 发布评价 | `submitReview` | +| `GET /interviews/me` | 面试列表 | `fetchMyInterviews` | +| `GET /interviews/{id}/score` | 面试评分 | `fetchInterviewScore` | +| `GET /company/candidates/{id}` | 候选人详情 | `fetchCandidateDetail` | + +### 🔴 已对齐但后端仍有问题 + +| 端点 | 问题 | +|---|---| +| `POST /auth/sms/send` | `sms sender unavailable`(短信网关未通,无 mock code 旁路) | +| `GET /jobs/search` / `GET /jobs` / `GET /companies/{id}/jobs` | `items: []`(后端无 job seed 数据) | +| `GET /profile/me` | 返回空对象 `{}`(后端未定义 STUDENT profile 字段) | +| `GET /companies/{id}` | 只有 id=1 有数据(企业 seed 不足) | diff --git a/docs/职来后端接口.md b/docs/职来后端接口.md new file mode 100644 index 0000000..6961fe9 --- /dev/null +++ b/docs/职来后端接口.md @@ -0,0 +1,19645 @@ +--- +title: 职来后端接口 +language_tabs: + - shell: Shell + - http: HTTP + - javascript: JavaScript + - ruby: Ruby + - python: Python + - php: PHP + - java: Java + - go: Go +toc_footers: [] +includes: [] +search: true +code_clipboard: true +highlight_theme: darkula +headingLevel: 2 +generator: "@tarslib/widdershins v4.0.30" + +--- + +# 职来后端接口 + +Base URLs: + +# Authentication + +- HTTP Authentication, scheme: bearer
通过 /auth/login 获取的 Access Token,请求头格式:Authorization: Bearer <token> + +# Default + +## GET 评分完整性概览(ADMIN) + +GET /admin/scoring/fairness/overview + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|period|query|string| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "basis": "string", + "scope": "string", + "period": "string", + "capturedAt": "2019-08-24T14:15:22Z", + "populationSize": 0, + "computableSnapshotRatio": 0, + "confidence": "string", + "riskLevel": "string", + "versionCounts": { + "property1": 0, + "property2": 0 + }, + "mixedVersionCount": 0, + "unknownVersionCount": 0, + "distribution": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + }, + "distributionsByRulesVersion": { + "property1": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + }, + "property2": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + } + }, + "coherentVersionSubset": [ + "string" + ], + "availability": "string", + "reason": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseFairnessResponseOverview](#schemaapiresponsefairnessresponseoverview)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|非法 period|None| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|None| + +## GET 评分维度分布(ADMIN) + +GET /admin/scoring/fairness/dimensions + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|period|query|string| 是 |none| +|dimension|query|string| 否 |none| +|Authorization|header|string| 否 |none| + +#### 枚举值 + +|属性|值| +|---|---| +|dimension|EDUCATION| +|dimension|INTERNSHIP| +|dimension|ABILITY| +|dimension|COMPLIANCE| +|dimension|STABILITY| +|dimension|GROWTH| +|dimension|INTEGRITY| +|dimension|ACTIVITY| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "basis": "string", + "scope": "string", + "period": "string", + "capturedAt": "2019-08-24T14:15:22Z", + "dimensions": [ + { + "dimension": "string", + "populationSize": 0, + "rowCount": 0, + "missingRowCount": 0, + "validSampleSize": 0, + "confidence": "string", + "missingRowRate": 0, + "nullScoreRate": 0, + "validCoverage": 0, + "statusCounts": { + "property1": 0, + "property2": 0 + }, + "versionCounts": { + "property1": 0, + "property2": 0 + }, + "inconsistentRecordCount": 0, + "unknownStatusCount": 0, + "outOfRangeScoreCount": 0, + "unknownRulesVersionCount": 0, + "distribution": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": {}, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + }, + "distributionsByRulesVersion": { + "property1": { + "sampleSize": null, + "mean": null, + "median": null, + "p10": null, + "p25": null, + "p75": null, + "p90": null, + "min": null, + "max": null, + "standardDeviation": null, + "buckets": null, + "concentrationRate": null, + "riskLevel": null, + "availability": null, + "reason": null + }, + "property2": { + "sampleSize": null, + "mean": null, + "median": null, + "p10": null, + "p25": null, + "p75": null, + "p90": null, + "min": null, + "max": null, + "standardDeviation": null, + "buckets": null, + "concentrationRate": null, + "riskLevel": null, + "availability": null, + "reason": null + } + }, + "availability": "string", + "reason": "string" + } + ], + "availability": "string", + "reason": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseFairnessResponseDimensions](#schemaapiresponsefairnessresponsedimensions)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|非法参数|None| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|None| + +## GET 评分历史漂移(ADMIN) + +GET /admin/scoring/fairness/drift + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "availability": "UNAVAILABLE", + "reason": "string", + "capturedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseFairnessResponseUnavailable](#schemaapiresponsefairnessresponseunavailable)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|None| + +## GET 排名稳定性(ADMIN) + +GET /admin/scoring/fairness/ranking-stability + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "availability": "UNAVAILABLE", + "reason": "string", + "capturedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseFairnessResponseUnavailable](#schemaapiresponsefairnessresponseunavailable)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|None| + +## GET 申诉纠错聚合(ADMIN) + +GET /admin/scoring/fairness/appeals + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|from|query|string(date)| 否 |none| +|to|query|string(date)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "basis": "string", + "from": "2019-08-24", + "to": "2019-08-24", + "capturedAt": "2019-08-24T14:15:22Z", + "appealCount": 0, + "sampleSize": 0, + "statusCounts": { + "property1": 0, + "property2": 0 + }, + "statusEventCounts": { + "property1": 0, + "property2": 0 + }, + "statusCandidateCounts": { + "property1": 0, + "property2": 0 + }, + "confidence": "string", + "approvedEverCount": 0, + "approvalRate": 0, + "rollbackExecutionRate": 0, + "duplicateAppealCount": 0, + "duplicateAppealRate": 0, + "comparableRollbackCount": 0, + "comparableRollbackCandidateCount": 0, + "changedCount": 0, + "changedCandidateCount": 0, + "actualScoreChangeRate": 0, + "meanDelta": 0, + "meanAbsoluteDelta": 0, + "duplicateRollbackHistoryCount": 0, + "invalidScoreRollbackCount": 0, + "ruleVersionChangedRollbackCount": 0, + "reasonCounts": { + "property1": 0, + "property2": 0 + }, + "availability": "string", + "reason": "string", + "exposureAppealRateAvailability": "string", + "exposureAppealRateReason": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseFairnessResponseAppeals](#schemaapiresponsefairnessresponseappeals)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|非法日期范围|None| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|None| + +# 个人资料 + + + +## GET 查询当前学生资料 + +GET /profile/me + +查询当前登录学生(仅 STUDENT 角色)自己的学生资料。身份仅从 JWT/SecurityContext 获取,不接受 userId、studentUserId 等请求参数;本接口无 Path、Query、Body 参数。若尚未创建个人资料:HTTP 200,data 为空对象 {}(非 null),且不会自动创建数据库记录。当前未设置接口级限流。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 成功;有资料返回资料对象,无资料返回空对象 \{\};message=ok + +```json +{ + "code": 200, + "message": "ok", + "data": { + "id": 1, + "userId": 2, + "realName": "张三", + "education": "本科", + "school": "某某大学", + "graduationYear": 2026, + "resumeUrl": "/uploads/resumes/2/resume.pdf", + "skills": "[Java, Spring Boot]", + "createdAt": "2026-08-24T10:00:00" + }, + "timestamp": "2026-08-24T10:00:00Z" +} +``` + +> 未登录、Token 缺失/非法/过期;运行时实际返回 code=401、message=not authenticated + +```json +{ + "code": 401, + "message": "not authenticated", + "timestamp": "2026-08-24T10:00:00Z" +} +``` + +> 已登录但不是 STUDENT 角色(COMPANY/ADMIN);code=2002、message=forbidden + +```json +{ + "code": 2002, + "message": "forbidden", + "data": null, + "timestamp": "2026-08-24T10:00:00Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功;有资料返回资料对象,无资料返回空对象 {};message=ok|[ApiResponseStudentProfileResponse](#schemaapiresponsestudentprofileresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录、Token 缺失/非法/过期;运行时实际返回 code=401、message=not authenticated|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|已登录但不是 STUDENT 角色(COMPANY/ADMIN);code=2002、message=forbidden|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» code|integer(int32)|false|none||none| +|» message|string|false|none||none| +|» data|[StudentProfileResponse](#schemastudentprofileresponse)|false|none||none| +|»» id|integer(int64)|false|none||none| +|»» userId|integer(int64)|false|none||none| +|»» realName|string|false|none||none| +|»» bio|string|false|none||none| +|»» location|string|false|none||none| +|»» education|string|false|none||none| +|»» school|string|false|none||none| +|»» graduationYear|integer(int32)|false|none||none| +|»» resumeUrl|string|false|none||none| +|»» skills|string|false|none||none| +|»» createdAt|string(date-time)|false|none||none| +|» requestId|string|false|none||none| +|» timestamp|string(date-time)|false|none||none| + + + +## PUT 更新学生资料 + +PUT /profile/me + +仅更新传入的非 null 字段;不存在则自动创建 + +> Body 请求参数 + +```json +{ + "realName": "string", + "bio": "string", + "location": "string", + "education": "string", + "school": "string", + "graduationYear": 0, + "resumeUrl": "string", + "skills": [ + "string" + ] +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[StudentProfileUpdateRequest](#schemastudentprofileupdaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 下载简历 + +GET /profile/me/resume + +下载当前学生上传的简历文件,仅 STUDENT 角色 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +"string" +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|string| + + + +## POST 上传简历 + +POST /profile/me/resume + +仅 STUDENT 角色;PDF/DOC/DOCX,≤10MB;上传新简历时替换旧文件 + +> Body 请求参数 + +```yaml +file: "" + +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|object| 否 |none| +|» file|body|string(binary)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## DELETE 删除简历 + +DELETE /profile/me/resume + +删除当前学生的简历文件并清空 resumeUrl,仅 STUDENT 角色 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# 岗位 + + + +## GET 查询已发布岗位列表 + +GET /jobs + +仅返回 PUBLISHED 岗位,支持关键词、城市、用工类型、薪资筛选和分页 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|keyword|query|string| 否 |none| +|city|query|string| 否 |none| +|employmentType|query|string| 否 |none| +|salaryMin|query|integer(int32)| 否 |none| +|salaryMax|query|integer(int32)| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 创建岗位 + +POST /jobs + +仅企业账号可调用,新岗位默认 DRAFT 状态 + +> Body 请求参数 + +```json +{ + "title": "string", + "description": "string", + "requirements": "string", + "city": "string", + "employmentType": "string", + "salaryMin": 0, + "salaryMax": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[JobCreateRequest](#schemajobcreaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 岗位筛选选项 + +GET /jobs/filters + +返回当前 PUBLISHED 岗位可用的城市、用工类型和薪资范围 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 查询岗位详情(公开) + +GET /jobs/public/{jobId} + +仅返回 PUBLISHED 岗位详情;CLOSED 也可查看详情 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 岗位高级搜索 + +GET /jobs/search + +仅返回 PUBLISHED 岗位,支持关键词、城市、用工类型、薪资、公司筛选、排序和分页 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|keyword|query|string| 否 |none| +|city|query|string| 否 |none| +|employmentType|query|string| 否 |none| +|salaryMin|query|integer(int32)| 否 |none| +|salaryMax|query|integer(int32)| 否 |none| +|companyId|query|integer(int64)| 否 |none| +|sort|query|string| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 查询岗位详情 + +GET /jobs/{jobId} + +企业可查看自己管理的岗位详情 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PUT 更新岗位 + +PUT /jobs/{jobId} + +仅岗位所属企业可修改 + +> Body 请求参数 + +```json +{ + "title": "string", + "description": "string", + "requirements": "string", + "city": "string", + "employmentType": "string", + "salaryMin": 0, + "salaryMax": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[JobUpdateRequest](#schemajobupdaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PATCH 发布/关闭岗位 + +PATCH /jobs/{jobId}/status + +DRAFT→PUBLISHED,PUBLISHED→CLOSED;禁止非法回退 + +> Body 请求参数 + +```json +{ + "status": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[JobStatusRequest](#schemajobstatusrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# 企业 + + + +## GET 查询当前企业资料 + +GET /companies/me + +返回当前登录用户绑定的企业资料,未绑定企业返回 404 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PUT 更新企业资料 + +PUT /companies/me + +仅更新传入的非 null 字段;未绑定企业时返回 404 + +> Body 请求参数 + +```json +{ + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "website": "string", + "address": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[CompanyUpdateRequest](#schemacompanyupdaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 创建企业资料 + +POST /companies/me + +仅 COMPANY 角色可调用;已存在时返回 409 + +> Body 请求参数 + +```json +{ + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "website": "string", + "address": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[CompanyCreateRequest](#schemacompanycreaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 查询企业公开详情 + +GET /companies/{companyId} + +匿名可访问,仅返回 6 个公开字段 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|companyId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":0,"name":"string","logoUrl":"string","description":"string","industry":"string","verified":true},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyPublicView](#schemaapiresponsecompanypublicview)| + + + +## GET 查询企业公开岗位列表 + +GET /companies/{companyId}/jobs + +匿名可访问,仅返回 PUBLISHED 岗位 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|companyId|path|integer(int64)| 是 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|sort|query|string| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 查询企业入驻状态 + +GET /companies/me/onboarding + +返回当前企业资料、认证状态和允许动作 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"company":{"id":0,"name":"string","logoUrl":"string","description":"string","industry":"string","website":"string","address":"string","verified":true},"onboardingStatus":"string","latestVerification":{"id":0,"status":"string","submittedAt":"2019-08-24T14:15:22Z","decidedAt":"2019-08-24T14:15:22Z"},"missingFields":["string"],"allowedActions":["string"]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyOnboardingResponse](#schemaapiresponsecompanyonboardingresponse)| + +# 认证 + + + +## POST 手机号验证码登录 + +POST /auth/login + +手机号验证码登录;新手机号创建 UNASSIGNED 统一账号,identitySelectionRequired=true 时前端必须进入首次身份选择;旧角色保持不变。保留原字段及成功码 200。 + +> Body 请求参数 + +```json +{ + "phone": "string", + "code": "string", + "purpose": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[LoginRequest](#schemaloginrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 当前用户信息 + +GET /auth/me + +需要 JWT 认证 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 发送短信验证码 + +POST /auth/sms/send + +开发/测试使用 Mock 发送实现;生产环境未接入短信网关时返回服务不可用。验证码不会写入日志。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|phone|query|string| 是 |none| +|purpose|query|string| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":"string","property2":"string"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringString](#schemaapiresponsemapstringstring)| + + + +## POST 刷新 Token + +POST /auth/refresh + +使用 Refresh Token 换取新的 Access/Refresh Token 对;旧 Refresh Token 立即失效 + +> Body 请求参数 + +```json +{ + "refreshToken": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[RefreshTokenRequest](#schemarefreshtokenrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "accessToken": "string", + "refreshToken": "string", + "expiresIn": 0 + } +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseTokenPairResponse](#schemaapiresponsetokenpairresponse)| + + + +## POST 登出 + +POST /auth/logout + +撤销当前登录会话;需要 Access Token,不接受任何请求体 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "property1": "string", + "property2": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseMapStringString](#schemaapiresponsemapstringstring)| + + + +## POST 首次设置密码 + +POST /auth/password/set + +> Body 请求参数 + +```json +{ + "smsCode": "string", + "newPassword": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[PasswordSetRequest](#schemapasswordsetrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"passwordConfigured":true,"reauthenticationRequired":true},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePasswordOperationResponse](#schemaapiresponsepasswordoperationresponse)| + + + +## POST 短信找回并重置密码 + +POST /auth/password/reset + +> Body 请求参数 + +```json +{ + "phone": "string", + "smsCode": "string", + "newPassword": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[PasswordResetRequest](#schemapasswordresetrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"passwordConfigured":true,"reauthenticationRequired":true},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePasswordOperationResponse](#schemaapiresponsepasswordoperationresponse)| + + + +## POST 手机号密码登录 + +POST /auth/password/login + +使用手机号和密码登录,返回 Access/Refresh Token;不自动创建账号 + +> Body 请求参数 + +```json +{ + "phone": "string", + "password": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[PasswordLoginRequest](#schemapasswordloginrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 修改密码 + +POST /auth/password/change + +> Body 请求参数 + +```json +{ + "currentPassword": "string", + "newPassword": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[PasswordChangeRequest](#schemapasswordchangerequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"passwordConfigured":true,"reauthenticationRequired":true},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePasswordOperationResponse](#schemaapiresponsepasswordoperationresponse)| + + + +## POST 企业注册 + +POST /auth/company/register + +使用 company-register 短信验证码创建企业账号和企业资料 + +> Body 请求参数 + +```json +{ + "phone": "string", + "code": "string", + "password": "stringstring", + "company": { + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "website": "string", + "address": "string" + } +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[CompanyRegistrationRequest](#schemacompanyregistrationrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"userId":0,"companyId":0,"role":"string","onboardingStatus":"string","accessToken":"string","refreshToken":"string","expiresIn":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyRegistrationResponse](#schemaapiresponsecompanyregistrationresponse)| + + + +## POST 首次选择账号身份 + +POST /auth/identity/select + +统一账号一次性选择 STUDENT 或 COMPANY;COMPANY 必须提交 company 资料且注册开关开启。首次成功撤销全部旧会话并返回新凭证;同身份重复请求只返回状态,不重复颁发凭证。 + +> Body 请求参数 + +```json +{ + "identity": "STUDENT", + "company": { + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "website": "string", + "address": "string" + } +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[IdentitySelectionRequest](#schemaidentityselectionrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"userId":0,"role":"string","identitySelectionRequired":true,"companyId":0,"onboardingStatus":"string","accessToken":"string","refreshToken":"string","expiresIn":0,"reauthenticationRequired":true},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseIdentitySelectionResponse](#schemaapiresponseidentityselectionresponse)| + +# 投递 + + + +## POST 投递岗位 + +POST /applications + +只能投递 PUBLISHED 状态的岗位,不可重复投递 + +> Body 请求参数 + +```json +{ + "jobId": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[ApplicationCreateRequest](#schemaapplicationcreaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 我的投递列表 + +GET /applications/me + +查看当前学生自己的投递记录,支持 status 筛选和分页 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|status|query|string| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 投递详情 + +GET /applications/{id} + +查看自己的投递记录详情 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PATCH 更新投递状态(企业) + +PATCH /applications/{id}/status + +SUBMITTED→VIEWED→INTERVIEW→REJECTED/HIRED + +> Body 请求参数 + +```json +{ + "status": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[ApplicationStatusRequest](#schemaapplicationstatusrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 投递状态时间线 + +GET /applications/{id}/timeline + +学生本人或岗位所属企业可查看状态变更历史 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)| + + + +## POST 撤回投递 + +POST /applications/{id}/withdraw + +仅 SUBMITTED/VIEWED 状态可撤回,撤回后不可逆 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 查看岗位投递列表(企业) + +GET /company/applications + +企业查看自己发布的某个岗位收到的投递,支持 status 筛选和分页 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|query|integer(int64)| 是 |none| +|status|query|string| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 企业候选人列表 + +GET /company/candidates + +跨岗位查询本企业所有候选人投递,支持按岗位、状态、关键词筛选,支持分页和排序 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|query|integer(int64)| 否 |none| +|status|query|string| 否 |none| +|keyword|query|string| 否 |none| +|sort|query|string| 否 |none| +|order|query|string| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"items":[{"applicationId":0,"jobId":0,"jobTitle":"string","status":"string","candidateName":"string","candidateSchool":"string","candidateEducation":"string","candidateGraduationYear":0,"candidateAvatarUrl":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"}],"total":0,"page":0,"size":0,"totalPages":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateListResponse](#schemaapiresponsecandidatelistresponse)| + + + +## GET 企业候选人详情 + +GET /company/candidates/{applicationId} + +查看投递详情及候选人公开资料,只能查看本企业岗位下的投递 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|applicationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"applicationId":0,"jobId":0,"jobTitle":"string","jobCity":"string","jobEmploymentType":"string","status":"string","coverLetter":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","candidateName":"string","candidateAvatarUrl":"string","candidateBio":"string","candidateLocation":"string","candidateSchool":"string","candidateEducation":"string","candidateGraduationYear":0,"candidateSkills":["string"]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateDetailView](#schemaapiresponsecandidatedetailview)| + + + +## GET 企业下载候选人简历 + +GET /company/candidates/{applicationId}/resume + +按候选人隐私设置授权后返回简历文件流;不返回存储路径、学生 ID 或联系方式 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|applicationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +"string" +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|string| + +# 系统 + + + +## GET 应用健康检查 + +GET /health + +返回应用及依赖服务状态 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 应用信息 + +GET /info + +返回应用版本、运行时信息 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# health-controller + + + +## GET healthDetails + +GET /health/details + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# API + + + +## GET API 信息 + +GET / + +返回 API v0.1 基本信息 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# 简历版本 + + + +## GET 简历版本列表 + +GET /profile/me/resume-versions + +本人 ACTIVE 版本,version_no 倒序 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)| + + + +## POST 创建简历版本 + +POST /profile/me/resume-versions + +仅本人(STUDENT);PDF/DOC/DOCX ≤10MB;可附版本名 + +> Body 请求参数 + +```yaml +file: "" + +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|name|query|string| 否 |none| +|Authorization|header|string| 否 |none| +|body|body|object| 否 |none| +|» file|body|string(binary)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 简历版本详情 + +GET /profile/me/resume-versions/{id} + +仅本人可查看;他人 403,不存在 404 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PUT 修改简历版本 + +PUT /profile/me/resume-versions/{id} + +本人;可选重命名 + 可选替换文件(替换时删除旧文件) + +> Body 请求参数 + +```yaml +file: "" + +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|name|query|string| 否 |none| +|Authorization|header|string| 否 |none| +|body|body|object| 否 |none| +|» file|body|string(binary)| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## DELETE 删除简历版本 + +DELETE /profile/me/resume-versions/{id} + +默认版本需先设其他默认;导出进行中不可删;删除文件并移除记录 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 设为默认简历 + +POST /profile/me/resume-versions/{id}/default + +同用户最多一个默认;已默认幂等;并发冲突 409 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 创建简历导出任务 + +POST /profile/me/resume-versions/{id}/export + +异步复制该版本文件到导出目录;返回任务状态 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 导出任务状态 + +GET /resume-export-tasks/{taskId} + +仅本人可查询;SUCCESS 含输出文件,FAILED 含失败原因 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|taskId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 下载导出产物 + +GET /resume-export-tasks/{taskId}/download + +仅本人且任务 SUCCESS 可下载;attachment;不暴露内部路径 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|taskId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +"string" +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|string| + +# 求职偏好 + + + +## GET 查询求职偏好 + +GET /profile/me/preferences + +仅 STUDENT;无记录时返回空偏好对象 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PUT 保存求职偏好 + +PUT /profile/me/preferences + +仅 STUDENT;upsert,完全替换传入字段 + +> Body 请求参数 + +```json +{ + "expectedSalaryMin": 0, + "expectedSalaryMax": 0, + "preferredCities": [ + "string" + ], + "employmentTypes": [ + "string" + ], + "preferredIndustries": [ + "string" + ], + "preferredJobTypes": [ + "string" + ], + "remoteAllowed": true, + "salaryRangeValid": true +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[StudentPreferenceRequest](#schemastudentpreferencerequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# Offer + + + +## GET Offer 列表 + +GET /offers + +候选人查看收到的、企业查看发出的 Offer;支持 status、applicationId 筛选与分页 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|status|query|string| 否 |none| +|applicationId|query|integer(int64)| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 创建 Offer + +POST /offers + +仅企业账号;投递存在、岗位属于本企业、投递状态可发、无有效 Offer;默认 DRAFT + +> Body 请求参数 + +```json +{ + "applicationId": 0, + "title": "string", + "salaryMin": 0, + "salaryMax": 0, + "salaryCurrency": "string", + "salaryPeriod": "string", + "workCity": "string", + "employmentType": "string", + "probationMonths": 0, + "benefits": "string", + "description": "string", + "expireAt": "2019-08-24T14:15:22Z", + "onboardingDate": "2019-08-24", + "baseSalary": 0, + "housingAllowance": 0, + "annualBonusMonths": 0, + "otherAllowances": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[OfferCreateRequest](#schemaoffercreaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET Offer 比较 + +GET /offers/compare + +仅候选人本人;比较 2-5 个非 DRAFT 的 Offer + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|ids|query|string| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)| + + + +## GET Offer 统计 + +GET /offers/statistics + +仅企业;统计本企业 Offer 状态分布、接受率、平均响应时间 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|months|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET Offer 详情 + +GET /offers/{id} + +仅目标候选人、所属企业可访问;其他账号返回无权限错误 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PUT 修改 Offer + +PUT /offers/{id} + +仅所属企业、仅 DRAFT 状态可修改;其余状态返回业务错误 + +> Body 请求参数 + +```json +{ + "title": "string", + "salaryMin": 0, + "salaryMax": 0, + "salaryCurrency": "string", + "salaryPeriod": "string", + "workCity": "string", + "employmentType": "string", + "probationMonths": 0, + "benefits": "string", + "description": "string", + "expireAt": "2019-08-24T14:15:22Z", + "onboardingDate": "2019-08-24", + "baseSalary": 0, + "housingAllowance": 0, + "annualBonusMonths": 0, + "otherAllowances": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[OfferUpdateRequest](#schemaofferupdaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 还价列表 + +GET /offers/{id}/counter-offers + +候选人查看本人 Offer 的还价、企业查看本企业 Offer 的还价 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)| + + + +## POST 发起还价 + +POST /offers/{id}/counter-offers + +仅候选人本人;仅 SENT/NEGOTIATING 可发起;SENT 时自动进入 NEGOTIATING + +> Body 请求参数 + +```json +{ + "proposedSalaryMin": 0, + "proposedSalaryMax": 0, + "proposedOnboardingDate": "2019-08-24", + "reason": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[CounterOfferCreateRequest](#schemacounteroffercreaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PATCH 接受还价 + +PATCH /offers/{id}/counter-offers/{coId}/accept + +仅所属企业;接受后更新 Offer 薪资/入职日期并变为 ACCEPTED + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|coId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PATCH 拒绝还价 + +PATCH /offers/{id}/counter-offers/{coId}/reject + +仅所属企业;拒绝后 Offer 保持 NEGOTIATING + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|coId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 手动提醒 + +POST /offers/{id}/remind + +仅所属企业;仅 SENT/NEGOTIATING 可提醒;相同提醒不重复创建 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PATCH Offer 状态变更 + +PATCH /offers/{id}/status + +DRAFT→SENT 企业;SENT/NEGOTIATING→ACCEPTED/REJECTED/NEGOTIATING 候选人;重复提交幂等 + +> Body 请求参数 + +```json +{ + "status": "string", + "reason": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[OfferStatusRequest](#schemaofferstatusrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET Offer 状态时间线 + +GET /offers/{id}/timeline + +完整状态变更历史,含操作者、原因与请求 ID + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)| + +# 岗位评价 + + + +## GET 岗位对比 + +GET /jobs/compare + +公开访问;ids 为 2-3 个公开岗位;返回公开岗位字段与公开评分 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|ids|query|string| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)| + + + +## GET 查询岗位评价列表 + +GET /jobs/{jobId}/reviews + +公开访问;仅返回 PUBLISHED 评价,分页;每条含八维评分 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 创建岗位评价 + +POST /jobs/{jobId}/reviews + +仅 STUDENT;同一学生对同一岗位只能评价一次 + +> Body 请求参数 + +```json +{ + "rating": 1, + "content": "string", + "tags": [ + "string" + ], + "dimensionScores": { + "property1": 0, + "property2": 0 + } +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[JobReviewCreateRequest](#schemajobreviewcreaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 评分汇总 + +GET /jobs/{jobId}/reviews/summary + +公开访问;统计 PUBLISHED 评价的平均分、分布和热门标签 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 岗位评价详情 + +GET /jobs/{jobId}/reviews/{reviewId} + +公开访问;返回单条 PUBLISHED 评价与八维评分 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|reviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PUT 修改评价 + +PUT /jobs/{jobId}/reviews/{reviewId} + +仅评价本人可以修改 + +> Body 请求参数 + +```json +{ + "rating": 1, + "content": "string", + "tags": [ + "string" + ], + "status": "string", + "dimensionScores": { + "property1": 0, + "property2": 0 + } +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|reviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[JobReviewUpdateRequest](#schemajobreviewupdaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## DELETE 删除评价 + +DELETE /jobs/{jobId}/reviews/{reviewId} + +仅评价本人可以删除 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|reviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# 候选人反馈 + + + +## GET 查询候选人反馈 + +GET /applications/{applicationId}/feedback + +该投递的企业或学生可查看 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|applicationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":1,"applicationId":31,"rating":5,"content":"沟通良好","tags":["string"],"createdAt":"2026-08-25T10:00:00","updatedAt":"2026-08-25T10:00:00"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateFeedbackResponse](#schemaapiresponsecandidatefeedbackresponse)| + + + +## PUT 修改候选人反馈 + +PUT /applications/{applicationId}/feedback + +仅岗位所属企业 + +> Body 请求参数 + +```json +{ + "rating": 1, + "content": "string", + "tags": [ + "string" + ] +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|applicationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[CandidateFeedbackRequest](#schemacandidatefeedbackrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":1,"applicationId":31,"rating":5,"content":"沟通良好","tags":["string"],"createdAt":"2026-08-25T10:00:00","updatedAt":"2026-08-25T10:00:00"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateFeedbackResponse](#schemaapiresponsecandidatefeedbackresponse)| + + + +## POST 创建候选人反馈 + +POST /applications/{applicationId}/feedback + +仅岗位所属企业;同一投递只能反馈一次 + +> Body 请求参数 + +```json +{ + "rating": 1, + "content": "string", + "tags": [ + "string" + ] +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|applicationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[CandidateFeedbackRequest](#schemacandidatefeedbackrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":1,"applicationId":31,"rating":5,"content":"沟通良好","tags":["string"],"createdAt":"2026-08-25T10:00:00","updatedAt":"2026-08-25T10:00:00"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateFeedbackResponse](#schemaapiresponsecandidatefeedbackresponse)| + + + +## DELETE 删除候选人反馈 + +DELETE /applications/{applicationId}/feedback + +仅岗位所属企业 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|applicationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# 通知 + + + +## GET 通知列表 + +GET /notifications + +当前用户的通知,分页,按时间倒序 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 全部已读 + +POST /notifications/read-all + +标记当前用户全部通知已读(幂等) + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 未读数 + +GET /notifications/unread-count + +当前用户未读通知数 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 标记已读 + +POST /notifications/{id}/read + +标记单条通知已读(幂等) + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# 岗位收藏 + + + +## GET 我的收藏列表 + +GET /jobs/favorites + +仅 STUDENT;分页,按收藏时间倒序 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 收藏岗位 + +POST /jobs/{jobId}/favorite + +仅 STUDENT;仅 PUBLISHED;幂等 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## DELETE 取消收藏 + +DELETE /jobs/{jobId}/favorite + +仅 STUDENT;幂等,未收藏也返回 200 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# 消息 + + + +## GET 会话列表 + +GET /conversations + +当前用户参与的所有会话 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)| + + + +## POST 创建/获取会话 + +POST /conversations + +创建或返回与另一用户的 DIRECT 会话 + +> Body 请求参数 + +```json +{ + "participantUserId": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[CreateConversationRequest](#schemacreateconversationrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 发送消息 + +POST /conversations/messages + +在会话中发送消息,仅成员可发送 + +> Body 请求参数 + +```json +{ + "conversationId": 0, + "content": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[SendMessageRequest](#schemasendmessagerequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 会话详情 + +GET /conversations/{id} + +查看会话信息和未读数 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 消息列表 + +GET /conversations/{id}/messages + +分页查询会话消息,倒序;仅成员可查看 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"items":[{"id":0,"conversationId":0,"senderUserId":0,"senderScope":"string","content":"string","status":"SENT","recalledAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","isRead":true}],"total":0,"page":0,"size":0,"totalPages":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMessagePageResponse](#schemaapiresponsemessagepageresponse)| + + + +## POST 标记已读 + +POST /conversations/{id}/read + +将当前会话所有消息标记为已读 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 撤回消息 + +POST /conversations/{conversationId}/messages/{messageId}/recall + +仅原发送者可在发送后两分钟内撤回消息;重复撤回幂等返回当前状态 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|conversationId|path|integer(int64)| 是 |none| +|messageId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":0,"conversationId":0,"senderUserId":0,"senderScope":"string","content":"string","status":"SENT","recalledAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","isRead":true},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMessageResponse](#schemaapiresponsemessageresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非会话成员或非原发送者|None| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|会话或消息不存在|None| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|撤回窗口已过期或并发冲突|None| + +# 岗位匹配 + + + +## GET 岗位匹配诊断 + +GET /jobs/{jobId}/match + +仅 STUDENT;返回匹配分、硬性条件、缺口和说明 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# student-review-weight-controller + + + +## GET getPersonalizedScore + +GET /jobs/{jobId}/personalized-review-score + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"jobId":0,"score":0,"status":"string","source":"string","templateCode":"string","configuredWeights":{"property1":0,"property2":0},"effectiveWeights":{"property1":0,"property2":0},"dimensionScores":{"property1":0,"property2":0},"coveredWeight":0,"missingDimensions":["string"]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePersonalizedScoreResponse](#schemaapiresponsepersonalizedscoreresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)| + + + +## GET getMyWeights + +GET /profile/me/review-weights + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"source":"string","templateCode":"string","configuredWeights":{"property1":0,"property2":0},"updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReviewWeightResponse](#schemaapiresponsereviewweightresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)| + + + +## PUT saveWeights + +PUT /profile/me/review-weights + +> Body 请求参数 + +```json +{ + "templateCode": "string", + "weights": { + "property1": 0, + "property2": 0 + } +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[SaveWeightRequest](#schemasaveweightrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"source":"string","templateCode":"string","configuredWeights":{"property1":0,"property2":0},"updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReviewWeightResponse](#schemaapiresponsereviewweightresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)| + + + +## GET getTemplates + +GET /review-weight-templates + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"code":"string","name":"string","description":"string","weights":{"property1":0,"property2":0}}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListWeightTemplateResponse](#schemaapiresponselistweighttemplateresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| + +# 双向匹配阈值 + + + +## GET 查询企业匹配阈值 + +GET /companies/me/match-rule + +未配置返回默认 60 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PUT 更新企业匹配阈值 + +PUT /companies/me/match-rule + +requiredCandidateScore 0-100;首次更新创建配置 + +> Body 请求参数 + +```json +{ + "requiredCandidateScore": 100 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[CompanyMatchRuleRequest](#schemacompanymatchrulerequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 查询学生匹配阈值 + +GET /profile/me/match-rule + +未配置返回默认 60 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PUT 更新学生匹配阈值 + +PUT /profile/me/match-rule + +requiredHrScore 0-100;首次更新创建配置 + +> Body 请求参数 + +```json +{ + "requiredHrScore": 100 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[StudentMatchRuleRequest](#schemastudentmatchrulerequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# 面试 + + + +## GET 查询投递的面试列表 + +GET /applications/{applicationId}/interviews + +学生本人或岗位所属企业可查看 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|applicationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)| + + + +## POST 创建面试邀请 + +POST /applications/{applicationId}/interviews + +企业为投递记录创建面试邀请 + +> Body 请求参数 + +```json +{ + "roundNo": 0, + "title": "string", + "interviewType": "string", + "startAt": "2019-08-24T14:15:22Z", + "endAt": "2019-08-24T14:15:22Z", + "timezone": "string", + "meetingUrl": "string", + "address": "string", + "interviewerName": "string", + "notes": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|applicationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[InterviewCreateRequest](#schemainterviewcreaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 我的面试列表 + +GET /interviews/me + +查看当前用户相关的面试,支持 status/from/to 筛选和分页 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|status|query|string| 否 |none| +|from|query|string(date-time)| 否 |none| +|to|query|string(date-time)| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 面试详情 + +GET /interviews/{interviewId} + +学生本人或企业可查看面试详情 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|interviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PUT 修改面试 + +PUT /interviews/{interviewId} + +企业修改面试时间、地点等信息,仅 SCHEDULED/CONFIRMED 状态可修改 + +> Body 请求参数 + +```json +{ + "title": "string", + "startAt": "2019-08-24T14:15:22Z", + "endAt": "2019-08-24T14:15:22Z", + "timezone": "string", + "meetingUrl": "string", + "address": "string", + "interviewerName": "string", + "notes": "string", + "timeRangeValid": true +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|interviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[InterviewUpdateRequest](#schemainterviewupdaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 取消面试 + +POST /interviews/{interviewId}/cancel + +企业取消已安排的面试 + +> Body 请求参数 + +```json +{ + "reason": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|interviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[InterviewCancelRequest](#schemainterviewcancelrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 完成面试 + +POST /interviews/{interviewId}/complete + +企业在面试时间结束后将面试标记为完成 + +> Body 请求参数 + +```json +{ + "property1": "string", + "property2": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|interviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|object| 否 |none| +|» **additionalProperties**|body|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 响应面试邀请 + +POST /interviews/{interviewId}/respond + +学生接受、拒绝或申请改期 + +> Body 请求参数 + +```json +{ + "action": "string", + "reason": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|interviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[InterviewRespondRequest](#schemainterviewrespondrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 面试状态时间线 + +GET /interviews/{interviewId}/timeline + +查看面试状态变更历史 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|interviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)| + +# 双向匹配 + + + +## PUT 提交求职者岗位意愿分 + +PUT /applications/{id}/candidate-interest-score + +仅投递本人(STUDENT);0-100;MATCHED/CLOSED 后不可修改 + +> Body 请求参数 + +```json +{ + "score": 100 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[ScoreRequest](#schemascorerequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## PUT 提交企业 HR 适配分 + +PUT /applications/{id}/hr-suitability-score + +仅岗位所属企业;0-100;MATCHED/CLOSED 后不可修改 + +> Body 请求参数 + +```json +{ + "score": 100 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[ScoreRequest](#schemascorerequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 查询投递匹配状态 + +GET /applications/{id}/match + +仅投递求职者或岗位所属企业;不暴露内部路径/事件 ID + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# 企业认证 + + + +## GET 待审核认证列表 + +GET /admin/companies/verifications + +管理员查看认证申请列表,支持 status/from/to 筛选和分页 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|status|query|string| 否 |none| +|from|query|string(date-time)| 否 |none| +|to|query|string(date-time)| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 认证审核历史 + +GET /admin/companies/verifications/history + +管理员查看某个认证申请的审核历史 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|verificationId|query|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)| + + + +## GET 认证详情 + +GET /admin/companies/verifications/{id} + +管理员查看认证申请详情 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 审核决定 + +POST /admin/companies/verifications/{id}/decision + +管理员通过或拒绝认证申请,拒绝时必须填写原因 + +> Body 请求参数 + +```json +{ + "decision": "string", + "reason": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[VerificationDecisionRequest](#schemaverificationdecisionrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 查询企业认证状态 + +GET /companies/me/verification + +企业查询自己的认证状态和历史 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 提交企业认证 + +POST /companies/me/verification + +企业提交认证材料(营业执照等),只能提交自己的认证 + +> Body 请求参数 + +```json +{ + "materialsJson": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[VerificationSubmitRequest](#schemaverificationsubmitrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# 双向匹配沟通 + + + +## POST 创建/获取匹配会话 + +POST /applications/{id}/conversation + +仅 MATCHED 双方可调用;重复调用返回同一会话 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + +# 评价审核 + + + +## GET 待审评价列表 + +GET /admin/reviews/pending + +仅 ADMIN;分页 + jobId/riskLevel/createdFrom/createdTo 筛选;不返回明文 IP/UA + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|query|integer(int64)| 否 |none| +|riskLevel|query|string| 否 |none| +|createdFrom|query|string(date-time)| 否 |none| +|createdTo|query|string(date-time)| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 评价审核决策 + +POST /admin/reviews/{reviewId}/decision + +仅 ADMIN;仅 PENDING 可审,重复提交 409;决策写入历史与 audit_logs + +> Body 请求参数 + +```json +{ + "decision": "string", + "reason": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|reviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[ReviewDecisionRequest](#schemareviewdecisionrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## GET 审核历史 + +GET /admin/reviews/history + +仅 ADMIN;分页返回审核结果、审核人、时间与原因 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 企业回复审核决策 + +POST /admin/reviews/replies/{replyId}/decision + +仅 ADMIN;仅 PENDING 可审,重复提交 409 + +> Body 请求参数 + +```json +{ "decision": "APPROVED", "reason": "内容合规,同意公开" } +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|replyId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[ReviewDecisionRequest](#schemareviewdecisionrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":0,"content":"string","status":"string","version":0,"updatedAt":"2019-08-24T14:15:22Z","rejectionReason":"string"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyReviewReplyResponse](#schemaapiresponsecompanyreviewreplyresponse)| + + + +## GET 待审企业回复列表 + +GET /admin/reviews/replies/pending + +仅 ADMIN;分页 + 企业/岗位/回复状态/创建时间范围筛选;moderationStatus 缺省为 PENDING + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|companyId|query|integer(int64)| 否 |none| +|jobId|query|integer(int64)| 否 |none| +|moderationStatus|query|string| 否 |none| +|createdFrom|query|string(date-time)| 否 |none| +|createdTo|query|string(date-time)| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"items":[{"id":1,"reviewId":100,"companyUserId":5,"content":"感谢您的反馈,我们会持续改进","moderationStatus":"PENDING","moderationReason":"内容合规","createdAt":"2026-09-01T10:00:00","updatedAt":"2026-09-01T10:00:00","moderationUpdatedAt":"2026-09-01T10:00:00","jobId":50,"jobTitle":"Java 后端工程师","companyId":2,"companyName":"本源科技","reviewRating":3,"reviewContent":"整体体验不错","studentUserId":2}],"total":0,"page":0,"size":0,"totalPages":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageResponseAdminCompanyReviewReplyResponse](#schemaapiresponsepageresponseadmincompanyreviewreplyresponse)| + +# 求职者评分卡 + + + +## GET 查询百分位 + +GET /profile/me/candidate-percentile + +仅 STUDENT;返回自己在候选人中的评分百分位 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"candidateId":0,"status":"string","scoreType":"string","score":0,"percentile":0,"cohortSize":0,"sampleCount":0,"minimumSampleCount":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidatePercentileResponse](#schemaapiresponsecandidatepercentileresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)| + + + +## GET 查询求职者评分卡 + +GET /profile/me/candidate-score-card + +仅 STUDENT;返回自己的评价聚合卡 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"candidateId":0,"status":"string","overallScore":0,"sampleCount":0,"feedbackSummary":{"totalCount":0,"averageRating":0,"ratingDistribution":{"property1":0,"property2":0},"tags":[{"name":"string","count":0}]},"matchSignals":{"candidateInterestScore":{"average":0,"sampleCount":0},"hrSuitabilityScore":{"average":0,"sampleCount":0}},"unsupportedDimensions":["string"],"generatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateScoreCardResponse](#schemaapiresponsecandidatescorecardresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)| + + + +## GET 查询评分趋势 + +GET /profile/me/candidate-score-trend + +仅 STUDENT;返回最近月份的反馈趋势 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|months|query|integer(int32)| 否 |统计月数,默认 6,范围 1-24| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"candidateId":0,"months":0,"items":[{"month":"string","feedbackCount":0,"averageRating":0,"ratingScore":0}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateScoreTrendResponse](#schemaapiresponsecandidatescoretrendresponse)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|参数不合法|[ApiResponseCandidateScoreTrendResponse](#schemaapiresponsecandidatescoretrendresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)| + +# 求职者评分体系 + + + +## GET 企业候选人评分卡 + +GET /company/candidates/{applicationId}/scoring + +仅岗位所属企业;只读,仅返回 applicationId/overallScore/status/dimensions/generatedAt/rulesVersion,不泄露候选人敏感信息 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|applicationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"applicationId":0,"overallScore":0,"status":"string","dimensions":[{"dimension":"string","score":0,"status":"string"}],"generatedAt":"2019-08-24T14:15:22Z","rulesVersion":"string"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyCandidateScoringResponse](#schemaapiresponsecompanycandidatescoringresponse)| + + + +## GET 综合评分卡 + +GET /profile/me/candidate-scoring + +仅 STUDENT;返回本人 8 维评分、综合分、权重与状态 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"candidateId":0,"status":"string","overallScore":0,"weights":{"property1":0,"property2":0},"dimensions":[{"dimension":"string","score":0,"status":"string","weight":0,"summary":"string"}],"rulesVersion":"string","generatedAt":"2019-08-24T14:15:22Z","explanationVersion":"string","coverage":{"computableDimensions":0,"totalDimensions":0,"includedDimensions":["string"],"excludedDimensions":[{"dimension":"string","status":"string","reason":"string"}]},"comparabilityNotice":"string"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateScoringOverviewResponse](#schemaapiresponsecandidatescoringoverviewresponse)| + + + +## GET 单维度明细 + +GET /profile/me/candidate-scoring/dimensions/{dimension} + +仅 STUDENT;返回某维度分项、归因与数据源;非法 dimension 返回 400 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|dimension|path|string| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"dimension":"string","score":0,"status":"string","subScores":[{"name":"string","score":0,"weight":0,"description":"string"}],"reasons":["string"],"dataSources":[{"source":"string","time":"2019-08-24T14:15:22Z","note":"string"}],"updatedAt":"2019-08-24T14:15:22Z","rulesVersion":"string","displayName":"string","whatItMeasures":"string","interpretation":"string","limitations":["string"],"evidenceLevel":"DIRECT_RULE","ruleContributions":[{"ruleCode":"string","outcome":"APPLIED","contribution":0,"maxContribution":0,"label":"string","observation":"string","explanation":"string"}],"improvementActions":["string"],"explanationVersion":"string","validity":{"completedAt":"2019-08-24T14:15:22Z","validUntil":"2019-08-24T14:15:22Z","expired":true},"calculatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseDimensionScoreDetailResponse](#schemaapiresponsedimensionscoredetailresponse)| + + + +## GET 评分趋势 + +GET /profile/me/candidate-scoring/trend + +仅 STUDENT;基于快照按月返回综合分与维度分(months 1-24) + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|months|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"candidateId":0,"months":0,"items":[{"period":"string","overallScore":0,"rulesVersion":"string","dimensions":{"property1":0,"property2":0}}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateScoringTrendResponse](#schemaapiresponsecandidatescoringtrendresponse)| + +# 评分治理 + + + +## GET 全部申诉列表 + +GET /admin/candidate-scoring/appeals + +仅 ADMIN + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|status|query|string| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 审核决定 + +POST /admin/candidate-scoring/appeals/{appealId}/decision + +仅 ADMIN;APPROVE/REJECT,REJECT 必须填 reason + +> Body 请求参数 + +```json +{ + "decision": "string", + "reason": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|appealId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[AppealDecisionRequest](#schemaappealdecisionrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"appealId":0,"candidateId":0,"dimension":"string","period":"string","status":"string","reason":"string","decision":"string","decisionReason":"string","reviewerId":0,"reviewedAt":"2019-08-24T14:15:22Z","rollbackAt":"2019-08-24T14:15:22Z","scoreAtAppeal":0,"snapshotVersionAtAppeal":0,"rulesVersion":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAppealResponse](#schemaapiresponseappealresponse)| + + + +## GET 申诉历史 + +GET /admin/candidate-scoring/appeals/{appealId}/history + +本人(脱敏,无 actorUserId)或 ADMIN(全量);此路径的本人放行先于 ADMIN 通用规则 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|appealId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"id":0,"fromStatus":"string","toStatus":"string","actorUserId":0,"actorRole":"string","reason":"string","createdAt":"2019-08-24T14:15:22Z"}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListAppealHistoryItem](#schemaapiresponselistappealhistoryitem)| + + + +## POST 执行回滚 + +POST /admin/candidate-scoring/appeals/{appealId}/rollback + +仅 ADMIN;记录前态+确定性重算+新版本;年 3 次上限 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|appealId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"appealId":0,"candidateId":0,"dimension":"string","period":"string","status":"string","reason":"string","decision":"string","decisionReason":"string","reviewerId":0,"reviewedAt":"2019-08-24T14:15:22Z","rollbackAt":"2019-08-24T14:15:22Z","scoreAtAppeal":0,"snapshotVersionAtAppeal":0,"rulesVersion":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAppealResponse](#schemaapiresponseappealresponse)| + + + +## GET 快照变更审计 + +GET /admin/candidate-scoring/snapshots/{candidateUserId}/{dimension}/{period}/history + +仅 ADMIN;按学生+维度+周期查看回滚前后完整变化 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|candidateUserId|path|integer(int64)| 是 |none| +|dimension|path|string| 是 |none| +|period|path|string| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"id":0,"appealId":0,"action":"string","dimension":"string","period":"string","beforeScore":0,"afterScore":0,"beforeVersion":0,"afterVersion":0,"beforeRulesVersion":"string","afterRulesVersion":"string","createdAt":"2019-08-24T14:15:22Z"}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListSnapshotHistoryItem](#schemaapiresponselistsnapshothistoryitem)| + + + +## GET 我的申诉列表 + +GET /profile/me/candidate-scoring/appeals + +仅 STUDENT 本人 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|status|query|string| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)| + + + +## POST 提交评分申诉 + +POST /profile/me/candidate-scoring/appeals + +仅 STUDENT 本人;同一学生+维度+周期 PENDING/APPROVED 唯一 + +> Body 请求参数 + +```json +{ + "dimension": "string", + "period": "string", + "reason": "string", + "idempotencyKey": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[CreateAppealRequest](#schemacreateappealrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"appealId":0,"candidateId":0,"dimension":"string","period":"string","status":"string","reason":"string","decision":"string","decisionReason":"string","reviewerId":0,"reviewedAt":"2019-08-24T14:15:22Z","rollbackAt":"2019-08-24T14:15:22Z","scoreAtAppeal":0,"snapshotVersionAtAppeal":0,"rulesVersion":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAppealResponse](#schemaapiresponseappealresponse)| + + + +## GET 申诉详情 + +GET /profile/me/candidate-scoring/appeals/{appealId} + +本人或 ADMIN + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|appealId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"appealId":0,"candidateId":0,"dimension":"string","period":"string","status":"string","reason":"string","decision":"string","decisionReason":"string","reviewerId":0,"reviewedAt":"2019-08-24T14:15:22Z","rollbackAt":"2019-08-24T14:15:22Z","scoreAtAppeal":0,"snapshotVersionAtAppeal":0,"rulesVersion":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAppealResponse](#schemaapiresponseappealresponse)| + + + +## POST 撤销申诉 + +POST /profile/me/candidate-scoring/appeals/{appealId}/cancel + +仅本人;仅 PENDING 可撤销 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|appealId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"appealId":0,"candidateId":0,"dimension":"string","period":"string","status":"string","reason":"string","decision":"string","decisionReason":"string","reviewerId":0,"reviewedAt":"2019-08-24T14:15:22Z","rollbackAt":"2019-08-24T14:15:22Z","scoreAtAppeal":0,"snapshotVersionAtAppeal":0,"rulesVersion":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAppealResponse](#schemaapiresponseappealresponse)| + +# 评分运营看板 + + + +## GET 全局运营概览 + +GET /admin/scoring/dashboard/overview + +仅 ADMIN + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"totalCompanies":0,"totalJobs":0,"totalCandidates":0,"avgCandidateScore":0,"topCompanies":[{"companyId":0,"companyName":"string","avgCandidateScore":0,"jobCount":0}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAdminDashboardOverviewResponse](#schemaapiresponseadmindashboardoverviewresponse)| + + + +## GET 候选人评分排名 + +GET /company/scoring/dashboard/candidate-rankings + +仅 COMPANY;按学生去重;overallScore DESC, applicationId DESC + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"items":[{"applicationId":0,"jobId":0,"candidateName":"string","candidateSchool":"string","overallScore":0,"percentile":0,"sampleCount":0}],"total":0,"page":0,"size":0,"totalPages":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateRankingListResponse](#schemaapiresponsecandidaterankinglistresponse)| + + + +## GET 单候选人评分排名明细 + +GET /company/scoring/dashboard/candidate-rankings/{applicationId} + +仅 COMPANY;跨企业 403/8004 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|applicationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"applicationId":0,"jobId":0,"candidateName":"string","candidateSchool":"string","overallScore":0,"percentile":0,"cohortSize":0,"dimensionScores":[{"dimension":"string","score":0,"status":"string"}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateRankingDetailResponse](#schemaapiresponsecandidaterankingdetailresponse)| + + + +## GET 岗位评分排名 + +GET /company/scoring/dashboard/job-rankings + +仅 COMPANY;avgRating DESC, jobId DESC;审核通过评价 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"items":[{"jobId":0,"title":"string","city":"string","employmentType":"string","avgRating":0,"reviewCount":0,"rank":0,"cohortSize":0,"dimensionAverages":{"property1":0,"property2":0}}],"total":0,"page":0,"size":0,"totalPages":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseJobRankingListResponse](#schemaapiresponsejobrankinglistresponse)| + + + +## GET 单岗位评分排名 + +GET /company/scoring/dashboard/job-rankings/{jobId} + +仅 COMPANY;跨企业 403/8004 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"jobId":0,"title":"string","city":"string","employmentType":"string","avgRating":0,"reviewCount":0,"rank":0,"cohortSize":0,"dimensionAverages":{"property1":0,"property2":0}},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseJobRankingItem](#schemaapiresponsejobrankingitem)| + + + +## GET 企业评分运营概览 + +GET /company/scoring/dashboard/overview + +仅 COMPANY;只返回本企业数据 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"companyId":0,"totalJobs":0,"publishedJobs":0,"avgJobScore":0,"totalCandidates":0,"avgCandidateScore":0,"scoreDistribution":{"property1":0,"property2":0},"updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseDashboardOverviewResponse](#schemaapiresponsedashboardoverviewresponse)| + + + +## GET 企业评分趋势 + +GET /company/scoring/dashboard/trend + +仅 COMPANY;months 1–24 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|months|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"companyId":0,"months":0,"items":[{"period":"string","overallScore":0,"rulesVersion":"string","dimensions":{"property1":0,"property2":0}}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseScoreTrendResponse](#schemaapiresponsescoretrendresponse)| + + + +## GET 企业回复率统计 + +GET /company/review-reply/stats + +仅企业;返回本公司本月回复率、行业平均回复率、本月待回复条数 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + +# 账号 + +## GET 查询注销状态 + +GET /account/deletion-request + +查询注销状态 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 200, + "message": "success", + "requestId": "string", + "timestamp": "string", + "data": { + "id": 0, + "userId": 0, + "status": "string", + "applyTime": "string", + "expireTime": "string" + } +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» code|integer|true|none||none| +|» message|string|true|none||none| +|» requestId|string|true|none||none| +|» timestamp|string(date‑time)|true|none||none| +|» data|object¦null|true|none||none| +|»» id|integer|false|none||none| +|»» userId|integer|false|none||none| +|»» status|string|false|none||PENDING待注销 / CANCELLED已撤销 / COMPLETED已注销| +|»» applyTime|string(date‑time)|false|none||none| +|»» expireTime|string(date‑time)|false|none||none| + +## POST 注销账号 + +POST /account/deletion-request + +注销账号 + +> Body 请求参数 + +```json +{ + "reason": "ad exercitation ex in in" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|object| 是 |none| +|» reason|body|string| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{"code":200,"message":"ok","data":{"reason":"ad exercitation ex in in","completedAt":"2026-08-26T17:01:31.7861713","requestedAt":"2026-08-26T17:01:31.7861713","status":"COMPLETED"},"requestId":"dade5739b05d4fd2","timestamp":"2026-08-26T09:01:31.946347100Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» code|integer|true|none||none| +|» message|string|true|none||none| +|» requestId|string|true|none||none| +|» timestamp|string(date-time)|true|none||none| +|» data|object|true|none||none| +|»» id|integer|false|none||none| +|»» userId|integer|false|none||none| +|»» status|string|false|none||COMPLETED‑立即注销完成| +|»» applyTime|string(date-time)|false|none||none| +|»» reason|string¦null|false|none||用户填写的注销原因,非必填| + +# 同岗位竞争力排名 + + + +## GET 同岗位竞争力排名 + +GET /jobs/{jobId}/competition-ranking + +仅 STUDENT 且已投递该(PUBLISHED)岗位的学生可查看。返回本人排名/综合分/百分位/维度/缺口及匿名 Top 5。COMPANY/ADMIN 或未投递学生返回 403;岗位不存在或非 PUBLISHED 返回 404。身份仅取自 JWT,不接收 userId/studentUserId/candidateId 参数。topCandidates 每项仅含 rank 与 overallScore,不含任何身份字段(studentUserId/candidateId/name/school/phone/email/resumeUrl/applicationId)。cohort 排除 WITHDRAWN/REJECTED 投递。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|jobId 为空或 <=0|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色或学生未投递该岗位|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|岗位不存在或岗位状态非 PUBLISHED|[ApiResponse](#schemaapiresponse)| + +# 求职进度 + + + +## GET 统一求职进度聚合 + +GET /profile/me/career-progress + +只读学生端接口:汇总当前学生的投递分页、岗位摘要、下一场面试、最近已提交结构化面试评分、可展示 Offer、同岗位竞争力排名,以及待办/通知计数(仅计数,不含通知标题/正文/详情)。仅 STUDENT 可访问,身份仅从 JWT/SecurityContext 获取,不接受 userId/studentUserId/candidateId 参数;COMPANY/ADMIN 返回 403/2002,未登录返回 401,参数非法返回 400/1001。通知详情仍由既有 /notifications 提供。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|status|query|string| 否 |none| +|Authorization|header|string| 否 |none| + +#### 枚举值 + +|属性|值| +|---|---| +|status|SUBMITTED| +|status|VIEWED| +|status|INTERVIEW| +|status|HIRED| +|status|REJECTED| +|status|WITHDRAWN| + +> 返回示例 + +> 200 Response + +``` +{"code":200,"message":"ok","data":{"todo":{"pendingInterviewResponseCount":0,"upcomingConfirmedInterviewCount":0,"pendingOfferResponseCount":0,"unreadNotificationCount":0,"unreadReportDecisionCount":0},"applications":{"items":[{"applicationId":0,"applicationStatus":"string","appliedAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","job":{},"nextInterview":{},"latestSubmittedInterviewScore":{},"offer":{},"competition":{}}],"total":0,"page":0,"size":0,"totalPages":0},"generatedAt":"2019-08-24T14:15:22Z"},"requestId":"req-1","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCareerProgressResponse](#schemaapiresponsecareerprogressresponse)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|page/size/status 参数非法|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)| + +# account-deletion-controller + + + +## GET getStatus + +GET /profile/me/deletion + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":200,"message":"ok","data":{"userId":2,"status":"PENDING","requestedAt":"2019-08-24T14:15:22Z","effectiveAt":"2019-08-24T14:15:22Z","cancelledAt":"2019-08-24T14:15:22Z","completedAt":"2019-08-24T14:15:22Z","version":0},"requestId":"req-1","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseAccountDeletionResponse](#schemaapiresponseaccountdeletionresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)| + + + +## POST initiate + +POST /profile/me/deletion + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":200,"message":"ok","data":{"userId":2,"status":"PENDING","requestedAt":"2019-08-24T14:15:22Z","effectiveAt":"2019-08-24T14:15:22Z","cancelledAt":"2019-08-24T14:15:22Z","completedAt":"2019-08-24T14:15:22Z","version":0},"requestId":"req-1","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseAccountDeletionResponse](#schemaapiresponseaccountdeletionresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|error|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|error|[ApiResponse](#schemaapiresponse)| + + + +## POST cancelAccountDeletion + +POST /profile/me/deletion/cancel + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":200,"message":"ok","data":{"userId":2,"status":"PENDING","requestedAt":"2019-08-24T14:15:22Z","effectiveAt":"2019-08-24T14:15:22Z","cancelledAt":"2019-08-24T14:15:22Z","completedAt":"2019-08-24T14:15:22Z","version":0},"requestId":"req-1","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseAccountDeletionResponse](#schemaapiresponseaccountdeletionresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|error|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|error|[ApiResponse](#schemaapiresponse)| + +# personal-data-export-controller + + + +## GET 查询个人数据导出任务列表 + +GET /profile/me/data-export-tasks + +仅本人;按创建时间倒序分页;status 可选:PENDING/PROCESSING/COMPLETED/FAILED/EXPIRED/CANCELLED + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|integer| 否 |none| +|size|query|integer| 否 |none| +|status|query|string| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"items":[{"taskId":0,"status":"string","format":"string","requestedAt":"2019-08-24T14:15:22Z","startedAt":"2019-08-24T14:15:22Z","completedAt":"2019-08-24T14:15:22Z","expiresAt":"2019-08-24T14:15:22Z","sizeBytes":0,"downloadAvailable":true,"errorCode":"string"}],"totalElements":0,"page":0,"size":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponsePageResponseDataExportTaskResponse](#schemaapiresponsepageresponsedataexporttaskresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|error|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|error|[ApiResponse](#schemaapiresponse)| + + + +## POST 创建个人数据导出任务 + +POST /profile/me/data-export-tasks + +异步生成 ZIP;同 idempotencyKey 重放返回原任务;注销 PENDING/COMPLETED 禁止创建 + +> Body 请求参数 + +```json +{ + "format": "string", + "idempotencyKey": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[CreateDataExportRequest](#schemacreatedataexportrequest)| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"taskId":0,"status":"string","format":"string","requestedAt":"2019-08-24T14:15:22Z","startedAt":"2019-08-24T14:15:22Z","completedAt":"2019-08-24T14:15:22Z","expiresAt":"2019-08-24T14:15:22Z","sizeBytes":0,"downloadAvailable":true,"errorCode":"string"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseDataExportTaskResponse](#schemaapiresponsedataexporttaskresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|error|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|error|[ApiResponse](#schemaapiresponse)| + + + +## GET 查询个人数据导出任务详情 + +GET /profile/me/data-export-tasks/{taskId} + +仅本人;不暴露 storageKey 与内部字段 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|taskId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"taskId":0,"status":"string","format":"string","requestedAt":"2019-08-24T14:15:22Z","startedAt":"2019-08-24T14:15:22Z","completedAt":"2019-08-24T14:15:22Z","expiresAt":"2019-08-24T14:15:22Z","sizeBytes":0,"downloadAvailable":true,"errorCode":"string"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseDataExportTaskResponse](#schemaapiresponsedataexporttaskresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|error|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|error|[ApiResponse](#schemaapiresponse)| + + + +## GET 下载个人数据导出 ZIP + +GET /profile/me/data-export-tasks/{taskId}/download + +仅本人且 COMPLETED 未过期;attachment;需 JWT + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|taskId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +> 401 Response + +``` +{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|string| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|error|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|error|[ApiResponse](#schemaapiresponse)| + +# 结构化面试评分 + + + +## PUT 保存评分草稿 + +PUT /interviews/{interviewId}/score + +企业 owner 为已完成的面试保存/更新草稿;草稿阶段五个维度可为空;overallScore 由服务端计算;SUBMITTED 后再次 PUT 返回 409/9503 + +> Body 请求参数 + +```json +{ + "technicalScore": 1, + "communicationScore": 1, + "problemSolvingScore": 1, + "roleFitScore": 1, + "professionalismScore": 1, + "recommendation": "STRONG_HIRE", + "comment": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|interviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[InterviewScoreSaveRequest](#schemainterviewscoresaverequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":0,"interviewId":0,"applicationId":0,"status":"DRAFT","technicalScore":0,"communicationScore":0,"problemSolvingScore":0,"roleFitScore":0,"professionalismScore":0,"overallScore":0,"recommendation":"STRONG_HIRE","comment":"string","submittedAt":"2019-08-24T14:15:22Z","version":0,"createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseInterviewScoreResponse](#schemaapiresponseinterviewscoreresponse)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|非法维度或推荐值|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非企业/跨企业/非岗位 owner|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|面试不存在 8401|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|未完成 9502 / 已提交 9503 / 并发冲突 9501|[ApiResponse](#schemaapiresponse)| + + + +## GET 查看评分 + +GET /interviews/{interviewId}/score + +企业 owner 可看 DRAFT/SUBMITTED;目标学生仅可看 SUBMITTED;无评分返回 404/9504 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|interviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":0,"interviewId":0,"applicationId":0,"status":"DRAFT","technicalScore":0,"communicationScore":0,"problemSolvingScore":0,"roleFitScore":0,"professionalismScore":0,"overallScore":0,"recommendation":"STRONG_HIRE","comment":"string","submittedAt":"2019-08-24T14:15:22Z","version":0,"createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseInterviewScoreResponse](#schemaapiresponseinterviewscoreresponse)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|请求体校验失败|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非目标学生 / 跨企业 / 非岗位 owner / ADMIN|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|无评分 9504 / 面试不存在 8401|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|未完成 9502|[ApiResponse](#schemaapiresponse)| + + + +## POST 提交评分 + +POST /interviews/{interviewId}/score/submit + +将 DRAFT 提交为 SUBMITTED,提交后不可逆;并发冲突 409;重复提交幂等返回原评分 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|interviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":0,"interviewId":0,"applicationId":0,"status":"DRAFT","technicalScore":0,"communicationScore":0,"problemSolvingScore":0,"roleFitScore":0,"professionalismScore":0,"overallScore":0,"recommendation":"STRONG_HIRE","comment":"string","submittedAt":"2019-08-24T14:15:22Z","version":0,"createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseInterviewScoreResponse](#schemaapiresponseinterviewscoreresponse)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|缺维度 1001|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非企业/跨企业/非岗位 owner|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|面试不存在 8401|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|未完成 9502 / 并发冲突 9501|[ApiResponse](#schemaapiresponse)| + + + +## GET 评分历史 + +GET /interviews/{interviewId}/score/history + +企业 owner 可查看全部历史;目标学生仅在 SUBMITTED 后可见;无历史返回 200 空数组;不返回内部用户标识 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|interviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":[{"id":0,"scoreId":0,"interviewId":0,"fromStatus":"DRAFT","toStatus":"DRAFT","actorRole":"COMPANY","snapshot":{"property1":null,"property2":null},"createdAt":"2019-08-24T14:15:22Z"}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseListInterviewScoreHistoryItem](#schemaapiresponselistinterviewscorehistoryitem)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非目标学生 / 跨企业 / 非岗位 owner / ADMIN|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|面试不存在 8401|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|未完成 9502|[ApiResponse](#schemaapiresponse)| + +# 举报与屏蔽 + + + +## POST 提交举报 + +POST /reports + +targetType=USER 必填 targetUserId;MESSAGE 必填 messageId;reportedUserId 由服务端推导。同 reporter+idempotencyKey+相同请求体返回原举报 200;不同请求体 409/9606;同目标同分类已有 PENDING 409/9603。限流:每用户每小时 10 次,超限 429/9609。 + +> Body 请求参数 + +```json +{ + "targetType": "USER", + "targetUserId": 0, + "messageId": 0, + "category": "string", + "reason": "string", + "evidenceUrls": [ + "string" + ], + "idempotencyKey": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[CreateReportRequest](#schemacreatereportrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":0,"targetType":"USER","targetUserId":0,"messageId":0,"reportedUserId":0,"category":"string","reason":"string","evidenceUrls":["string"],"status":"PENDING","decision":"RESOLVED","decisionNote":"string","decidedAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","messagePreview":"string","reportedUser":{"userId":0,"nickname":"string","role":"string"},"history":[{"id":0,"fromStatus":"string","toStatus":"string","actorUserId":0,"actorRole":"string","note":"string","createdAt":"2019-08-24T14:15:22Z"}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReportResponse](#schemaapiresponsereportresponse)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|BAD_REQUEST(1001)/举报自己 9602/理由缺失 9607|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|无权访问消息(2002,不泄露消息是否存在)|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|重复举报 9603 / 幂等冲突 9606|[ApiResponse](#schemaapiresponse)| +|429|[Too Many Requests](https://tools.ietf.org/html/rfc6585#section-4)|频率超限 9609|[ApiResponse](#schemaapiresponse)| + + + +## GET 我的举报列表 + +GET /reports/me + +仅返回当前用户创建的举报;身份来自 JWT;不返回举报人内部信息/phone/email/passwordHash/resumeUrl/消息全文;支持 status/page/size。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|status|query|string| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"items":[{"id":0,"targetType":"USER","targetUserId":0,"messageId":0,"reportedUserId":0,"category":"string","reason":"string","evidenceUrls":["string"],"status":"PENDING","decision":"RESOLVED","decisionNote":"string","decidedAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","messagePreview":"string","reportedUser":{"userId":0,"nickname":"string","role":"string"},"history":[{"id":null,"fromStatus":null,"toStatus":null,"actorUserId":null,"actorRole":null,"note":null,"createdAt":null}]}],"totalElements":0,"page":0,"size":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageResponseReportResponse](#schemaapiresponsepageresponsereportresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| + + + +## GET 举报详情(本人/ADMIN) + +GET /reports/{id} + +当前举报人本人或 ADMIN 可查看;其他 403/2002;非 ADMIN 不显示举报人内部 ID/手机号/邮箱;MESSAGE 仅返回脱敏 messagePreview。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":0,"targetType":"USER","targetUserId":0,"messageId":0,"reportedUserId":0,"category":"string","reason":"string","evidenceUrls":["string"],"status":"PENDING","decision":"RESOLVED","decisionNote":"string","decidedAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","messagePreview":"string","reportedUser":{"userId":0,"nickname":"string","role":"string"},"history":[{"id":0,"fromStatus":"string","toStatus":"string","actorUserId":0,"actorRole":"string","note":"string","createdAt":"2019-08-24T14:15:22Z"}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReportResponse](#schemaapiresponsereportresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非本人非 ADMIN(2002)|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|举报不存在(9601)|[ApiResponse](#schemaapiresponse)| + + + +## PUT 屏蔽用户 + +PUT /blocks/{blockedUserId} + +屏蔽自己 400/9608;目标不存在复用用户不存在错误码;已存在返回 200 不新增;不影响系统通知/投递/Offer/面试/评分/评价。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|blockedUserId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":0,"blockedUserId":0,"nickname":"string","createdAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseBlockRelationResponse](#schemaapiresponseblockrelationresponse)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|屏蔽自己 9608|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| + + + +## DELETE 解除屏蔽 + +DELETE /blocks/{blockedUserId} + +幂等:不存在时返回 200 不报错。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|blockedUserId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK(幂等)|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| + + + +## GET 我的屏蔽列表 + +GET /blocks/me + +仅返回当前用户主动屏蔽的用户;不返回对方手机号/邮箱/密码/简历地址;支持 page/size。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"items":[{"id":0,"blockedUserId":0,"nickname":"string","createdAt":"2019-08-24T14:15:22Z"}],"totalElements":0,"page":0,"size":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageResponseBlockRelationResponse](#schemaapiresponsepageresponseblockrelationresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| + +# 举报管理 + + + +## GET 举报列表(ADMIN) + +GET /admin/reports + +仅 ADMIN;COMPANY/STUDENT/未登录分别 403/403/401;支持 status/targetType/category/page/size;响应脱敏。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|status|query|string| 否 |none| +|targetType|query|string| 否 |none| +|category|query|string| 否 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"items":[{"id":0,"targetType":"USER","targetUserId":0,"messageId":0,"reportedUserId":0,"category":"string","reason":"string","evidenceUrls":["string"],"status":"PENDING","decision":"RESOLVED","decisionNote":"string","decidedAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","messagePreview":"string","reportedUser":{"userId":0,"nickname":"string","role":"string"},"history":[{"id":null,"fromStatus":null,"toStatus":null,"actorUserId":null,"actorRole":null,"note":null,"createdAt":null}]}],"totalElements":0,"page":0,"size":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageResponseReportResponse](#schemaapiresponsepageresponsereportresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|[ApiResponse](#schemaapiresponse)| + + + +## GET 举报详情(ADMIN) + +GET /admin/reports/{id} + +仅 ADMIN;可见类型/分类/理由/脱敏证据 URL/MESSAGE 脱敏内容/会话最小信息/处理历史;不返回密码/JWT/手机号/邮箱/resumeUrl。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":0,"targetType":"USER","targetUserId":0,"messageId":0,"reportedUserId":0,"category":"string","reason":"string","evidenceUrls":["string"],"status":"PENDING","decision":"RESOLVED","decisionNote":"string","decidedAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","messagePreview":"string","reportedUser":{"userId":0,"nickname":"string","role":"string"},"history":[{"id":0,"fromStatus":"string","toStatus":"string","actorUserId":0,"actorRole":"string","note":"string","createdAt":"2019-08-24T14:15:22Z"}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReportResponse](#schemaapiresponsereportresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|举报不存在(9601)|[ApiResponse](#schemaapiresponse)| + + + +## POST 举报处理决定(ADMIN) + +POST /admin/reports/{id}/decision + +仅 ADMIN;decision 仅 RESOLVED/REJECTED;REJECTED 必填 note;仅 PENDING 可处理,重复 409/9604,非法流转 409/9605;处理后发送一条 REPORT_DECISION 通知。 + +> Body 请求参数 + +```json +{ + "decision": "RESOLVED", + "note": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[ReportDecisionRequest](#schemareportdecisionrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":{"id":0,"targetType":"USER","targetUserId":0,"messageId":0,"reportedUserId":0,"category":"string","reason":"string","evidenceUrls":["string"],"status":"PENDING","decision":"RESOLVED","decisionNote":"string","decidedAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","messagePreview":"string","reportedUser":{"userId":0,"nickname":"string","role":"string"},"history":[{"id":0,"fromStatus":"string","toStatus":"string","actorUserId":0,"actorRole":"string","note":"string","createdAt":"2019-08-24T14:15:22Z"}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReportResponse](#schemaapiresponsereportresponse)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|参数错误(REJECTED 缺 note)|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|举报不存在(9601)|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|重复决定 9604 / 非法流转 9605|[ApiResponse](#schemaapiresponse)| + +# 企业回复评价 + + + +## GET 查询回复 + +GET /reviews/{reviewId}/reply + +公开访问;回复所属企业可见任意状态,其他用户仅见已审核通过的回复 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|reviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## PUT 更新回复 + +PUT /reviews/{reviewId}/reply + +仅回复所属企业;更新后需重新审核 + +> Body 请求参数 + +```json +{ "content": "感谢您的反馈,我们会持续改进。" } +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|reviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|object| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## POST 创建回复 + +POST /reviews/{reviewId}/reply + +仅岗位所属企业;一条评价只能回复一次 + +> Body 请求参数 + +```json +{ "content": "感谢您的反馈,我们会持续改进。" } +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|reviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|object| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## DELETE 删除回复 + +DELETE /reviews/{reviewId}/reply + +仅回复所属企业 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|reviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + +# RIASEC 职业兴趣测评 + + + +## GET 测评类型列表 + +GET /assessments/types + +返回全部 ACTIVE 测评定义。任意已登录用户可访问;未登录 401。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| + + + +## GET 题目列表 + +GET /assessments/{type}/questions + +返回指定测评的 ACTIVE 题目,隐藏维度/reverseScored/source/版本等内部字段。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|type|path|string| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|测评类型不存在(9701)|[ApiResponse](#schemaapiresponse)| + + + +## POST 创建答卷 + +POST /assessments/attempts + +照六维各抽 5 题共 30 道并持久化,刷新不重抽。幂等键重放返回原答卷;同键不同定义 409/9709;已有活跃答卷 409/9708。仅 STUDENT。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT(2002)|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|测评类型不存在(9701)|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|活跃答卷/幂等冲突(9708/9709)|[ApiResponse](#schemaapiresponse)| + + + +## GET 答卷详情 + +GET /assessments/attempts/{attemptId} + +返回本次抽中的 30 道题(固定顺序)、已保存答案、进度与当前状态。仅本人可访问;非 STUDENT 403。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|attemptId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非本人或非 STUDENT(2002)|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|答卷不存在(9702)|[ApiResponse](#schemaapiresponse)| + + + +## PATCH 保存答案 + +PATCH /assessments/attempts/{attemptId}/answers + +单题或批量保存,重复保存 upsert;value 1-5;题目必须属于本答卷;版本冲突 409/9707;首次保存后状态置为 IN_PROGRESS。仅本人。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|attemptId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非本人或非 STUDENT(2002)|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|答卷不存在(9702)|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|非法状态/并发(9703/9707)|[ApiResponse](#schemaapiresponse)| + + + +## POST 提交答卷 + +POST /assessments/attempts/{attemptId}/submit + +30 题全答且每维各 5 题后方可提交(否则 400/9706);提交后生成结果并写审计;重复提交返回原结果,不重复生成与审计。仅本人。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|attemptId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|未完成(9706)|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非本人或非 STUDENT(2002)|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|答卷不存在(9702)|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|非法状态(9703)|[ApiResponse](#schemaapiresponse)| + + + +## GET 查看结果 + +GET /assessments/attempts/{attemptId}/result + +答卷 COMPLETED 后返回聚合分、类型排名、探索方向。仅本人可访问。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|attemptId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非本人或非 STUDENT(2002)|[ApiResponse](#schemaapiresponse)| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|答卷不存在(9702)|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|答卷未完成(9703)|[ApiResponse](#schemaapiresponse)| + + + +## GET 我的测评历史 + +GET /assessments/me + +分页返回当前学生的全部答卷与结果概要。仅 STUDENT 本人可访问。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT(2002)|[ApiResponse](#schemaapiresponse)| + +# privacy-settings-controller + + + +## GET getMyPrivacySettings + +GET /profile/me/privacy + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":200,"message":"ok","data":{"id":1,"studentUserId":2,"resumeVisibility":"APPLIED_COMPANIES","contactVisible":true,"version":0,"createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"req-1","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功;无记录时返回默认对象(PRIVATE/contactVisible=false/version=0)|[ApiResponsePrivacySettingsResponse](#schemaapiresponseprivacysettingsresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)| + + + +## PUT updateMyPrivacySettings + +PUT /profile/me/privacy + +> Body 请求参数 + +```json +{ + "resumeVisibility": "APPLIED_COMPANIES", + "contactVisible": true, + "version": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[PrivacySettingsUpdateRequest](#schemaprivacysettingsupdaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{"code":200,"message":"ok","data":{"id":1,"studentUserId":2,"resumeVisibility":"APPLIED_COMPANIES","contactVisible":true,"version":0,"createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"req-1","timestamp":"2019-08-24T14:15:22Z"} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功;返回更新后的隐私设置对象|[ApiResponsePrivacySettingsResponse](#schemaapiresponseprivacysettingsresponse)| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|请求体校验失败(缺少必填字段或非法枚举)|[ApiResponse](#schemaapiresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|乐观锁版本冲突(9201)|[ApiResponse](#schemaapiresponse)| + +# 四维能力测评 + + + +## GET 能力测评类型列表 + +GET /abilities/types + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "typeCode": "string", + "displayName": "string", + "description": "string", + "questionCount": 0, + "attemptQuestionCount": 0, + "timeLimitMinutes": 0, + "resultValidDays": 0, + "status": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAbilityTypeResponse](#schemaapiresponseabilitytyperesponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None| + + + +## POST 创建能力测评答卷 + +POST /abilities/attempts + +> Body 请求参数 + +```json +{ + "typeCode": "string", + "idempotencyKey": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[CreateAbilityAttemptRequest](#schemacreateabilityattemptrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "attemptId": 0, + "status": "string", + "answeredCount": 0, + "totalQuestions": 0, + "completionRate": 0, + "startedAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "remainingSeconds": 0, + "questions": [ + { + "attemptQuestionId": 0, + "position": 0, + "itemType": "string", + "stem": "string", + "options": [ + { + "optionId": null, + "text": null + } + ], + "selectedOptionId": "string" + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAbilityAttemptResponse](#schemaapiresponseabilityattemptresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|9801|None| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|9808/9809/9810|None| +|429|[Too Many Requests](https://tools.ietf.org/html/rfc6585#section-4)|9811|None| + + + +## GET getAbilityAttempt + +GET /abilities/attempts/{attemptId} + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|attemptId|path|string| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "attemptId": 0, + "status": "string", + "answeredCount": 0, + "totalQuestions": 0, + "completionRate": 0, + "startedAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "remainingSeconds": 0, + "questions": [ + { + "attemptQuestionId": 0, + "position": 0, + "itemType": "string", + "stem": "string", + "options": [ + { + "optionId": null, + "text": null + } + ], + "selectedOptionId": "string" + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAbilityAttemptResponse](#schemaapiresponseabilityattemptresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|404|None| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|409|None| + + + +## PATCH saveAbilityAnswers + +PATCH /abilities/attempts/{attemptId}/answers + +> Body 请求参数 + +```json +{ + "answers": [ + { + "attemptQuestionId": 0, + "selectedOptionId": "stri" + } + ] +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|attemptId|path|string| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[SaveAbilityAnswersRequest](#schemasaveabilityanswersrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "attemptId": 0, + "status": "string", + "answeredCount": 0, + "totalQuestions": 0, + "completionRate": 0, + "startedAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "remainingSeconds": 0, + "questions": [ + { + "attemptQuestionId": 0, + "position": 0, + "itemType": "string", + "stem": "string", + "options": [ + { + "optionId": null, + "text": null + } + ], + "selectedOptionId": "string" + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAbilityAttemptResponse](#schemaapiresponseabilityattemptresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|404|None| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|409|None| + + + +## POST submitAbilityAttempt + +POST /abilities/attempts/{attemptId}/submit + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|attemptId|path|string| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "attemptId": 0, + "typeCode": "string", + "status": "string", + "validityStatus": "string", + "validUntil": "2019-08-24T14:15:22Z", + "dimensionScores": [ + { + "code": "string", + "score": 0, + "answeredCount": 0 + } + ], + "overallScore": 0, + "weaknesses": [ + { + "code": "string", + "score": 0 + } + ], + "improvementAreas": [ + { + "dimension": "string", + "currentScore": 0, + "summary": "string", + "actions": [ + "string" + ] + } + ], + "radar": [ + { + "code": "string", + "value": 0 + } + ], + "answeredCount": 0, + "completionRate": 0, + "questionFeedback": [ + { + "attemptQuestionId": 0, + "position": 0, + "stem": "string", + "selectedOptionId": "string", + "awardedScore": 0, + "maxScore": 0, + "explanation": "string" + } + ], + "questionSetVersion": "string", + "rulesVersion": "string", + "generatedAt": "2019-08-24T14:15:22Z", + "disclaimer": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAbilityResultResponse](#schemaapiresponseabilityresultresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|404|None| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|409|None| + + + +## GET getAbilityResult + +GET /abilities/attempts/{attemptId}/result + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|attemptId|path|string| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "attemptId": 0, + "typeCode": "string", + "status": "string", + "validityStatus": "string", + "validUntil": "2019-08-24T14:15:22Z", + "dimensionScores": [ + { + "code": "string", + "score": 0, + "answeredCount": 0 + } + ], + "overallScore": 0, + "weaknesses": [ + { + "code": "string", + "score": 0 + } + ], + "improvementAreas": [ + { + "dimension": "string", + "currentScore": 0, + "summary": "string", + "actions": [ + "string" + ] + } + ], + "radar": [ + { + "code": "string", + "value": 0 + } + ], + "answeredCount": 0, + "completionRate": 0, + "questionFeedback": [ + { + "attemptQuestionId": 0, + "position": 0, + "stem": "string", + "selectedOptionId": "string", + "awardedScore": 0, + "maxScore": 0, + "explanation": "string" + } + ], + "questionSetVersion": "string", + "rulesVersion": "string", + "generatedAt": "2019-08-24T14:15:22Z", + "disclaimer": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAbilityResultResponse](#schemaapiresponseabilityresultresponse)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None| +|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|404|None| +|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|409|None| + + + +## GET 我的能力测评历史 + +GET /abilities/me + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "attemptId": 0, + "typeCode": "string", + "status": "string", + "validityStatus": "string", + "overallScore": 0, + "answeredCount": 0, + "completionRate": 0, + "startedAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "completedAt": "2019-08-24T14:15:22Z", + "validUntil": "2019-08-24T14:15:22Z" + } + ], + "totalElements": 0, + "page": 0, + "size": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageResponseAbilityHistoryItem](#schemaapiresponsepageresponseabilityhistoryitem)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None| + +# 风险治理 + + + +## GET 风险概览(ADMIN) + +GET /admin/scoring/risk/overview + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|from|query|string| 否 |none| +|to|query|string| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "openCount": 0, + "bySeverity": [ + { + "severity": "string", + "count": 0 + } + ], + "byRule": [ + { + "ruleCode": "string", + "count": 0 + } + ], + "lastDetectedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRiskOverviewResponse](#schemaapiresponseriskoverviewresponse)| + + + +## GET 风险趋势(ADMIN) + +GET /admin/scoring/risk/trend + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|bucket|query|string| 否 |none| +|from|query|string| 否 |none| +|to|query|string| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "bucket": "string", + "items": [ + { + "time": "2019-08-24T14:15:22Z", + "count": 0 + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRiskTrendResponse](#schemaapiresponserisktrendresponse)| + + + +## GET 风险分布(ADMIN) + +GET /admin/scoring/risk/distribution + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|from|query|string| 否 |none| +|to|query|string| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "ruleCode": "string", + "severity": "string", + "count": 0 + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRiskDistributionResponse](#schemaapiresponseriskdistributionresponse)| + + + +## GET 风险事件分页(ADMIN) + +GET /admin/scoring/risk/events + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|string| 否 |none| +|size|query|string| 否 |none| +|status|query|string| 否 |none| +|severity|query|string| 否 |none| +|ruleCode|query|string| 否 |none| +|from|query|string| 否 |none| +|to|query|string| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "eventId": 0, + "ruleCode": "string", + "sourceAction": "string", + "severity": "string", + "status": "string", + "occurrenceCount": 0, + "windowStartedAt": "2019-08-24T14:15:22Z", + "windowEndedAt": "2019-08-24T14:15:22Z", + "detectedAt": "2019-08-24T14:15:22Z", + "version": 0 + } + ], + "totalElements": 0, + "page": 0, + "size": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageResponseRiskEventResponse](#schemaapiresponsepageresponseriskeventresponse)| + + + +## GET 风险规则列表(ADMIN) + +GET /admin/scoring/risk/rules + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": [ + { + "ruleCode": "string", + "sourceAction": "string", + "thresholdCount": 0, + "windowMinutes": 0, + "severity": "string", + "enabled": true, + "version": 0 + } + ], + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListRiskRuleResponse](#schemaapiresponselistriskruleresponse)| + + + +## PUT 更新风险规则(ADMIN) + +PUT /admin/scoring/risk/rules/{ruleCode} + +> Body 请求参数 + +```json +{ + "enabled": true, + "thresholdCount": 0, + "windowMinutes": 0, + "severity": "string", + "expectedVersion": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|ruleCode|path|string| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[RiskRuleUpdateRequest](#schemariskruleupdaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "ruleCode": "string", + "sourceAction": "string", + "thresholdCount": 0, + "windowMinutes": 0, + "severity": "string", + "enabled": true, + "version": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRiskRuleResponse](#schemaapiresponseriskruleresponse)| + + + +## POST 风险事件人工操作(ADMIN) + +POST /admin/scoring/risk/events/{eventId}/actions + +> Body 请求参数 + +```json +{ + "action": "string", + "reasonCode": "string", + "expectedVersion": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|eventId|path|string| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[RiskEventActionRequest](#schemariskeventactionrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "eventId": 0, + "ruleCode": "string", + "sourceAction": "string", + "severity": "string", + "status": "string", + "occurrenceCount": 0, + "windowStartedAt": "2019-08-24T14:15:22Z", + "windowEndedAt": "2019-08-24T14:15:22Z", + "detectedAt": "2019-08-24T14:15:22Z", + "version": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRiskEventResponse](#schemaapiresponseriskeventresponse)| + +# 岗位推荐 + + + +## GET recommendationTaxonomies + +GET /job-recommendation-taxonomies + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": [ + { + "code": "string", + "parentCode": "string", + "type": "string", + "displayName": "string" + } + ] +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListTaxonomyResponse](#schemaapiresponselisttaxonomyresponse)| + + + +## GET myJobRecommendations + +GET /profile/me/job-recommendations + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|integer| 否 |none| +|size|query|integer| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "jobId": 0, + "title": "string", + "city": "string", + "employmentType": "string", + "salaryMin": 0, + "salaryMax": 0, + "mode": "PERSONALIZED", + "score": 0, + "reasons": [ + "string" + ] + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + } +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageJobRecommendationItem](#schemaapiresponsepagejobrecommendationitem)| + + + +## POST createRecommendationFeedback + +POST /profile/me/job-recommendations/{jobId}/feedback + +> Body 请求参数 + +```json +{ + "feedbackType": "string", + "reasonType": "string", + "idempotencyKey": "string", + "expectedVersion": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|string| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[RecommendationFeedbackRequest](#schemarecommendationfeedbackrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "jobId": 0, + "feedbackType": "string", + "reasonType": "string", + "status": "string", + "version": 0 + } +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRecommendationFeedbackResponse](#schemaapiresponserecommendationfeedbackresponse)| + + + +## DELETE revokeNotInterestedFeedback + +DELETE /profile/me/job-recommendations/{jobId}/feedback + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|string| 是 |none| +|expectedVersion|query|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|None| + + + +## GET companyRecommendationProfile + +GET /companies/me/jobs/{jobId}/recommendation-profile + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|string| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "jobId": 0, + "industryCode": "string", + "jobFamilyCode": "string", + "riasecWeights": { + "property1": 0, + "property2": 0 + }, + "abilityExpectations": { + "property1": 0, + "property2": 0 + }, + "enabled": true, + "reviewStatus": "string", + "reviewReason": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z" + } +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRecommendationProfileResponse](#schemaapiresponserecommendationprofileresponse)| + + + +## PUT updateCompanyRecommendationProfile + +PUT /companies/me/jobs/{jobId}/recommendation-profile + +> Body 请求参数 + +```json +{ + "industryCode": "string", + "jobFamilyCode": "string", + "riasecWeights": { + "property1": 0, + "property2": 0 + }, + "abilityExpectations": { + "property1": 0, + "property2": 0 + }, + "enabled": true, + "expectedVersion": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|string| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[RecommendationProfileRequest](#schemarecommendationprofilerequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "jobId": 0, + "industryCode": "string", + "jobFamilyCode": "string", + "riasecWeights": { + "property1": 0, + "property2": 0 + }, + "abilityExpectations": { + "property1": 0, + "property2": 0 + }, + "enabled": true, + "reviewStatus": "string", + "reviewReason": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z" + } +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRecommendationProfileResponse](#schemaapiresponserecommendationprofileresponse)| + + + +## GET adminRecommendationProfiles + +GET /admin/job-recommendation-profiles + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "jobId": 0, + "industryCode": "string", + "jobFamilyCode": "string", + "riasecWeights": { + "property1": 0, + "property2": 0 + }, + "abilityExpectations": { + "property1": 0, + "property2": 0 + }, + "enabled": true, + "reviewStatus": "string", + "reviewReason": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z" + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + } +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageRecommendationProfileResponse](#schemaapiresponsepagerecommendationprofileresponse)| + + + +## POST decideRecommendationProfile + +POST /admin/job-recommendation-profiles/{jobId}/decision + +> Body 请求参数 + +```json +{ + "decision": "APPROVE", + "reasonCode": "string", + "expectedVersion": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|string| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[RecommendationDecisionRequest](#schemarecommendationdecisionrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "jobId": 0, + "industryCode": "string", + "jobFamilyCode": "string", + "riasecWeights": { + "property1": 0, + "property2": 0 + }, + "abilityExpectations": { + "property1": 0, + "property2": 0 + }, + "enabled": true, + "reviewStatus": "string", + "reviewReason": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z" + } +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRecommendationProfileResponse](#schemaapiresponserecommendationprofileresponse)| + +# 企业评价管理 + + + +## GET listCompanyJobReviews + +GET /companies/me/job-reviews + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|query|integer(int64)| 否 |none| +|rating|query|integer| 否 |none| +|reviewModerationStatus|query|string| 否 |none| +|replyStatus|query|string| 否 |none| +|createdFrom|query|string(date-time)| 否 |none| +|createdTo|query|string(date-time)| 否 |none| +|page|query|integer| 否 |none| +|size|query|integer| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "reviewId": 0, + "job": { + "id": 0, + "title": "string" + }, + "rating": 0, + "content": "string", + "tags": [ + "string" + ], + "dimensionScores": { + "property1": 0, + "property2": 0 + }, + "reviewStatus": "string", + "reviewCreatedAt": "2019-08-24T14:15:22Z", + "reply": { + "id": 0, + "content": "string", + "status": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z", + "rejectionReason": "string" + } + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReviewReplyPageResponse](#schemaapiresponsereviewreplypageresponse)| + + + +## GET getCompanyJobReview + +GET /companies/me/job-reviews/{reviewId} + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|reviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "reviewId": 0, + "job": { + "id": 0, + "title": "string" + }, + "rating": 0, + "content": "string", + "tags": [ + "string" + ], + "dimensionScores": { + "property1": 0, + "property2": 0 + }, + "reviewStatus": "string", + "reviewCreatedAt": "2019-08-24T14:15:22Z", + "reply": { + "id": 0, + "content": "string", + "status": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z", + "rejectionReason": "string" + } + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyReviewDetailResponse](#schemaapiresponsecompanyreviewdetailresponse)| + + + +## POST createCompanyReviewReply + +POST /companies/me/job-reviews/{reviewId}/reply + +> Body 请求参数 + +```json +{ + "content": "string", + "idempotencyKey": "0c14c6a6-6f50-4d1e-b0c4-b46ff43ba6a1" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|reviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[CreateCompanyReviewReplyRequest](#schemacreatecompanyreviewreplyrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "id": 0, + "content": "string", + "status": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z", + "rejectionReason": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyReviewReplyResponse](#schemaapiresponsecompanyreviewreplyresponse)| + + + +## PUT reviseCompanyReviewReply + +PUT /companies/me/job-reviews/{reviewId}/reply + +> Body 请求参数 + +```json +{ + "content": "string", + "expectedVersion": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|reviewId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[UpdateCompanyReviewReplyRequest](#schemaupdatecompanyreviewreplyrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "id": 0, + "content": "string", + "status": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z", + "rejectionReason": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyReviewReplyResponse](#schemaapiresponsecompanyreviewreplyresponse)| + +# 官方回复审核 + + + +## GET listPendingReviewReplies + +GET /admin/review-replies/pending + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|companyId|query|integer(int64)| 否 |none| +|jobId|query|integer(int64)| 否 |none| +|riskLevel|query|string| 否 |none| +|createdFrom|query|string(date-time)| 否 |none| +|createdTo|query|string(date-time)| 否 |none| +|page|query|integer| 否 |none| +|size|query|integer| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "replyId": 0, + "reviewId": 0, + "jobId": 0, + "jobTitle": "string", + "companyId": 0, + "companyName": "string", + "rating": 0, + "reviewContent": "string", + "reviewModerationStatus": "string", + "replyContent": "string", + "replyStatus": "string", + "version": 0, + "riskScore": 0, + "riskLevel": "string", + "reasonCodes": [ + "string" + ], + "createdAt": "2019-08-24T14:15:22Z" + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAdminReviewReplyPageResponse](#schemaapiresponseadminreviewreplypageresponse)| + + + +## POST decideReviewReply + +POST /admin/review-replies/{replyId}/decision + +> Body 请求参数 + +```json +{ + "decision": "APPROVE", + "reason": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|replyId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[ReviewReplyDecisionRequest](#schemareviewreplydecisionrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "replyId": 0, + "reviewId": 0, + "jobId": 0, + "jobTitle": "string", + "companyId": 0, + "companyName": "string", + "rating": 0, + "reviewContent": "string", + "reviewModerationStatus": "string", + "replyContent": "string", + "replyStatus": "string", + "version": 0, + "riskScore": 0, + "riskLevel": "string", + "reasonCodes": [ + "string" + ], + "createdAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAdminReviewReplyResponse](#schemaapiresponseadminreviewreplyresponse)| + +# 企业人才发现 + +## GET 查询人才发现授权 + +GET /profile/me/talent-discovery + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "enabled": true, + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseTalentDiscoveryPreferenceResponse](#schemaapiresponsetalentdiscoverypreferenceresponse)| + +## PUT 更新人才发现授权 + +PUT /profile/me/talent-discovery + +> Body 请求参数 + +```json +{ + "enabled": true, + "expectedVersion": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|[TalentDiscoveryPreferenceUpdateRequest](#schematalentdiscoverypreferenceupdaterequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "enabled": true, + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseTalentDiscoveryPreferenceResponse](#schemaapiresponsetalentdiscoverypreferenceresponse)| + +## GET 查询岗位人才发现推荐 + +GET /companies/me/jobs/{jobId}/talent-recommendations + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "mode": "PERSONALIZED", + "items": [ + { + "candidateKey": "string", + "candidateLabel": "string", + "city": "string", + "education": "string", + "graduationYear": 0, + "skills": [ + "string" + ], + "fitBand": "HIGH", + "summary": "string", + "signalsAvailable": [ + "PREFERENCE" + ] + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0, + "message": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseTalentDiscoveryPageResponse](#schemaapiresponsetalentdiscoverypageresponse)| + +# 企业人才邀约 + +## POST 创建人才邀约 + +POST /companies/me/jobs/{jobId}/talent-invitations + +> Body 请求参数 + +```json +{ + "candidateKey": "string", + "message": "string", + "idempotencyKey": "0c14c6a6-6f50-4d1e-b0c4-b46ff43ba6a1" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|jobId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[CreateTalentInvitationRequest](#schemacreatetalentinvitationrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "invitationId": 0, + "jobId": 0, + "jobTitle": "string", + "candidateLabel": "string", + "message": "string", + "status": "PENDING", + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseCompanyTalentInvitationResponse](#schemaapiresponsecompanytalentinvitationresponse)| + +## GET 企业邀约列表 + +GET /companies/me/talent-invitations + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "invitationId": 0, + "jobId": 0, + "jobTitle": "string", + "candidateLabel": "string", + "message": "string", + "status": "PENDING", + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseCompanyTalentInvitationPageResponse](#schemaapiresponsecompanytalentinvitationpageresponse)| + +## GET 企业邀约详情 + +GET /companies/me/talent-invitations/{invitationId} + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|invitationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "invitationId": 0, + "jobId": 0, + "jobTitle": "string", + "candidateLabel": "string", + "message": "string", + "status": "PENDING", + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseCompanyTalentInvitationResponse](#schemaapiresponsecompanytalentinvitationresponse)| + +## GET 学生收到的邀约列表 + +GET /profile/me/talent-invitations + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "invitationId": 0, + "companyId": 0, + "companyName": "string", + "jobId": 0, + "jobTitle": "string", + "jobCity": "string", + "message": "string", + "status": "PENDING", + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseStudentTalentInvitationPageResponse](#schemaapiresponsestudenttalentinvitationpageresponse)| + +## GET 学生邀约详情 + +GET /profile/me/talent-invitations/{invitationId} + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|invitationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "invitationId": 0, + "companyId": 0, + "companyName": "string", + "jobId": 0, + "jobTitle": "string", + "jobCity": "string", + "message": "string", + "status": "PENDING", + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseStudentTalentInvitationResponse](#schemaapiresponsestudenttalentinvitationresponse)| + +## POST 处理人才邀约 + +POST /profile/me/talent-invitations/{invitationId}/decision + +> Body 请求参数 + +```json +{ + "decision": "ACCEPT", + "expectedVersion": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|invitationId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|[TalentInvitationDecisionRequest](#schematalentinvitationdecisionrequest)| 是 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "code": 0, + "message": "string", + "data": { + "invitationId": 0, + "companyId": 0, + "companyName": "string", + "jobId": 0, + "jobTitle": "string", + "jobCity": "string", + "message": "string", + "status": "PENDING", + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseStudentTalentInvitationResponse](#schemaapiresponsestudenttalentinvitationresponse)| + +# 行业技能词云 + + + +## GET 查询行业技能词云 + +GET /skills/word-cloud + +返回当前筛选范围内的全部技能,按热度降序排列;前端取前十条作为 TOP10。仅 STUDENT 可访问。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|industryId|query|integer(int64)| 是 |行业 ID,必填正整数| +|occupationId|query|integer(int64)| 是 |职位 ID,必填正整数| +|categoryId|query|integer(int64)| 否 |技能分类 ID,可选正整数;省略时返回职位下全部分类| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 成功返回筛选范围内的全部技能 + +```json +{ + "code": 200, + "message": "ok", + "data": { + "industry": { + "id": 1, + "code": "INTERNET", + "name": "互联网" + }, + "occupation": { + "id": 1, + "code": "FRONTEND_DEVELOPER", + "name": "前端开发工程师" + }, + "category": null, + "total": 1, + "items": [ + { + "rank": 1, + "skillId": 26, + "skillCode": "REACT", + "nameZh": "React", + "nameEn": "React", + "sourceType": "O*NET", + "sourceCode": "15-1254.00|React|2.E.7.h", + "categoryId": 103, + "categoryName": "前端框架", + "heat": 4.38, + "heatSourceCode": "15-1254.00", + "heatElementId": "2.E.7.h", + "heatProxy": true + } + ] + } +} +``` + +> 400 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功返回筛选范围内的全部技能|Inline| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|筛选参数缺失、非正整数或节点关系非法|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|已登录但不是 STUDENT 角色|Inline| + +### 返回数据结构 + + + +## GET 查询个人技能匹配度 + +GET /skills/match + +使用当前 STUDENT 的个人技能,与筛选结果热度 TOP10 比对并返回命中、缺失和匹配度。仅 STUDENT 可访问。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|industryId|query|integer(int64)| 是 |行业 ID,必填正整数| +|occupationId|query|integer(int64)| 是 |职位 ID,必填正整数| +|categoryId|query|integer(int64)| 否 |技能分类 ID,可选正整数;省略时使用职位下全部技能| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 成功返回个人技能匹配结果 + +```json +{ + "code": 200, + "message": "ok", + "data": { + "matchScore": 50, + "matchedCount": 1, + "totalCount": 2, + "matchedSkills": [ + { + "rank": 1, + "skillId": 26, + "skillCode": "REACT", + "nameZh": "React", + "nameEn": "React", + "sourceType": "O*NET", + "sourceCode": "15-1254.00|React|2.E.7.h", + "categoryId": 103, + "categoryName": "前端框架", + "heat": 4.38, + "heatSourceCode": "15-1254.00", + "heatElementId": "2.E.7.h", + "heatProxy": true + } + ], + "missingSkills": [ + { + "rank": 2, + "skillId": 31, + "skillCode": "DOCKER", + "nameZh": "Docker", + "nameEn": "Docker", + "sourceType": "O*NET", + "sourceCode": "15-1299.08|Docker|2.E.7.h", + "categoryId": 105, + "categoryName": "工程化工具", + "heat": 4.12, + "heatSourceCode": "15-1299.08", + "heatElementId": "2.E.7.h", + "heatProxy": true + } + ] + } +} +``` + +> 400 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功返回个人技能匹配结果|Inline| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|筛选参数缺失、非正整数或节点关系非法|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|已登录但不是 STUDENT 角色|Inline| + +### 返回数据结构 + + + +## GET 生成个人学习路径 + +GET /skills/learning-path + +仅针对个人 TOP10 中未命中的技能,按热度顺序返回优先级和通用学习建议。仅 STUDENT 可访问。 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|industryId|query|integer(int64)| 是 |行业 ID,必填正整数| +|occupationId|query|integer(int64)| 是 |职位 ID,必填正整数| +|categoryId|query|integer(int64)| 否 |技能分类 ID,可选正整数;省略时使用职位下全部技能| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 成功返回缺失技能的学习路径;没有缺口时列表为空 + +```json +{ + "code": 200, + "message": "ok", + "data": { + "total": 1, + "items": [ + { + "priority": 1, + "skillId": 26, + "skillName": "React", + "categoryId": 103, + "categoryName": "前端框架", + "suggestion": "先理解 React 的核心概念与生命周期,再通过一个小型项目练习集成。" + } + ] + } +} +``` + +> 400 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功返回缺失技能的学习路径;没有缺口时列表为空|Inline| +|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|筛选参数缺失、非正整数或节点关系非法|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|已登录但不是 STUDENT 角色|Inline| + +### 返回数据结构 + +# 公司知识介绍 + + + +## GET 读取本企业知识配置 + +GET /onboarding/company/knowledge + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## PUT 创建或更新本企业知识配置 + +PUT /onboarding/company/knowledge + +> Body 请求参数 + +```json +{ + "culture": "我们倡导透明沟通、长期主义和持续学习。", + "workPolicies": "核心工作时间为 10:00-17:00;每周可申请 1 天远程办公。", + "onboardingGuide": "入职当天 9:30 到 A 座 8 层前台报到,联系行政同事。", + "version": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|object| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## GET 读取公司知识介绍 + +GET /onboarding/companies/{companyId}/knowledge + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|companyId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + +# 入职清单 + + + +## PUT 更新本企业自定义清单项 + +PUT /onboarding/company/checklist-items/{itemId} + +使用 version 执行乐观锁控制 + +> Body 请求参数 + +```json +{ + "title": "领取并激活门禁卡", + "description": "到行政前台领取门禁卡,并在企业 App 中完成激活。", + "category": "ADMIN", + "sortOrder": 900, + "required": true, + "active": true, + "version": 2 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|itemId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|object| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## DELETE 软删除本企业自定义清单项 + +DELETE /onboarding/company/checklist-items/{itemId} + +重复删除保持幂等成功 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|itemId|path|integer(int64)| 是 |none| +|version|query|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## PUT 更新清单条目完成状态 + +PUT /onboarding/companies/{companyId}/checklist/items/{itemId}/completion + +使用绝对状态语义设置当前学生的完成状态 + +> Body 请求参数 + +```json +{ + "completed": true, + "version": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|companyId|path|integer(int64)| 是 |none| +|itemId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| +|body|body|object| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## GET 查询本企业自定义清单项 + +GET /onboarding/company/checklist-items + +返回活动与软删除项及当前版本 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## POST 创建本企业自定义清单项 + +POST /onboarding/company/checklist-items + +支持 idempotencyKey 重放与冲突检测 + +> Body 请求参数 + +```json +{ + "title": "领取门禁卡", + "description": "到行政前台领取门禁卡并激活权限。", + "category": "ADMIN", + "sortOrder": 1000, + "required": false, + "idempotencyKey": "company-10-card-20260917-001" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|object| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## GET 读取有效入职清单 + +GET /onboarding/companies/{companyId}/checklist + +返回通用项与企业活动自定义项的合并结果 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|companyId|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + +# 薪资计算器 + + + +## GET 查询本人薪资历史 + +GET /salary-calculator/calculations + +仅 STUDENT;按创建时间倒序分页 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|page|query|integer(int32)| 否 |none| +|size|query|integer(int32)| 否 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## POST 计算并保存到手工资 + +POST /salary-calculator/calculations + +仅 STUDENT;校验政策版本,支持幂等键 + +> Body 请求参数 + +```json +{ + "cityCode": "110000", + "grossMonthlySalary": 15000.00, + "monthIndex": 3, + "specialAdditionalDeduction": 2000.00, + "expectedPolicyVersion": "2026-09-20-v1", + "idempotencyKey": "salary-20260921-001", + "overrides": { + "socialSecurityBase": 15000.00, + "housingFundBase": 15000.00, + "pensionRate": 0.08, + "medicalRate": 0.02, + "unemploymentRate": 0.005, + "housingFundRate": 0.12, + "seriousIllnessMonthlyFee": 0.00 + } +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| +|body|body|object| 是 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## GET 查询启用城市列表 + +GET /salary-calculator/cities + +仅 STUDENT;返回全部启用城市摘要,不分页 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## GET 查询城市默认参数 + +GET /salary-calculator/cities/{cityCode} + +仅 STUDENT;返回城市元数据和当前整套默认参数 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|cityCode|path|string| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## GET 查询本人薪资历史详情 + +GET /salary-calculator/calculations/{id} + +仅 STUDENT;返回完整快照 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + + + +## DELETE 删除本人薪资历史 + +DELETE /salary-calculator/calculations/{id} + +仅 STUDENT;物理删除 + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|path|integer(int64)| 是 |none| +|Authorization|header|string| 否 |none| + +> 返回示例 + +> 200 Response + +``` +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline| + +### 返回数据结构 + +# 数据模型 + +

StudentProfileUpdateRequest

+ + + + + + +```json +{ + "realName": "string", + "bio": "string", + "location": "string", + "education": "string", + "school": "string", + "graduationYear": 0, + "resumeUrl": "string", + "skills": [ + "string" + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|realName|string|false|none||none| +|bio|string|false|none||none| +|location|string|false|none||none| +|education|string|false|none||none| +|school|string|false|none||none| +|graduationYear|integer(int32)|false|none||none| +|resumeUrl|string|false|none||none| +|skills|[string]|false|none||none| + +

AccountDeletionResponse

+ + + + + + +```json +{ + "userId": 2, + "status": "PENDING", + "requestedAt": "2019-08-24T14:15:22Z", + "effectiveAt": "2019-08-24T14:15:22Z", + "cancelledAt": "2019-08-24T14:15:22Z", + "completedAt": "2019-08-24T14:15:22Z", + "version": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|userId|integer(int64)|false|none||none| +|status|string|false|none||注销状态:NONE/PENDING/COMPLETED| +|requestedAt|string(date-time)¦null|false|none||none| +|effectiveAt|string(date-time)¦null|false|none||none| +|cancelledAt|string(date-time)¦null|false|none||none| +|completedAt|string(date-time)¦null|false|none||none| +|version|integer(int64)|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|status|NONE| +|status|PENDING| +|status|COMPLETED| + +

TaxonomyResponse

+ + + + + + +```json +{ + "code": "string", + "parentCode": "string", + "type": "string", + "displayName": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|string|false|none||none| +|parentCode|string|false|none||none| +|type|string|false|none||none| +|displayName|string|false|none||none| + +

IdentitySelectionRequest

+ + + + + + +```json +{ + "identity": "STUDENT", + "company": { + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "website": "string", + "address": "string" + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|identity|string|true|none||none| +|company|[CompanyDetails](#schemacompanydetails)|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|identity|STUDENT| +|identity|COMPANY| + +

ApiResponseMapStringObject

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "property1": null, + "property2": null + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|object|false|none||none| +|» **additionalProperties**|any|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

RecommendationFeedbackRequest

+ + + + + + +```json +{ + "feedbackType": "string", + "reasonType": "string", + "idempotencyKey": "string", + "expectedVersion": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|feedbackType|string|true|none||none| +|reasonType|string|false|none||none| +|idempotencyKey|string|true|none||none| +|expectedVersion|integer(int64)|true|none||none| + +

IdentitySelectionResponse

+ + + + + + +```json +{ + "userId": 0, + "role": "string", + "identitySelectionRequired": true, + "companyId": 0, + "onboardingStatus": "string", + "accessToken": "string", + "refreshToken": "string", + "expiresIn": 0, + "reauthenticationRequired": true +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|userId|integer(int64)|false|none||none| +|role|string|false|none||none| +|identitySelectionRequired|boolean|false|none||none| +|companyId|integer(int64)|false|none||none| +|onboardingStatus|string|false|none||none| +|accessToken|string|false|none||none| +|refreshToken|string|false|none||none| +|expiresIn|integer(int64)|false|none||none| +|reauthenticationRequired|boolean|false|none||none| + +

JobUpdateRequest

+ + + + + + +```json +{ + "title": "string", + "description": "string", + "requirements": "string", + "city": "string", + "employmentType": "string", + "salaryMin": 0, + "salaryMax": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|title|string|false|none||none| +|description|string|false|none||none| +|requirements|string|false|none||none| +|city|string|false|none||none| +|employmentType|string|false|none||none| +|salaryMin|integer(int32)|false|none||none| +|salaryMax|integer(int32)|false|none||none| + +

StudentPreferenceRequest

+ + + + + + +```json +{ + "expectedSalaryMin": 0, + "expectedSalaryMax": 0, + "preferredCities": [ + "string" + ], + "employmentTypes": [ + "string" + ], + "preferredIndustries": [ + "string" + ], + "preferredJobTypes": [ + "string" + ], + "remoteAllowed": true, + "salaryRangeValid": true +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|expectedSalaryMin|integer(int32)|false|none||none| +|expectedSalaryMax|integer(int32)|false|none||none| +|preferredCities|[string]|false|none||none| +|employmentTypes|[string]|false|none||none| +|preferredIndustries|[string]|false|none||none| +|preferredJobTypes|[string]|false|none||none| +|remoteAllowed|boolean|false|none||none| +|salaryRangeValid|boolean|false|none||none| + +

SaveWeightRequest

+ + + + + + +```json +{ + "templateCode": "string", + "weights": { + "property1": 0, + "property2": 0 + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|templateCode|string|false|none||none| +|weights|object|false|none||none| +|» **additionalProperties**|number|false|none||none| + +

RecommendationProfileRequest

+ + + + + + +```json +{ + "industryCode": "string", + "jobFamilyCode": "string", + "riasecWeights": { + "property1": 0, + "property2": 0 + }, + "abilityExpectations": { + "property1": 0, + "property2": 0 + }, + "enabled": true, + "expectedVersion": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|industryCode|string|true|none||none| +|jobFamilyCode|string|true|none||none| +|riasecWeights|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|abilityExpectations|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|enabled|boolean|true|none||none| +|expectedVersion|integer(int64)|true|none||none| + +

ApiResponseIdentitySelectionResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "userId": 0, + "role": "string", + "identitySelectionRequired": true, + "companyId": 0, + "onboardingStatus": "string", + "accessToken": "string", + "refreshToken": "string", + "expiresIn": 0, + "reauthenticationRequired": true + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[IdentitySelectionResponse](#schemaidentityselectionresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CompanyUpdateRequest

+ + + + + + +```json +{ + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "website": "string", + "address": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|name|string|true|none||none| +|logoUrl|string|false|none||none| +|description|string|false|none||none| +|industry|string|false|none||none| +|website|string|false|none||none| +|address|string|false|none||none| + +

ApiResponseReviewWeightResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "source": "string", + "templateCode": "string", + "configuredWeights": { + "property1": 0, + "property2": 0 + }, + "updatedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[ReviewWeightResponse](#schemareviewweightresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": null, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|any|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CareerProgressResponse

+ + + + + + +```json +{ + "todo": { + "pendingInterviewResponseCount": 0, + "upcomingConfirmedInterviewCount": 0, + "pendingOfferResponseCount": 0, + "unreadNotificationCount": 0, + "unreadReportDecisionCount": 0 + }, + "applications": { + "items": [ + { + "applicationId": 0, + "applicationStatus": "string", + "appliedAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z", + "job": { + "jobId": 0, + "title": "string", + "companyName": "string", + "city": "string", + "employmentType": "string", + "jobStatus": "string" + }, + "nextInterview": { + "interviewId": 0, + "roundNo": 0, + "title": "string", + "interviewType": "string", + "startAt": "2019-08-24T14:15:22Z", + "endAt": "2019-08-24T14:15:22Z", + "status": "string" + }, + "latestSubmittedInterviewScore": { + "interviewId": 0, + "overallScore": 0, + "recommendation": "string", + "submittedAt": "2019-08-24T14:15:22Z" + }, + "offer": { + "offerId": 0, + "status": "string", + "title": "string", + "expireAt": "2019-08-24T14:15:22Z", + "onboardingDate": "2019-08-24" + }, + "competition": { + "eligible": true, + "rank": 0, + "cohortSize": 0, + "overallScore": 0, + "percentile": 0, + "status": "string", + "mySnapshotPeriod": "string", + "rulesVersion": "string" + } + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "generatedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|todo|[ProgressTodoSummary](#schemaprogresstodosummary)|false|none||none| +|applications|[PaginatedApplications](#schemapaginatedapplications)|false|none||none| +|generatedAt|string(date-time)|false|none||none| + +

RecommendationDecisionRequest

+ + + + + + +```json +{ + "decision": "APPROVE", + "reasonCode": "string", + "expectedVersion": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|decision|string|true|none||none| +|reasonCode|string|false|none||none| +|expectedVersion|integer(int64)|true|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|decision|APPROVE| +|decision|REJECT| + +

JobCreateRequest

+ + + + + + +```json +{ + "title": "string", + "description": "string", + "requirements": "string", + "city": "string", + "employmentType": "string", + "salaryMin": 0, + "salaryMax": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|title|string|true|none||none| +|description|string|true|none||none| +|requirements|string|false|none||none| +|city|string|true|none||none| +|employmentType|string|true|none||none| +|salaryMin|integer(int32)|false|none||none| +|salaryMax|integer(int32)|false|none||none| + +

ReviewWeightResponse

+ + + + + + +```json +{ + "source": "string", + "templateCode": "string", + "configuredWeights": { + "property1": 0, + "property2": 0 + }, + "updatedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|source|string|false|none||none| +|templateCode|string|false|none||none| +|configuredWeights|object|false|none||none| +|» **additionalProperties**|number|false|none||none| +|updatedAt|string(date-time)|false|none||none| + +

ProgressTodoSummary

+ + + + + + +```json +{ + "pendingInterviewResponseCount": 0, + "upcomingConfirmedInterviewCount": 0, + "pendingOfferResponseCount": 0, + "unreadNotificationCount": 0, + "unreadReportDecisionCount": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|pendingInterviewResponseCount|integer(int64)|false|none||none| +|upcomingConfirmedInterviewCount|integer(int64)|false|none||none| +|pendingOfferResponseCount|integer(int64)|false|none||none| +|unreadNotificationCount|integer(int64)|false|none||none| +|unreadReportDecisionCount|integer(int64)|false|none||none| + +

RecommendationProfileResponse

+ + + + + + +```json +{ + "jobId": 0, + "industryCode": "string", + "jobFamilyCode": "string", + "riasecWeights": { + "property1": 0, + "property2": 0 + }, + "abilityExpectations": { + "property1": 0, + "property2": 0 + }, + "enabled": true, + "reviewStatus": "string", + "reviewReason": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|jobId|integer(int64)|false|none||none| +|industryCode|string|false|none||none| +|jobFamilyCode|string|false|none||none| +|riasecWeights|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|abilityExpectations|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|enabled|boolean|false|none||none| +|reviewStatus|string|false|none||none| +|reviewReason|string|false|none||none| +|version|integer(int64)|false|none||none| +|updatedAt|string(date-time)|false|none||none| + +

CompanyCreateRequest

+ + + + + + +```json +{ + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "website": "string", + "address": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|name|string|true|none||none| +|logoUrl|string|false|none||none| +|description|string|false|none||none| +|industry|string|false|none||none| +|website|string|false|none||none| +|address|string|false|none||none| + +

PaginatedApplications

+ + + + + + +```json +{ + "items": [ + { + "applicationId": 0, + "applicationStatus": "string", + "appliedAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z", + "job": { + "jobId": 0, + "title": "string", + "companyName": "string", + "city": "string", + "employmentType": "string", + "jobStatus": "string" + }, + "nextInterview": { + "interviewId": 0, + "roundNo": 0, + "title": "string", + "interviewType": "string", + "startAt": "2019-08-24T14:15:22Z", + "endAt": "2019-08-24T14:15:22Z", + "status": "string" + }, + "latestSubmittedInterviewScore": { + "interviewId": 0, + "overallScore": 0, + "recommendation": "string", + "submittedAt": "2019-08-24T14:15:22Z" + }, + "offer": { + "offerId": 0, + "status": "string", + "title": "string", + "expireAt": "2019-08-24T14:15:22Z", + "onboardingDate": "2019-08-24" + }, + "competition": { + "eligible": true, + "rank": 0, + "cohortSize": 0, + "overallScore": 0, + "percentile": 0, + "status": "string", + "mySnapshotPeriod": "string", + "rulesVersion": "string" + } + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|items|[[CareerProgressItem](#schemacareerprogressitem)]|false|none||none| +|total|integer(int64)|false|none||none| +|page|integer(int32)|false|none||none| +|size|integer(int32)|false|none||none| +|totalPages|integer(int32)|false|none||none| + +

RecommendationFeedbackResponse

+ + + + + + +```json +{ + "jobId": 0, + "feedbackType": "string", + "reasonType": "string", + "status": "string", + "version": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|jobId|integer(int64)|false|none||none| +|feedbackType|string|false|none||none| +|reasonType|string|false|none||none| +|status|string|false|none||none| +|version|integer(int64)|false|none||none| + +

ApiResponseMapStringString

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "property1": "string", + "property2": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|object|false|none||none| +|» **additionalProperties**|string|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

StudentMatchRuleRequest

+ + + + + + +```json +{ + "requiredHrScore": 100 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|requiredHrScore|integer(int32)|true|none||none| + +

CareerProgressItem

+ + + + + + +```json +{ + "applicationId": 0, + "applicationStatus": "string", + "appliedAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z", + "job": { + "jobId": 0, + "title": "string", + "companyName": "string", + "city": "string", + "employmentType": "string", + "jobStatus": "string" + }, + "nextInterview": { + "interviewId": 0, + "roundNo": 0, + "title": "string", + "interviewType": "string", + "startAt": "2019-08-24T14:15:22Z", + "endAt": "2019-08-24T14:15:22Z", + "status": "string" + }, + "latestSubmittedInterviewScore": { + "interviewId": 0, + "overallScore": 0, + "recommendation": "string", + "submittedAt": "2019-08-24T14:15:22Z" + }, + "offer": { + "offerId": 0, + "status": "string", + "title": "string", + "expireAt": "2019-08-24T14:15:22Z", + "onboardingDate": "2019-08-24" + }, + "competition": { + "eligible": true, + "rank": 0, + "cohortSize": 0, + "overallScore": 0, + "percentile": 0, + "status": "string", + "mySnapshotPeriod": "string", + "rulesVersion": "string" + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|applicationId|integer(int64)|false|none||none| +|applicationStatus|string|false|none||none| +|appliedAt|string(date-time)|false|none||none| +|updatedAt|string(date-time)|false|none||none| +|job|[JobSummary](#schemajobsummary)|false|none||none| +|nextInterview|[InterviewSummary](#schemainterviewsummary)|false|none||none| +|latestSubmittedInterviewScore|[ScoreSummary](#schemascoresummary)|false|none||none| +|offer|[OfferSummary](#schemaoffersummary)|false|none||none| +|competition|[CompetitionSummary](#schemacompetitionsummary)|false|none||none| + +

JobRecommendationItem

+ + + + + + +```json +{ + "jobId": 0, + "title": "string", + "city": "string", + "employmentType": "string", + "salaryMin": 0, + "salaryMax": 0, + "mode": "PERSONALIZED", + "score": 0, + "reasons": [ + "string" + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|jobId|integer(int64)|false|none||none| +|title|string|false|none||none| +|city|string|false|none||none| +|employmentType|string|false|none||none| +|salaryMin|integer|false|none||none| +|salaryMax|integer|false|none||none| +|mode|string|false|none||none| +|score|number|false|none||none| +|reasons|[string]|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|mode|PERSONALIZED| +|mode|FALLBACK| + +

LoginRequest

+ + + + + + +```json +{ + "phone": "string", + "code": "string", + "purpose": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|phone|string|true|none||none| +|code|string|true|none||none| +|purpose|string|false|none||none| + +

CandidateFeedbackRequest

+ + + + + + +```json +{ + "rating": 1, + "content": "string", + "tags": [ + "string" + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|rating|integer(int32)|true|none||none| +|content|string|true|none||none| +|tags|[string]|false|none||none| + +

JobSummary

+ + + + + + +```json +{ + "jobId": 0, + "title": "string", + "companyName": "string", + "city": "string", + "employmentType": "string", + "jobStatus": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|jobId|integer(int64)|false|none||none| +|title|string|false|none||none| +|companyName|string|false|none||none| +|city|string|false|none||none| +|employmentType|string|false|none||none| +|jobStatus|string|false|none||none| + +

ApiResponseListTaxonomyResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": [ + { + "code": "string", + "parentCode": "string", + "type": "string", + "displayName": "string" + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[[TaxonomyResponse](#schemataxonomyresponse)]|false|none||none| + +

ApplicationCreateRequest

+ + + + + + +```json +{ + "jobId": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|jobId|integer(int64)|true|none||none| + +

OfferUpdateRequest

+ + + + + + +```json +{ + "title": "string", + "salaryMin": 0, + "salaryMax": 0, + "salaryCurrency": "string", + "salaryPeriod": "string", + "workCity": "string", + "employmentType": "string", + "probationMonths": 0, + "benefits": "string", + "description": "string", + "expireAt": "2019-08-24T14:15:22Z", + "onboardingDate": "2019-08-24", + "baseSalary": 0, + "housingAllowance": 0, + "annualBonusMonths": 0, + "otherAllowances": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|title|string|false|none||none| +|salaryMin|integer(int32)|false|none||none| +|salaryMax|integer(int32)|false|none||none| +|salaryCurrency|string|false|none||none| +|salaryPeriod|string|false|none||none| +|workCity|string|false|none||none| +|employmentType|string|false|none||none| +|probationMonths|integer(int32)|false|none||none| +|benefits|string|false|none||none| +|description|string|false|none||none| +|expireAt|string(date-time)|false|none||none| +|onboardingDate|string(date)|false|none||none| +|baseSalary|integer(int32)|false|none||none| +|housingAllowance|integer(int32)|false|none||none| +|annualBonusMonths|integer(int32)|false|none||none| +|otherAllowances|string|false|none||none| + +

InterviewSummary

+ + + + + + +```json +{ + "interviewId": 0, + "roundNo": 0, + "title": "string", + "interviewType": "string", + "startAt": "2019-08-24T14:15:22Z", + "endAt": "2019-08-24T14:15:22Z", + "status": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|interviewId|integer(int64)|false|none||none| +|roundNo|integer(int32)|false|none||none| +|title|string|false|none||none| +|interviewType|string|false|none||none| +|startAt|string(date-time)|false|none||none| +|endAt|string(date-time)|false|none||none| +|status|string|false|none||none| + +

ApiResponseRecommendationFeedbackResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "jobId": 0, + "feedbackType": "string", + "reasonType": "string", + "status": "string", + "version": 0 + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[RecommendationFeedbackResponse](#schemarecommendationfeedbackresponse)|false|none||none| + +

JobStatusRequest

+ + + + + + +```json +{ + "status": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|status|string|true|none||none| + +

JobReviewUpdateRequest

+ + + + + + +```json +{ + "rating": 1, + "content": "string", + "tags": [ + "string" + ], + "status": "string", + "dimensionScores": { + "property1": 0, + "property2": 0 + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|rating|integer(int32)|false|none||none| +|content|string|false|none||none| +|tags|[string]|false|none||none| +|status|string|false|none||none| +|dimensionScores|object|false|none||none| +|» **additionalProperties**|integer(int32)|false|none||none| + +

ScoreSummary

+ + + + + + +```json +{ + "interviewId": 0, + "overallScore": 0, + "recommendation": "string", + "submittedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|interviewId|integer(int64)|false|none||none| +|overallScore|number|false|none||none| +|recommendation|string|false|none||none| +|submittedAt|string(date-time)|false|none||none| + +

ApiResponseRecommendationProfileResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "jobId": 0, + "industryCode": "string", + "jobFamilyCode": "string", + "riasecWeights": { + "property1": 0, + "property2": 0 + }, + "abilityExpectations": { + "property1": 0, + "property2": 0 + }, + "enabled": true, + "reviewStatus": "string", + "reviewReason": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z" + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[RecommendationProfileResponse](#schemarecommendationprofileresponse)|false|none||none| + +

ApplicationStatusRequest

+ + + + + + +```json +{ + "status": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|status|string|true|none||none| + +

InterviewUpdateRequest

+ + + + + + +```json +{ + "title": "string", + "startAt": "2019-08-24T14:15:22Z", + "endAt": "2019-08-24T14:15:22Z", + "timezone": "string", + "meetingUrl": "string", + "address": "string", + "interviewerName": "string", + "notes": "string", + "timeRangeValid": true +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|title|string|false|none||none| +|startAt|string(date-time)|false|none||none| +|endAt|string(date-time)|false|none||none| +|timezone|string|false|none||none| +|meetingUrl|string|false|none||none| +|address|string|false|none||none| +|interviewerName|string|false|none||none| +|notes|string|false|none||none| +|timeRangeValid|boolean|false|none||none| + +

OfferSummary

+ + + + + + +```json +{ + "offerId": 0, + "status": "string", + "title": "string", + "expireAt": "2019-08-24T14:15:22Z", + "onboardingDate": "2019-08-24" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|offerId|integer(int64)|false|none||none| +|status|string|false|none||none| +|title|string|false|none||none| +|expireAt|string(date-time)|false|none||none| +|onboardingDate|string(date)|false|none||none| + +

ApiResponsePageJobRecommendationItem

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "jobId": 0, + "title": "string", + "city": "string", + "employmentType": "string", + "salaryMin": 0, + "salaryMax": 0, + "mode": "PERSONALIZED", + "score": 0, + "reasons": [ + "string" + ] + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|object|false|none||none| +|» items|[[JobRecommendationItem](#schemajobrecommendationitem)]|false|none||none| +|» total|integer|false|none||none| +|» page|integer|false|none||none| +|» size|integer|false|none||none| +|» totalPages|integer|false|none||none| + +

CreateConversationRequest

+ + + + + + +```json +{ + "participantUserId": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|participantUserId|integer(int64)|true|none||none| + +

CompetitionSummary

+ + + + + + +```json +{ + "eligible": true, + "rank": 0, + "cohortSize": 0, + "overallScore": 0, + "percentile": 0, + "status": "string", + "mySnapshotPeriod": "string", + "rulesVersion": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|eligible|boolean|false|none||none| +|rank|integer(int32)|false|none||none| +|cohortSize|integer(int32)|false|none||none| +|overallScore|number|false|none||none| +|percentile|number|false|none||none| +|status|string|false|none||none| +|mySnapshotPeriod|string|false|none||none| +|rulesVersion|string|false|none||none| + +

ApiResponsePageRecommendationProfileResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "jobId": 0, + "industryCode": "string", + "jobFamilyCode": "string", + "riasecWeights": { + "property1": 0, + "property2": 0 + }, + "abilityExpectations": { + "property1": 0, + "property2": 0 + }, + "enabled": true, + "reviewStatus": "string", + "reviewReason": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z" + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|object|false|none||none| +|» items|[[RecommendationProfileResponse](#schemarecommendationprofileresponse)]|false|none||none| +|» total|integer|false|none||none| +|» page|integer|false|none||none| +|» size|integer|false|none||none| +|» totalPages|integer|false|none||none| + +

SendMessageRequest

+ + + + + + +```json +{ + "conversationId": 0, + "content": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|conversationId|integer(int64)|true|none||none| +|content|string|true|none||none| + +

CompanyMatchRuleRequest

+ + + + + + +```json +{ + "requiredCandidateScore": 100 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|requiredCandidateScore|integer(int32)|true|none||none| + +

CompanyReviewJobResponse

+ + + + + + +```json +{ + "id": 0, + "title": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|title|string|false|none||none| + +

ScoreRequest

+ + + + + + +```json +{ + "score": 100 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|score|integer(int32)|true|none||none| + +

ApiResponseAccountDeletionResponse

+ + + + + + +```json +{ + "code": 200, + "message": "ok", + "data": { + "userId": 2, + "status": "PENDING", + "requestedAt": "2019-08-24T14:15:22Z", + "effectiveAt": "2019-08-24T14:15:22Z", + "cancelledAt": "2019-08-24T14:15:22Z", + "completedAt": "2019-08-24T14:15:22Z", + "version": 0 + }, + "requestId": "req-1", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[AccountDeletionResponse](#schemaaccountdeletionresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CompanyReviewReplyResponse

+ + + + + + +```json +{ + "id": 0, + "content": "string", + "status": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z", + "rejectionReason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|content|string|false|none||none| +|status|string|false|none||none| +|version|integer(int64)|false|none||none| +|updatedAt|string(date-time)|false|none||none| +|rejectionReason|string¦null|false|none||none| + +

CompanyReviewItemResponse

+ + + + + + +```json +{ + "reviewId": 0, + "job": { + "id": 0, + "title": "string" + }, + "rating": 0, + "content": "string", + "tags": [ + "string" + ], + "dimensionScores": { + "property1": 0, + "property2": 0 + }, + "reviewStatus": "string", + "reviewCreatedAt": "2019-08-24T14:15:22Z", + "reply": { + "id": 0, + "content": "string", + "status": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z", + "rejectionReason": "string" + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|reviewId|integer(int64)|false|none||none| +|job|[CompanyReviewJobResponse](#schemacompanyreviewjobresponse)|false|none||none| +|rating|integer|false|none||none| +|content|string|false|none||none| +|tags|[string]|false|none||none| +|dimensionScores|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|reviewStatus|string|false|none||none| +|reviewCreatedAt|string(date-time)|false|none||none| +|reply|[CompanyReviewReplyResponse](#schemacompanyreviewreplyresponse)|false|none||none| + +

CompanyReviewDetailResponse

+ + + + + + +```json +{ + "reviewId": 0, + "job": { + "id": 0, + "title": "string" + }, + "rating": 0, + "content": "string", + "tags": [ + "string" + ], + "dimensionScores": { + "property1": 0, + "property2": 0 + }, + "reviewStatus": "string", + "reviewCreatedAt": "2019-08-24T14:15:22Z", + "reply": { + "id": 0, + "content": "string", + "status": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z", + "rejectionReason": "string" + } +} + +``` + +### 属性 + +*None* + +

CreateAppealRequest

+ + + + + + +```json +{ + "dimension": "string", + "period": "string", + "reason": "string", + "idempotencyKey": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|dimension|string|true|none||none| +|period|string|true|none||none| +|reason|string|false|none||none| +|idempotencyKey|string|false|none||none| + +

ReviewReplyPageResponse

+ + + + + + +```json +{ + "items": [ + { + "reviewId": 0, + "job": { + "id": 0, + "title": "string" + }, + "rating": 0, + "content": "string", + "tags": [ + "string" + ], + "dimensionScores": { + "property1": 0, + "property2": 0 + }, + "reviewStatus": "string", + "reviewCreatedAt": "2019-08-24T14:15:22Z", + "reply": { + "id": 0, + "content": "string", + "status": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z", + "rejectionReason": "string" + } + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|items|[[CompanyReviewItemResponse](#schemacompanyreviewitemresponse)]|false|none||none| +|total|integer(int64)|false|none||none| +|page|integer|false|none||none| +|size|integer|false|none||none| +|totalPages|integer|false|none||none| + +

JobReviewCreateRequest

+ + + + + + +```json +{ + "rating": 1, + "content": "string", + "tags": [ + "string" + ], + "dimensionScores": { + "property1": 0, + "property2": 0 + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|rating|integer(int32)|true|none||none| +|content|string|true|none||none| +|tags|[string]|false|none||none| +|dimensionScores|object|false|none||none| +|» **additionalProperties**|integer(int32)|false|none||none| + +

ApiResponseAppealResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "appealId": 0, + "candidateId": 0, + "dimension": "string", + "period": "string", + "status": "string", + "reason": "string", + "decision": "string", + "decisionReason": "string", + "reviewerId": 0, + "reviewedAt": "2019-08-24T14:15:22Z", + "rollbackAt": "2019-08-24T14:15:22Z", + "scoreAtAppeal": 0, + "snapshotVersionAtAppeal": 0, + "rulesVersion": "string", + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[AppealResponse](#schemaappealresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseCandidateFeedbackResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "id": 1, + "applicationId": 31, + "rating": 5, + "content": "沟通良好", + "tags": [ + "string" + ], + "createdAt": "2026-08-25T10:00:00", + "updatedAt": "2026-08-25T10:00:00" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CandidateFeedbackResponse](#schemacandidatefeedbackresponse)|false|none||脱敏后的候选人反馈| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CreateCompanyReviewReplyRequest

+ + + + + + +```json +{ + "content": "string", + "idempotencyKey": "0c14c6a6-6f50-4d1e-b0c4-b46ff43ba6a1" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|content|string|true|none||none| +|idempotencyKey|string(uuid)|true|none||none| + +

InterviewRespondRequest

+ + + + + + +```json +{ + "action": "string", + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|action|string|true|none||none| +|reason|string|false|none||none| + +

AppealResponse

+ + + + + + +```json +{ + "appealId": 0, + "candidateId": 0, + "dimension": "string", + "period": "string", + "status": "string", + "reason": "string", + "decision": "string", + "decisionReason": "string", + "reviewerId": 0, + "reviewedAt": "2019-08-24T14:15:22Z", + "rollbackAt": "2019-08-24T14:15:22Z", + "scoreAtAppeal": 0, + "snapshotVersionAtAppeal": 0, + "rulesVersion": "string", + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|appealId|integer(int64)|false|none||none| +|candidateId|integer(int64)|false|none||none| +|dimension|string|false|none||none| +|period|string|false|none||none| +|status|string|false|none||none| +|reason|string|false|none||none| +|decision|string|false|none||none| +|decisionReason|string|false|none||none| +|reviewerId|integer(int64)|false|none||none| +|reviewedAt|string(date-time)|false|none||none| +|rollbackAt|string(date-time)|false|none||none| +|scoreAtAppeal|number|false|none||none| +|snapshotVersionAtAppeal|integer(int64)|false|none||none| +|rulesVersion|string|false|none||none| +|createdAt|string(date-time)|false|none||none| +|updatedAt|string(date-time)|false|none||none| + +

UpdateCompanyReviewReplyRequest

+ + + + + + +```json +{ + "content": "string", + "expectedVersion": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|content|string|true|none||none| +|expectedVersion|integer(int64)|true|none||none| + +

OfferCreateRequest

+ + + + + + +```json +{ + "applicationId": 0, + "title": "string", + "salaryMin": 0, + "salaryMax": 0, + "salaryCurrency": "string", + "salaryPeriod": "string", + "workCity": "string", + "employmentType": "string", + "probationMonths": 0, + "benefits": "string", + "description": "string", + "expireAt": "2019-08-24T14:15:22Z", + "onboardingDate": "2019-08-24", + "baseSalary": 0, + "housingAllowance": 0, + "annualBonusMonths": 0, + "otherAllowances": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|applicationId|integer(int64)|true|none||none| +|title|string|true|none||none| +|salaryMin|integer(int32)|false|none||none| +|salaryMax|integer(int32)|false|none||none| +|salaryCurrency|string|false|none||none| +|salaryPeriod|string|false|none||none| +|workCity|string|true|none||none| +|employmentType|string|false|none||none| +|probationMonths|integer(int32)|false|none||none| +|benefits|string|false|none||none| +|description|string|true|none||none| +|expireAt|string(date-time)|true|none||none| +|onboardingDate|string(date)|false|none||none| +|baseSalary|integer(int32)|false|none||none| +|housingAllowance|integer(int32)|false|none||none| +|annualBonusMonths|integer(int32)|false|none||none| +|otherAllowances|string|false|none||none| + +

InterviewCancelRequest

+ + + + + + +```json +{ + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|reason|string|false|none||none| + +

ReviewReplyDecisionRequest

+ + + + + + +```json +{ + "decision": "APPROVE", + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|decision|string|true|none||none| +|reason|string|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|decision|APPROVE| +|decision|REJECT| + +

ApiResponseListMapStringObject

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": [ + { + "property1": null, + "property2": null + } + ], + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[object]|false|none||none| +|» **additionalProperties**|any|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CounterOfferCreateRequest

+ + + + + + +```json +{ + "proposedSalaryMin": 0, + "proposedSalaryMax": 0, + "proposedOnboardingDate": "2019-08-24", + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|proposedSalaryMin|integer(int32)|false|none||none| +|proposedSalaryMax|integer(int32)|false|none||none| +|proposedOnboardingDate|string(date)|false|none||none| +|reason|string|false|none||none| + +

AdminReviewReplyResponse

+ + + + + + +```json +{ + "replyId": 0, + "reviewId": 0, + "jobId": 0, + "jobTitle": "string", + "companyId": 0, + "companyName": "string", + "rating": 0, + "reviewContent": "string", + "reviewModerationStatus": "string", + "replyContent": "string", + "replyStatus": "string", + "version": 0, + "riskScore": 0, + "riskLevel": "string", + "reasonCodes": [ + "string" + ], + "createdAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|replyId|integer(int64)|false|none||none| +|reviewId|integer(int64)|false|none||none| +|jobId|integer(int64)|false|none||none| +|jobTitle|string|false|none||none| +|companyId|integer(int64)|false|none||none| +|companyName|string|false|none||none| +|rating|integer|false|none||none| +|reviewContent|string|false|none||none| +|reviewModerationStatus|string|false|none||none| +|replyContent|string|false|none||none| +|replyStatus|string|false|none||none| +|version|integer(int64)|false|none||none| +|riskScore|number|false|none||none| +|riskLevel|string|false|none||none| +|reasonCodes|[string]|false|none||none| +|createdAt|string(date-time)|false|none||none| + +

AdminReviewReplyPageResponse

+ + + + + + +```json +{ + "items": [ + { + "replyId": 0, + "reviewId": 0, + "jobId": 0, + "jobTitle": "string", + "companyId": 0, + "companyName": "string", + "rating": 0, + "reviewContent": "string", + "reviewModerationStatus": "string", + "replyContent": "string", + "replyStatus": "string", + "version": 0, + "riskScore": 0, + "riskLevel": "string", + "reasonCodes": [ + "string" + ], + "createdAt": "2019-08-24T14:15:22Z" + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|items|[[AdminReviewReplyResponse](#schemaadminreviewreplyresponse)]|false|none||none| +|total|integer(int64)|false|none||none| +|page|integer|false|none||none| +|size|integer|false|none||none| +|totalPages|integer|false|none||none| + +

ApiResponseReviewReplyPageResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "reviewId": 0, + "job": { + "id": 0, + "title": "string" + }, + "rating": 0, + "content": "string", + "tags": [ + "string" + ], + "dimensionScores": { + "property1": 0, + "property2": 0 + }, + "reviewStatus": "string", + "reviewCreatedAt": "2019-08-24T14:15:22Z", + "reply": { + "id": 0, + "content": "string", + "status": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z", + "rejectionReason": "string" + } + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[ReviewReplyPageResponse](#schemareviewreplypageresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

VerificationSubmitRequest

+ + + + + + +```json +{ + "materialsJson": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|materialsJson|string|true|none||none| + +

ApiResponseCompanyReviewDetailResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "reviewId": 0, + "job": { + "id": 0, + "title": "string" + }, + "rating": 0, + "content": "string", + "tags": [ + "string" + ], + "dimensionScores": { + "property1": 0, + "property2": 0 + }, + "reviewStatus": "string", + "reviewCreatedAt": "2019-08-24T14:15:22Z", + "reply": { + "id": 0, + "content": "string", + "status": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z", + "rejectionReason": "string" + } + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[CompanyReviewDetailResponse](#schemacompanyreviewdetailresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseCompanyReviewReplyResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "id": 0, + "content": "string", + "status": "string", + "version": 0, + "updatedAt": "2019-08-24T14:15:22Z", + "rejectionReason": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[CompanyReviewReplyResponse](#schemacompanyreviewreplyresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseAdminReviewReplyPageResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "replyId": 0, + "reviewId": 0, + "jobId": 0, + "jobTitle": "string", + "companyId": 0, + "companyName": "string", + "rating": 0, + "reviewContent": "string", + "reviewModerationStatus": "string", + "replyContent": "string", + "replyStatus": "string", + "version": 0, + "riskScore": 0, + "riskLevel": "string", + "reasonCodes": [ + "string" + ], + "createdAt": "2019-08-24T14:15:22Z" + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[AdminReviewReplyPageResponse](#schemaadminreviewreplypageresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseAdminReviewReplyResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "replyId": 0, + "reviewId": 0, + "jobId": 0, + "jobTitle": "string", + "companyId": 0, + "companyName": "string", + "rating": 0, + "reviewContent": "string", + "reviewModerationStatus": "string", + "replyContent": "string", + "replyStatus": "string", + "version": 0, + "riskScore": 0, + "riskLevel": "string", + "reasonCodes": [ + "string" + ], + "createdAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[AdminReviewReplyResponse](#schemaadminreviewreplyresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ReviewDecisionRequest

+ + + + + + +```json +{ + "decision": "string", + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|decision|string|true|none||none| +|reason|string|false|none||none| + +

VerificationDecisionRequest

+ + + + + + +```json +{ + "decision": "string", + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|decision|string|true|none||none| +|reason|string|false|none||none| + +

InterviewCreateRequest

+ + + + + + +```json +{ + "roundNo": 0, + "title": "string", + "interviewType": "string", + "startAt": "2019-08-24T14:15:22Z", + "endAt": "2019-08-24T14:15:22Z", + "timezone": "string", + "meetingUrl": "string", + "address": "string", + "interviewerName": "string", + "notes": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|roundNo|integer(int32)|false|none||none| +|title|string|true|none||none| +|interviewType|string|true|none||none| +|startAt|string(date-time)|true|none||none| +|endAt|string(date-time)|true|none||none| +|timezone|string|false|none||none| +|meetingUrl|string|false|none||none| +|address|string|false|none||none| +|interviewerName|string|false|none||none| +|notes|string|false|none||none| + +

ApiResponseListWeightTemplateResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": [ + { + "code": "string", + "name": "string", + "description": "string", + "weights": { + "property1": 0, + "property2": 0 + } + } + ], + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[[WeightTemplateResponse](#schemaweighttemplateresponse)]|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

WeightTemplateResponse

+ + + + + + +```json +{ + "code": "string", + "name": "string", + "description": "string", + "weights": { + "property1": 0, + "property2": 0 + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|string|false|none||none| +|name|string|false|none||none| +|description|string|false|none||none| +|weights|object|false|none||none| +|» **additionalProperties**|number|false|none||none| + +

ApiResponseDataExportTaskResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "taskId": 0, + "status": "string", + "format": "string", + "requestedAt": "2019-08-24T14:15:22Z", + "startedAt": "2019-08-24T14:15:22Z", + "completedAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "sizeBytes": 0, + "downloadAvailable": true, + "errorCode": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[DataExportTaskResponse](#schemadataexporttaskresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

AppealDecisionRequest

+ + + + + + +```json +{ + "decision": "string", + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|decision|string|true|none||none| +|reason|string|false|none||none| + +

DataExportTaskResponse

+ + + + + + +```json +{ + "taskId": 0, + "status": "string", + "format": "string", + "requestedAt": "2019-08-24T14:15:22Z", + "startedAt": "2019-08-24T14:15:22Z", + "completedAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "sizeBytes": 0, + "downloadAvailable": true, + "errorCode": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|taskId|integer(int64)|false|none||none| +|status|string|false|none||none| +|format|string|false|none||none| +|requestedAt|string(date-time)|false|none||none| +|startedAt|string(date-time)|false|none||none| +|completedAt|string(date-time)|false|none||none| +|expiresAt|string(date-time)|false|none||none| +|sizeBytes|integer(int64)|false|none||none| +|downloadAvailable|boolean|false|none||none| +|errorCode|string|false|none||none| + +

OfferStatusRequest

+ + + + + + +```json +{ + "status": "string", + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|status|string|true|none||none| +|reason|string|false|none||none| + +

ApiResponsePersonalizedScoreResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "jobId": 0, + "score": 0, + "status": "string", + "source": "string", + "templateCode": "string", + "configuredWeights": { + "property1": 0, + "property2": 0 + }, + "effectiveWeights": { + "property1": 0, + "property2": 0 + }, + "dimensionScores": { + "property1": 0, + "property2": 0 + }, + "coveredWeight": 0, + "missingDimensions": [ + "string" + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[PersonalizedScoreResponse](#schemapersonalizedscoreresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

PersonalizedScoreResponse

+ + + + + + +```json +{ + "jobId": 0, + "score": 0, + "status": "string", + "source": "string", + "templateCode": "string", + "configuredWeights": { + "property1": 0, + "property2": 0 + }, + "effectiveWeights": { + "property1": 0, + "property2": 0 + }, + "dimensionScores": { + "property1": 0, + "property2": 0 + }, + "coveredWeight": 0, + "missingDimensions": [ + "string" + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|jobId|integer(int64)|false|none||none| +|score|number|false|none||none| +|status|string|false|none||none| +|source|string|false|none||none| +|templateCode|string|false|none||none| +|configuredWeights|object|false|none||none| +|» **additionalProperties**|number|false|none||none| +|effectiveWeights|object|false|none||none| +|» **additionalProperties**|number|false|none||none| +|dimensionScores|object|false|none||none| +|» **additionalProperties**|number|false|none||none| +|coveredWeight|number|false|none||none| +|missingDimensions|[string]|false|none||none| + +

ApiResponseCompanyPublicView

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "id": 0, + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "verified": true + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CompanyPublicView](#schemacompanypublicview)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CompanyPublicView

+ + + + + + +```json +{ + "id": 0, + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "verified": true +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|name|string|false|none||none| +|logoUrl|string|false|none||none| +|description|string|false|none||none| +|industry|string|false|none||none| +|verified|boolean|false|none||none| + +

ApiResponseCareerProgressResponse

+ + + + + + +```json +{ + "code": 200, + "message": "ok", + "data": { + "todo": { + "pendingInterviewResponseCount": 0, + "upcomingConfirmedInterviewCount": 0, + "pendingOfferResponseCount": 0, + "unreadNotificationCount": 0, + "unreadReportDecisionCount": 0 + }, + "applications": { + "items": [ + { + "applicationId": 0, + "applicationStatus": "string", + "appliedAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z", + "job": {}, + "nextInterview": {}, + "latestSubmittedInterviewScore": {}, + "offer": {}, + "competition": {} + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "generatedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "req-1", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CareerProgressResponse](#schemacareerprogressresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponsePrivacySettingsResponse

+ + + + + + +```json +{ + "code": 200, + "message": "ok", + "data": { + "id": 1, + "studentUserId": 2, + "resumeVisibility": "APPLIED_COMPANIES", + "contactVisible": true, + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "req-1", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[PrivacySettingsResponse](#schemaprivacysettingsresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

TagCount

+ + + + + + +```json +{ + "name": "string", + "count": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|name|string|false|none||none| +|count|integer(int32)|false|none||none| + +

CandidateMatchSignals

+ + + + + + +```json +{ + "candidateInterestScore": { + "average": 0, + "sampleCount": 0 + }, + "hrSuitabilityScore": { + "average": 0, + "sampleCount": 0 + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|candidateInterestScore|[MatchSignal](#schemamatchsignal)|false|none||none| +|hrSuitabilityScore|[MatchSignal](#schemamatchsignal)|false|none||none| + +

DimensionItem

+ + + + + + +```json +{ + "dimension": "string", + "score": 0, + "status": "string", + "weight": 0, + "summary": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|dimension|string|false|none||none| +|score|number|false|none||none| +|status|string|false|none||none| +|weight|number|false|none||none| +|summary|string|false|none||none| + +

CandidateScoreTrendResponse

+ + + + + + +```json +{ + "candidateId": 0, + "months": 0, + "items": [ + { + "month": "string", + "feedbackCount": 0, + "averageRating": 0, + "ratingScore": 0 + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|candidateId|integer(int64)|false|none||none| +|months|integer(int32)|false|none||none| +|items|[[CandidateScoreTrendItem](#schemacandidatescoretrenditem)]|false|none||none| + +

CandidateScoringTrendResponse

+ + + + + + +```json +{ + "candidateId": 0, + "months": 0, + "items": [ + { + "period": "string", + "overallScore": 0, + "rulesVersion": "string", + "dimensions": { + "property1": 0, + "property2": 0 + } + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|candidateId|integer(int64)|false|none||none| +|months|integer(int32)|false|none||none| +|items|[[TrendItem](#schematrenditem)]|false|none||none| + +

CandidateScoreTrendItem

+ + + + + + +```json +{ + "month": "string", + "feedbackCount": 0, + "averageRating": 0, + "ratingScore": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|month|string|false|none||none| +|feedbackCount|integer(int32)|false|none||none| +|averageRating|number|false|none||none| +|ratingScore|number|false|none||none| + +

TrendItem

+ + + + + + +```json +{ + "period": "string", + "overallScore": 0, + "rulesVersion": "string", + "dimensions": { + "property1": 0, + "property2": 0 + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|period|string|false|none||none| +|overallScore|number|false|none||none| +|rulesVersion|string|false|none||none| +|dimensions|object|false|none||none| +|» **additionalProperties**|number|false|none||none| + +

ApiResponseCandidateScoreCardResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "candidateId": 0, + "status": "string", + "overallScore": 0, + "sampleCount": 0, + "feedbackSummary": { + "totalCount": 0, + "averageRating": 0, + "ratingDistribution": { + "property1": 0, + "property2": 0 + }, + "tags": [ + { + "name": "string", + "count": 0 + } + ] + }, + "matchSignals": { + "candidateInterestScore": { + "average": 0, + "sampleCount": 0 + }, + "hrSuitabilityScore": { + "average": 0, + "sampleCount": 0 + } + }, + "unsupportedDimensions": [ + "string" + ], + "generatedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CandidateScoreCardResponse](#schemacandidatescorecardresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

DataSourceItem

+ + + + + + +```json +{ + "source": "string", + "time": "2019-08-24T14:15:22Z", + "note": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|source|string|false|none||none| +|time|string(date-time)|false|none||none| +|note|string|false|none||none| + +

CandidateFeedbackResponse

+ + + + + + +```json +{ + "id": 1, + "applicationId": 31, + "rating": 5, + "content": "沟通良好", + "tags": [ + "string" + ], + "createdAt": "2026-08-25T10:00:00", + "updatedAt": "2026-08-25T10:00:00" +} + +``` + +脱敏后的候选人反馈 + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||反馈 ID| +|applicationId|integer(int64)|false|none||投递 ID| +|rating|integer(int32)|false|none||评分,范围 1-5| +|content|string|false|none||反馈内容| +|tags|[string]|false|none||反馈标签| +|createdAt|string(date-time)|false|none||创建时间| +|updatedAt|string(date-time)|false|none||更新时间| + +

ApiResponseCandidateScoreTrendResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "candidateId": 0, + "months": 0, + "items": [ + { + "month": "string", + "feedbackCount": 0, + "averageRating": 0, + "ratingScore": 0 + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CandidateScoreTrendResponse](#schemacandidatescoretrendresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseCandidatePercentileResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "candidateId": 0, + "status": "string", + "scoreType": "string", + "score": 0, + "percentile": 0, + "cohortSize": 0, + "sampleCount": 0, + "minimumSampleCount": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CandidatePercentileResponse](#schemacandidatepercentileresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

SubScore

+ + + + + + +```json +{ + "name": "string", + "score": 0, + "weight": 0, + "description": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|name|string|false|none||none| +|score|number|false|none||none| +|weight|number|false|none||none| +|description|string|false|none||none| + +

ApiResponseCandidateScoringOverviewResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "candidateId": 0, + "status": "string", + "overallScore": 0, + "weights": { + "property1": 0, + "property2": 0 + }, + "dimensions": [ + { + "dimension": "string", + "score": 0, + "status": "string", + "weight": 0, + "summary": "string" + } + ], + "rulesVersion": "string", + "generatedAt": "2019-08-24T14:15:22Z", + "explanationVersion": "string", + "coverage": { + "computableDimensions": 0, + "totalDimensions": 0, + "includedDimensions": [ + "string" + ], + "excludedDimensions": [ + { + "dimension": "string", + "status": "string", + "reason": "string" + } + ] + }, + "comparabilityNotice": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CandidateScoringOverviewResponse](#schemacandidatescoringoverviewresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CandidateFeedbackSummary

+ + + + + + +```json +{ + "totalCount": 0, + "averageRating": 0, + "ratingDistribution": { + "property1": 0, + "property2": 0 + }, + "tags": [ + { + "name": "string", + "count": 0 + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|totalCount|integer(int32)|false|none||none| +|averageRating|number|false|none||none| +|ratingDistribution|object|false|none||none| +|» **additionalProperties**|integer(int32)|false|none||none| +|tags|[[TagCount](#schematagcount)]|false|none||none| + +

ApiResponseDimensionScoreDetailResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "dimension": "string", + "score": 0, + "status": "string", + "subScores": [ + { + "name": "string", + "score": 0, + "weight": 0, + "description": "string" + } + ], + "reasons": [ + "string" + ], + "dataSources": [ + { + "source": "string", + "time": "2019-08-24T14:15:22Z", + "note": "string" + } + ], + "updatedAt": "2019-08-24T14:15:22Z", + "rulesVersion": "string", + "displayName": "string", + "whatItMeasures": "string", + "interpretation": "string", + "limitations": [ + "string" + ], + "evidenceLevel": "DIRECT_RULE", + "ruleContributions": [ + { + "ruleCode": "string", + "outcome": "APPLIED", + "contribution": 0, + "maxContribution": 0, + "label": "string", + "observation": "string", + "explanation": "string" + } + ], + "improvementActions": [ + "string" + ], + "explanationVersion": "string", + "validity": { + "completedAt": "2019-08-24T14:15:22Z", + "validUntil": "2019-08-24T14:15:22Z", + "expired": true + }, + "calculatedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[DimensionScoreDetailResponse](#schemadimensionscoredetailresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CandidateScoreCardResponse

+ + + + + + +```json +{ + "candidateId": 0, + "status": "string", + "overallScore": 0, + "sampleCount": 0, + "feedbackSummary": { + "totalCount": 0, + "averageRating": 0, + "ratingDistribution": { + "property1": 0, + "property2": 0 + }, + "tags": [ + { + "name": "string", + "count": 0 + } + ] + }, + "matchSignals": { + "candidateInterestScore": { + "average": 0, + "sampleCount": 0 + }, + "hrSuitabilityScore": { + "average": 0, + "sampleCount": 0 + } + }, + "unsupportedDimensions": [ + "string" + ], + "generatedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|candidateId|integer(int64)|false|none||none| +|status|string|false|none||none| +|overallScore|number|false|none||none| +|sampleCount|integer(int32)|false|none||none| +|feedbackSummary|[CandidateFeedbackSummary](#schemacandidatefeedbacksummary)|false|none||none| +|matchSignals|[CandidateMatchSignals](#schemacandidatematchsignals)|false|none||none| +|unsupportedDimensions|[string]|false|none||none| +|generatedAt|string(date-time)|false|none||none| + +

MatchSignal

+ + + + + + +```json +{ + "average": 0, + "sampleCount": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|average|number|false|none||none| +|sampleCount|integer(int32)|false|none||none| + +

ApiResponseCandidateScoringTrendResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "candidateId": 0, + "months": 0, + "items": [ + { + "period": "string", + "overallScore": 0, + "rulesVersion": "string", + "dimensions": { + "property1": 0, + "property2": 0 + } + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CandidateScoringTrendResponse](#schemacandidatescoringtrendresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CandidatePercentileResponse

+ + + + + + +```json +{ + "candidateId": 0, + "status": "string", + "scoreType": "string", + "score": 0, + "percentile": 0, + "cohortSize": 0, + "sampleCount": 0, + "minimumSampleCount": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|candidateId|integer(int64)|false|none||none| +|status|string|false|none||none| +|scoreType|string|false|none||none| +|score|number|false|none||none| +|percentile|number|false|none||none| +|cohortSize|integer(int32)|false|none||none| +|sampleCount|integer(int32)|false|none||none| +|minimumSampleCount|integer(int32)|false|none||none| + +

ApiResponseCompanyCandidateScoringResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "applicationId": 0, + "overallScore": 0, + "status": "string", + "dimensions": [ + { + "dimension": "string", + "score": 0, + "status": "string" + } + ], + "generatedAt": "2019-08-24T14:15:22Z", + "rulesVersion": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CompanyCandidateScoringResponse](#schemacompanycandidatescoringresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseScoreTrendResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "companyId": 0, + "months": 0, + "items": [ + { + "period": "string", + "overallScore": 0, + "rulesVersion": "string", + "dimensions": { + "property1": 0, + "property2": 0 + } + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[ScoreTrendResponse](#schemascoretrendresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ScoreTrendResponse

+ + + + + + +```json +{ + "companyId": 0, + "months": 0, + "items": [ + { + "period": "string", + "overallScore": 0, + "rulesVersion": "string", + "dimensions": { + "property1": 0, + "property2": 0 + } + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|companyId|integer(int64)|false|none||none| +|months|integer(int32)|false|none||none| +|items|[[TrendItem](#schematrenditem)]|false|none||none| + +

ApiResponseDashboardOverviewResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "companyId": 0, + "totalJobs": 0, + "publishedJobs": 0, + "avgJobScore": 0, + "totalCandidates": 0, + "avgCandidateScore": 0, + "scoreDistribution": { + "property1": 0, + "property2": 0 + }, + "updatedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[DashboardOverviewResponse](#schemadashboardoverviewresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

DashboardOverviewResponse

+ + + + + + +```json +{ + "companyId": 0, + "totalJobs": 0, + "publishedJobs": 0, + "avgJobScore": 0, + "totalCandidates": 0, + "avgCandidateScore": 0, + "scoreDistribution": { + "property1": 0, + "property2": 0 + }, + "updatedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|companyId|integer(int64)|false|none||none| +|totalJobs|integer(int32)|false|none||none| +|publishedJobs|integer(int32)|false|none||none| +|avgJobScore|number|false|none||none| +|totalCandidates|integer(int32)|false|none||none| +|avgCandidateScore|number|false|none||none| +|scoreDistribution|object|false|none||none| +|» **additionalProperties**|integer(int32)|false|none||none| +|updatedAt|string(date-time)|false|none||none| + +

ApiResponseJobRankingListResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "jobId": 0, + "title": "string", + "city": "string", + "employmentType": "string", + "avgRating": 0, + "reviewCount": 0, + "rank": 0, + "cohortSize": 0, + "dimensionAverages": { + "property1": 0, + "property2": 0 + } + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[JobRankingListResponse](#schemajobrankinglistresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

JobRankingItem

+ + + + + + +```json +{ + "jobId": 0, + "title": "string", + "city": "string", + "employmentType": "string", + "avgRating": 0, + "reviewCount": 0, + "rank": 0, + "cohortSize": 0, + "dimensionAverages": { + "property1": 0, + "property2": 0 + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|jobId|integer(int64)|false|none||none| +|title|string|false|none||none| +|city|string|false|none||none| +|employmentType|string|false|none||none| +|avgRating|number|false|none||none| +|reviewCount|integer(int32)|false|none||none| +|rank|integer(int32)|false|none||none| +|cohortSize|integer(int32)|false|none||none| +|dimensionAverages|object|false|none||none| +|» **additionalProperties**|number|false|none||none| + +

JobRankingListResponse

+ + + + + + +```json +{ + "items": [ + { + "jobId": 0, + "title": "string", + "city": "string", + "employmentType": "string", + "avgRating": 0, + "reviewCount": 0, + "rank": 0, + "cohortSize": 0, + "dimensionAverages": { + "property1": 0, + "property2": 0 + } + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|items|[[JobRankingItem](#schemajobrankingitem)]|false|none||none| +|total|integer(int64)|false|none||none| +|page|integer(int32)|false|none||none| +|size|integer(int32)|false|none||none| +|totalPages|integer(int32)|false|none||none| + +

ApiResponseJobRankingItem

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "jobId": 0, + "title": "string", + "city": "string", + "employmentType": "string", + "avgRating": 0, + "reviewCount": 0, + "rank": 0, + "cohortSize": 0, + "dimensionAverages": { + "property1": 0, + "property2": 0 + } + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[JobRankingItem](#schemajobrankingitem)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseCandidateRankingListResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "applicationId": 0, + "jobId": 0, + "candidateName": "string", + "candidateSchool": "string", + "overallScore": 0, + "percentile": 0, + "sampleCount": 0 + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CandidateRankingListResponse](#schemacandidaterankinglistresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CandidateRankingItem

+ + + + + + +```json +{ + "applicationId": 0, + "jobId": 0, + "candidateName": "string", + "candidateSchool": "string", + "overallScore": 0, + "percentile": 0, + "sampleCount": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|applicationId|integer(int64)|false|none||none| +|jobId|integer(int64)|false|none||none| +|candidateName|string|false|none||none| +|candidateSchool|string|false|none||none| +|overallScore|number|false|none||none| +|percentile|number|false|none||none| +|sampleCount|integer(int32)|false|none||none| + +

CandidateDetailView

+ + + + + + +```json +{ + "applicationId": 0, + "jobId": 0, + "jobTitle": "string", + "jobCity": "string", + "jobEmploymentType": "string", + "status": "string", + "coverLetter": "string", + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z", + "candidateName": "string", + "candidateAvatarUrl": "string", + "candidateBio": "string", + "candidateLocation": "string", + "candidateSchool": "string", + "candidateEducation": "string", + "candidateGraduationYear": 0, + "candidateSkills": [ + "string" + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|applicationId|integer(int64)|false|none||none| +|jobId|integer(int64)|false|none||none| +|jobTitle|string|false|none||none| +|jobCity|string|false|none||none| +|jobEmploymentType|string|false|none||none| +|status|string|false|none||none| +|coverLetter|string|false|none||none| +|createdAt|string(date-time)|false|none||none| +|updatedAt|string(date-time)|false|none||none| +|candidateName|string|false|none||none| +|candidateAvatarUrl|string|false|none||none| +|candidateBio|string|false|none||none| +|candidateLocation|string|false|none||none| +|candidateSchool|string|false|none||none| +|candidateEducation|string|false|none||none| +|candidateGraduationYear|integer(int32)|false|none||none| +|candidateSkills|[string]|false|none||none| + +

CandidateRankingListResponse

+ + + + + + +```json +{ + "items": [ + { + "applicationId": 0, + "jobId": 0, + "candidateName": "string", + "candidateSchool": "string", + "overallScore": 0, + "percentile": 0, + "sampleCount": 0 + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|items|[[CandidateRankingItem](#schemacandidaterankingitem)]|false|none||none| +|total|integer(int64)|false|none||none| +|page|integer(int32)|false|none||none| +|size|integer(int32)|false|none||none| +|totalPages|integer(int32)|false|none||none| + +

ApiResponseCandidateRankingDetailResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "applicationId": 0, + "jobId": 0, + "candidateName": "string", + "candidateSchool": "string", + "overallScore": 0, + "percentile": 0, + "cohortSize": 0, + "dimensionScores": [ + { + "dimension": "string", + "score": 0, + "status": "string" + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CandidateRankingDetailResponse](#schemacandidaterankingdetailresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CandidateRankingDetailResponse

+ + + + + + +```json +{ + "applicationId": 0, + "jobId": 0, + "candidateName": "string", + "candidateSchool": "string", + "overallScore": 0, + "percentile": 0, + "cohortSize": 0, + "dimensionScores": [ + { + "dimension": "string", + "score": 0, + "status": "string" + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|applicationId|integer(int64)|false|none||none| +|jobId|integer(int64)|false|none||none| +|candidateName|string|false|none||none| +|candidateSchool|string|false|none||none| +|overallScore|number|false|none||none| +|percentile|number|false|none||none| +|cohortSize|integer(int32)|false|none||none| +|dimensionScores|[[DimensionScoreItem](#schemadimensionscoreitem)]|false|none||none| + +

DimensionScoreItem

+ + + + + + +```json +{ + "dimension": "string", + "score": 0, + "status": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|dimension|string|false|none||none| +|score|number|false|none||none| +|status|string|false|none||none| + +

CandidateItemView

+ + + + + + +```json +{ + "applicationId": 0, + "jobId": 0, + "jobTitle": "string", + "status": "string", + "candidateName": "string", + "candidateSchool": "string", + "candidateEducation": "string", + "candidateGraduationYear": 0, + "candidateAvatarUrl": "string", + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|applicationId|integer(int64)|false|none||none| +|jobId|integer(int64)|false|none||none| +|jobTitle|string|false|none||none| +|status|string|false|none||none| +|candidateName|string|false|none||none| +|candidateSchool|string|false|none||none| +|candidateEducation|string|false|none||none| +|candidateGraduationYear|integer(int32)|false|none||none| +|candidateAvatarUrl|string|false|none||none| +|createdAt|string(date-time)|false|none||none| +|updatedAt|string(date-time)|false|none||none| + +

ApiResponseCandidateListResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "applicationId": 0, + "jobId": 0, + "jobTitle": "string", + "status": "string", + "candidateName": "string", + "candidateSchool": "string", + "candidateEducation": "string", + "candidateGraduationYear": 0, + "candidateAvatarUrl": "string", + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CandidateListResponse](#schemacandidatelistresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CandidateListResponse

+ + + + + + +```json +{ + "items": [ + { + "applicationId": 0, + "jobId": 0, + "jobTitle": "string", + "status": "string", + "candidateName": "string", + "candidateSchool": "string", + "candidateEducation": "string", + "candidateGraduationYear": 0, + "candidateAvatarUrl": "string", + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|items|[[CandidateItemView](#schemacandidateitemview)]|false|none||none| +|total|integer(int64)|false|none||none| +|page|integer(int32)|false|none||none| +|size|integer(int32)|false|none||none| +|totalPages|integer(int32)|false|none||none| + +

ApiResponseCandidateDetailView

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "applicationId": 0, + "jobId": 0, + "jobTitle": "string", + "jobCity": "string", + "jobEmploymentType": "string", + "status": "string", + "coverLetter": "string", + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z", + "candidateName": "string", + "candidateAvatarUrl": "string", + "candidateBio": "string", + "candidateLocation": "string", + "candidateSchool": "string", + "candidateEducation": "string", + "candidateGraduationYear": 0, + "candidateSkills": [ + "string" + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CandidateDetailView](#schemacandidatedetailview)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CompanyCandidateScoringResponse

+ + + + + + +```json +{ + "applicationId": 0, + "overallScore": 0, + "status": "string", + "dimensions": [ + { + "dimension": "string", + "score": 0, + "status": "string" + } + ], + "generatedAt": "2019-08-24T14:15:22Z", + "rulesVersion": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|applicationId|integer(int64)|false|none||none| +|overallScore|number|false|none||none| +|status|string|false|none||none| +|dimensions|[[CompanyDimensionItem](#schemacompanydimensionitem)]|false|none||none| +|generatedAt|string(date-time)|false|none||none| +|rulesVersion|string|false|none||none| + +

CompanyDimensionItem

+ + + + + + +```json +{ + "dimension": "string", + "score": 0, + "status": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|dimension|string|false|none||none| +|score|number|false|none||none| +|status|string|false|none||none| + +

CandidateScoringOverviewResponse

+ + + + + + +```json +{ + "candidateId": 0, + "status": "string", + "overallScore": 0, + "weights": { + "property1": 0, + "property2": 0 + }, + "dimensions": [ + { + "dimension": "string", + "score": 0, + "status": "string", + "weight": 0, + "summary": "string" + } + ], + "rulesVersion": "string", + "generatedAt": "2019-08-24T14:15:22Z", + "explanationVersion": "string", + "coverage": { + "computableDimensions": 0, + "totalDimensions": 0, + "includedDimensions": [ + "string" + ], + "excludedDimensions": [ + { + "dimension": "string", + "status": "string", + "reason": "string" + } + ] + }, + "comparabilityNotice": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|candidateId|integer(int64)|false|none||none| +|status|string|false|none||none| +|overallScore|number|false|none||none| +|weights|object|false|none||none| +|» **additionalProperties**|number|false|none||none| +|dimensions|[[DimensionItem](#schemadimensionitem)]|false|none||none| +|rulesVersion|string|false|none||none| +|generatedAt|string(date-time)|false|none||none| +|explanationVersion|string|false|none||解释契约版本,与评分规则版本独立| +|coverage|[CandidateScoringCoverage](#schemacandidatescoringcoverage)|false|none||none| +|comparabilityNotice|string|false|none||none| + +

AdminDashboardOverviewResponse

+ + + + + + +```json +{ + "totalCompanies": 0, + "totalJobs": 0, + "totalCandidates": 0, + "avgCandidateScore": 0, + "topCompanies": [ + { + "companyId": 0, + "companyName": "string", + "avgCandidateScore": 0, + "jobCount": 0 + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|totalCompanies|integer(int32)|false|none||none| +|totalJobs|integer(int32)|false|none||none| +|totalCandidates|integer(int32)|false|none||none| +|avgCandidateScore|number|false|none||none| +|topCompanies|[[CompanyScoreItem](#schemacompanyscoreitem)]|false|none||none| + +

ApiResponseAdminDashboardOverviewResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "totalCompanies": 0, + "totalJobs": 0, + "totalCandidates": 0, + "avgCandidateScore": 0, + "topCompanies": [ + { + "companyId": 0, + "companyName": "string", + "avgCandidateScore": 0, + "jobCount": 0 + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[AdminDashboardOverviewResponse](#schemaadmindashboardoverviewresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CompanyScoreItem

+ + + + + + +```json +{ + "companyId": 0, + "companyName": "string", + "avgCandidateScore": 0, + "jobCount": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|companyId|integer(int64)|false|none||none| +|companyName|string|false|none||none| +|avgCandidateScore|number|false|none||none| +|jobCount|integer(int32)|false|none||none| + +

ApiResponseListSnapshotHistoryItem

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": [ + { + "id": 0, + "appealId": 0, + "action": "string", + "dimension": "string", + "period": "string", + "beforeScore": 0, + "afterScore": 0, + "beforeVersion": 0, + "afterVersion": 0, + "beforeRulesVersion": "string", + "afterRulesVersion": "string", + "createdAt": "2019-08-24T14:15:22Z" + } + ], + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[[SnapshotHistoryItem](#schemasnapshothistoryitem)]|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

SnapshotHistoryItem

+ + + + + + +```json +{ + "id": 0, + "appealId": 0, + "action": "string", + "dimension": "string", + "period": "string", + "beforeScore": 0, + "afterScore": 0, + "beforeVersion": 0, + "afterVersion": 0, + "beforeRulesVersion": "string", + "afterRulesVersion": "string", + "createdAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|appealId|integer(int64)|false|none||none| +|action|string|false|none||none| +|dimension|string|false|none||none| +|period|string|false|none||none| +|beforeScore|number|false|none||none| +|afterScore|number|false|none||none| +|beforeVersion|integer(int64)|false|none||none| +|afterVersion|integer(int64)|false|none||none| +|beforeRulesVersion|string|false|none||none| +|afterRulesVersion|string|false|none||none| +|createdAt|string(date-time)|false|none||none| + +

ApiResponseListAppealHistoryItem

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": [ + { + "id": 0, + "fromStatus": "string", + "toStatus": "string", + "actorUserId": 0, + "actorRole": "string", + "reason": "string", + "createdAt": "2019-08-24T14:15:22Z" + } + ], + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[[AppealHistoryItem](#schemaappealhistoryitem)]|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

AppealHistoryItem

+ + + + + + +```json +{ + "id": 0, + "fromStatus": "string", + "toStatus": "string", + "actorUserId": 0, + "actorRole": "string", + "reason": "string", + "createdAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|fromStatus|string|false|none||none| +|toStatus|string|false|none||none| +|actorUserId|integer(int64)|false|none||none| +|actorRole|string|false|none||none| +|reason|string|false|none||none| +|createdAt|string(date-time)|false|none||none| + +

PrivacySettingsResponse

+ + + + + + +```json +{ + "id": 1, + "studentUserId": 2, + "resumeVisibility": "APPLIED_COMPANIES", + "contactVisible": true, + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)¦null|false|none||none| +|studentUserId|integer(int64)|false|none||none| +|resumeVisibility|[ResumeVisibility](#schemaresumevisibility)|false|none||简历可见性(PRIVATE/APPLIED_COMPANIES/VERIFIED_COMPANIES)| +|contactVisible|boolean|false|none||none| +|version|integer(int64)|false|none||none| +|createdAt|string(date-time)¦null|false|none||none| +|updatedAt|string(date-time)¦null|false|none||none| + +

ResumeVisibility

+ + + + + + +```json +"PRIVATE" + +``` + +简历可见性:PRIVATE 私有;APPLIED_COMPANIES 仅对企业有效投递可见;VERIFIED_COMPANIES 仅对认证企业可见 + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|*anonymous*|string|false|none||简历可见性:PRIVATE 私有;APPLIED_COMPANIES 仅对企业有效投递可见;VERIFIED_COMPANIES 仅对认证企业可见| + +#### 枚举值 + +|属性|值| +|---|---| +|*anonymous*|PRIVATE| +|*anonymous*|APPLIED_COMPANIES| +|*anonymous*|VERIFIED_COMPANIES| + +

DimensionScoreDetailResponse

+ + + + + + +```json +{ + "dimension": "string", + "score": 0, + "status": "string", + "subScores": [ + { + "name": "string", + "score": 0, + "weight": 0, + "description": "string" + } + ], + "reasons": [ + "string" + ], + "dataSources": [ + { + "source": "string", + "time": "2019-08-24T14:15:22Z", + "note": "string" + } + ], + "updatedAt": "2019-08-24T14:15:22Z", + "rulesVersion": "string", + "displayName": "string", + "whatItMeasures": "string", + "interpretation": "string", + "limitations": [ + "string" + ], + "evidenceLevel": "DIRECT_RULE", + "ruleContributions": [ + { + "ruleCode": "string", + "outcome": "APPLIED", + "contribution": 0, + "maxContribution": 0, + "label": "string", + "observation": "string", + "explanation": "string" + } + ], + "improvementActions": [ + "string" + ], + "explanationVersion": "string", + "validity": { + "completedAt": "2019-08-24T14:15:22Z", + "validUntil": "2019-08-24T14:15:22Z", + "expired": true + }, + "calculatedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|dimension|string|false|none||none| +|score|number|false|none||none| +|status|string|false|none||none| +|subScores|[[SubScore](#schemasubscore)]|false|none||none| +|reasons|[string]|false|none||none| +|dataSources|[[DataSourceItem](#schemadatasourceitem)]|false|none||none| +|updatedAt|string(date-time)|false|none||none| +|rulesVersion|string|false|none||none| +|displayName|string|false|none||none| +|whatItMeasures|string|false|none||none| +|interpretation|string|false|none||none| +|limitations|[string]|false|none||none| +|evidenceLevel|string|false|none||none| +|ruleContributions|[[CandidateScoringRuleContribution](#schemacandidatescoringrulecontribution)]|false|none||none| +|improvementActions|[string]|false|none||none| +|explanationVersion|string|false|none||none| +|validity|[CandidateScoringValidity](#schemacandidatescoringvalidity)|false|none||none| +|calculatedAt|string(date-time)|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|evidenceLevel|DIRECT_RULE| +|evidenceLevel|SELF_REPORTED| +|evidenceLevel|BEHAVIOR_PROXY| +|evidenceLevel|UNVALIDATED_PROXY| + +

ApiResponseInterviewScoreResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "id": 0, + "interviewId": 0, + "applicationId": 0, + "status": "DRAFT", + "technicalScore": 0, + "communicationScore": 0, + "problemSolvingScore": 0, + "roleFitScore": 0, + "professionalismScore": 0, + "overallScore": 0, + "recommendation": "STRONG_HIRE", + "comment": "string", + "submittedAt": "2019-08-24T14:15:22Z", + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[InterviewScoreResponse](#schemainterviewscoreresponse)|false|none||面试评分响应(脱敏:不返回 companyUserId/studentUserId/evaluatorUserId/手机号/邮箱)| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseListInterviewScoreHistoryItem

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": [ + { + "id": 0, + "scoreId": 0, + "interviewId": 0, + "fromStatus": "DRAFT", + "toStatus": "DRAFT", + "actorRole": "COMPANY", + "snapshot": { + "property1": null, + "property2": null + }, + "createdAt": "2019-08-24T14:15:22Z" + } + ], + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[[InterviewScoreHistoryItem](#schemainterviewscorehistoryitem)]|false|none||[评分历史条目(脱敏:不返回 actorUserId/手机号/邮箱)]| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ReportResponseReportedUser

+ + + + + + +```json +{ + "userId": 0, + "nickname": "string", + "role": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|userId|integer(int64)|false|none||none| +|nickname|string|false|none||none| +|role|string|false|none||none| + +

PrivacySettingsUpdateRequest

+ + + + + + +```json +{ + "resumeVisibility": "APPLIED_COMPANIES", + "contactVisible": true, + "version": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|resumeVisibility|[ResumeVisibility](#schemaresumevisibility)|true|none||简历可见性(必填)| +|contactVisible|boolean|true|none||联系方式是否对企业可见(必填)| +|version|integer(int64)|false|none||乐观锁版本号(可选)| + +

ReportResponseDecisionHistoryItem

+ + + + + + +```json +{ + "id": 0, + "fromStatus": "string", + "toStatus": "string", + "actorUserId": 0, + "actorRole": "string", + "note": "string", + "createdAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|fromStatus|string|false|none||none| +|toStatus|string|false|none||none| +|actorUserId|integer(int64)|false|none||none| +|actorRole|string|false|none||none| +|note|string|false|none||none| +|createdAt|string(date-time)|false|none||none| + +

BlockRelationResponse

+ + + + + + +```json +{ + "id": 0, + "blockedUserId": 0, + "nickname": "string", + "createdAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|blockedUserId|integer(int64)|false|none||none| +|nickname|string|false|none||none| +|createdAt|string(date-time)|false|none||none| + +

ApiResponseReportResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "id": 0, + "targetType": "USER", + "targetUserId": 0, + "messageId": 0, + "reportedUserId": 0, + "category": "string", + "reason": "string", + "evidenceUrls": [ + "string" + ], + "status": "PENDING", + "decision": "RESOLVED", + "decisionNote": "string", + "decidedAt": "2019-08-24T14:15:22Z", + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z", + "messagePreview": "string", + "reportedUser": { + "userId": 0, + "nickname": "string", + "role": "string" + }, + "history": [ + { + "id": 0, + "fromStatus": "string", + "toStatus": "string", + "actorUserId": 0, + "actorRole": "string", + "note": "string", + "createdAt": "2019-08-24T14:15:22Z" + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[ReportResponse](#schemareportresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseBlockRelationResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "id": 0, + "blockedUserId": 0, + "nickname": "string", + "createdAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[BlockRelationResponse](#schemablockrelationresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CreateAbilityAttemptRequest

+ + + + + + +```json +{ + "typeCode": "string", + "idempotencyKey": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|typeCode|string|true|none||none| +|idempotencyKey|string|false|none||none| + +

SaveAbilityAnswersRequest

+ + + + + + +```json +{ + "answers": [ + { + "attemptQuestionId": 0, + "selectedOptionId": "stri" + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|answers|[[AbilityAnswerItem](#schemaabilityansweritem)]|true|none||none| + +

AbilityAnswerItem

+ + + + + + +```json +{ + "attemptQuestionId": 0, + "selectedOptionId": "stri" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|attemptQuestionId|integer(int64)|true|none||none| +|selectedOptionId|string|true|none||none| + +

AbilityTypeResponse

+ + + + + + +```json +{ + "typeCode": "string", + "displayName": "string", + "description": "string", + "questionCount": 0, + "attemptQuestionCount": 0, + "timeLimitMinutes": 0, + "resultValidDays": 0, + "status": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|typeCode|string|false|none||none| +|displayName|string|false|none||none| +|description|string|false|none||none| +|questionCount|integer(int32)|false|none||none| +|attemptQuestionCount|integer(int32)|false|none||none| +|timeLimitMinutes|integer(int32)|false|none||none| +|resultValidDays|integer(int32)|false|none||none| +|status|string|false|none||none| + +

AbilityAttemptResponse

+ + + + + + +```json +{ + "attemptId": 0, + "status": "string", + "answeredCount": 0, + "totalQuestions": 0, + "completionRate": 0, + "startedAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "remainingSeconds": 0, + "questions": [ + { + "attemptQuestionId": 0, + "position": 0, + "itemType": "string", + "stem": "string", + "options": [ + { + "optionId": "string", + "text": "string" + } + ], + "selectedOptionId": "string" + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|attemptId|integer(int64)|false|none||none| +|status|string|false|none||none| +|answeredCount|integer(int32)|false|none||none| +|totalQuestions|integer(int32)|false|none||none| +|completionRate|number|false|none||none| +|startedAt|string(date-time)¦null|false|none||none| +|expiresAt|string(date-time)¦null|false|none||none| +|remainingSeconds|integer(int64)¦null|false|none||none| +|questions|[[AbilityAttemptQuestionView](#schemaabilityattemptquestionview)]|false|none||none| + +

AbilityAttemptQuestionView

+ + + + + + +```json +{ + "attemptQuestionId": 0, + "position": 0, + "itemType": "string", + "stem": "string", + "options": [ + { + "optionId": "string", + "text": "string" + } + ], + "selectedOptionId": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|attemptQuestionId|integer(int64)|false|none||none| +|position|integer(int32)|false|none||none| +|itemType|string|false|none||none| +|stem|string|false|none||none| +|options|[[AbilityOptionView](#schemaabilityoptionview)]|false|none||none| +|selectedOptionId|string|false|none||none| + +

AdminCompanyReviewReplyResponse

+ + + + + + +```json +{ + "id": 1, + "reviewId": 100, + "companyUserId": 5, + "content": "感谢您的反馈,我们会持续改进", + "moderationStatus": "PENDING", + "moderationReason": "内容合规", + "createdAt": "2026-09-01T10:00:00", + "updatedAt": "2026-09-01T10:00:00", + "moderationUpdatedAt": "2026-09-01T10:00:00", + "jobId": 50, + "jobTitle": "Java 后端工程师", + "companyId": 2, + "companyName": "本源科技", + "reviewRating": 3, + "reviewContent": "整体体验不错", + "studentUserId": 2 +} + +``` + +管理端企业回复(含岗位/企业/评价上下文) + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||回复 ID| +|reviewId|integer(int64)|false|none||被回复的评价 ID| +|companyUserId|integer(int64)|false|none||回复企业用户 id| +|content|string|false|none||回复内容| +|moderationStatus|string|false|none||审核状态:PENDING/APPROVED/REJECTED| +|moderationReason|string|false|none||审核原因/意见| +|createdAt|string(date-time)|false|none||创建时间| +|updatedAt|string(date-time)|false|none||更新时间| +|moderationUpdatedAt|string(date-time)|false|none||审核时间| +|jobId|integer(int64)|false|none||岗位 ID| +|jobTitle|string|false|none||岗位标题| +|companyId|integer(int64)|false|none||企业 ID| +|companyName|string|false|none||企业名称| +|reviewRating|integer(int32)|false|none||评价评分| +|reviewContent|string|false|none||评价内容| +|studentUserId|integer(int64)|false|none||评价学生用户 id| + +

AbilityOptionView

+ + + + + + +```json +{ + "optionId": "string", + "text": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|optionId|string|false|none||none| +|text|string|false|none||none| + +

ApiResponsePageResponseAdminCompanyReviewReplyResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "id": 1, + "reviewId": 100, + "companyUserId": 5, + "content": "感谢您的反馈,我们会持续改进", + "moderationStatus": "PENDING", + "moderationReason": "内容合规", + "createdAt": "2026-09-01T10:00:00", + "updatedAt": "2026-09-01T10:00:00", + "moderationUpdatedAt": "2026-09-01T10:00:00", + "jobId": 50, + "jobTitle": "Java 后端工程师", + "companyId": 2, + "companyName": "本源科技", + "reviewRating": 3, + "reviewContent": "整体体验不错", + "studentUserId": 2 + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[PageResponseAdminCompanyReviewReplyResponse](#schemapageresponseadmincompanyreviewreplyresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

AbilityResultResponse

+ + + + + + +```json +{ + "attemptId": 0, + "typeCode": "string", + "status": "string", + "validityStatus": "string", + "validUntil": "2019-08-24T14:15:22Z", + "dimensionScores": [ + { + "code": "string", + "score": 0, + "answeredCount": 0 + } + ], + "overallScore": 0, + "weaknesses": [ + { + "code": "string", + "score": 0 + } + ], + "improvementAreas": [ + { + "dimension": "string", + "currentScore": 0, + "summary": "string", + "actions": [ + "string" + ] + } + ], + "radar": [ + { + "code": "string", + "value": 0 + } + ], + "answeredCount": 0, + "completionRate": 0, + "questionFeedback": [ + { + "attemptQuestionId": 0, + "position": 0, + "stem": "string", + "selectedOptionId": "string", + "awardedScore": 0, + "maxScore": 0, + "explanation": "string" + } + ], + "questionSetVersion": "string", + "rulesVersion": "string", + "generatedAt": "2019-08-24T14:15:22Z", + "disclaimer": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|attemptId|integer(int64)|false|none||none| +|typeCode|string|false|none||none| +|status|string|false|none||none| +|validityStatus|string|false|none||none| +|validUntil|string(date-time)¦null|false|none||none| +|dimensionScores|[[AbilityDimensionScore](#schemaabilitydimensionscore)]|false|none||none| +|overallScore|number|false|none||none| +|weaknesses|[[AbilityWeakness](#schemaabilityweakness)]|false|none||none| +|improvementAreas|[[AbilityImprovementArea](#schemaabilityimprovementarea)]|false|none||none| +|radar|[[AbilityRadarEntry](#schemaabilityradarentry)]|false|none||none| +|answeredCount|integer(int32)|false|none||none| +|completionRate|number|false|none||none| +|questionFeedback|[[AbilityQuestionFeedback](#schemaabilityquestionfeedback)]|false|none||none| +|questionSetVersion|string|false|none||none| +|rulesVersion|string|false|none||none| +|generatedAt|string(date-time)|false|none||none| +|disclaimer|string|false|none||none| + +

PageResponseAdminCompanyReviewReplyResponse

+ + + + + + +```json +{ + "items": [ + { + "id": 1, + "reviewId": 100, + "companyUserId": 5, + "content": "感谢您的反馈,我们会持续改进", + "moderationStatus": "PENDING", + "moderationReason": "内容合规", + "createdAt": "2026-09-01T10:00:00", + "updatedAt": "2026-09-01T10:00:00", + "moderationUpdatedAt": "2026-09-01T10:00:00", + "jobId": 50, + "jobTitle": "Java 后端工程师", + "companyId": 2, + "companyName": "本源科技", + "reviewRating": 3, + "reviewContent": "整体体验不错", + "studentUserId": 2 + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|items|[[AdminCompanyReviewReplyResponse](#schemaadmincompanyreviewreplyresponse)]|false|none||[管理端企业回复(含岗位/企业/评价上下文)]| +|total|integer(int64)|false|none||none| +|page|integer(int32)|false|none||none| +|size|integer(int32)|false|none||none| +|totalPages|integer(int32)|false|none||none| + +

AbilityDimensionScore

+ + + + + + +```json +{ + "code": "string", + "score": 0, + "answeredCount": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|string|false|none||none| +|score|number|false|none||none| +|answeredCount|integer(int32)|false|none||none| + +

AbilityWeakness

+ + + + + + +```json +{ + "code": "string", + "score": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|string|false|none||none| +|score|number|false|none||none| + +

AbilityImprovementArea

+ + + + + + +```json +{ + "dimension": "string", + "currentScore": 0, + "summary": "string", + "actions": [ + "string" + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|dimension|string|false|none||none| +|currentScore|number|false|none||none| +|summary|string|false|none||none| +|actions|[string]|false|none||none| + +

AbilityRadarEntry

+ + + + + + +```json +{ + "code": "string", + "value": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|string|false|none||none| +|value|number|false|none||none| + +

InterviewScoreSaveRequest

+ + + + + + +```json +{ + "technicalScore": 1, + "communicationScore": 1, + "problemSolvingScore": 1, + "roleFitScore": 1, + "professionalismScore": 1, + "recommendation": "STRONG_HIRE", + "comment": "string" +} + +``` + +评分草稿保存请求;overallScore 由服务端计算,客户端不得传入 + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|technicalScore|integer¦null|false|none||none| +|communicationScore|integer¦null|false|none||none| +|problemSolvingScore|integer¦null|false|none||none| +|roleFitScore|integer¦null|false|none||none| +|professionalismScore|integer¦null|false|none||none| +|recommendation|string¦null|false|none||企业手动选择,不根据 overallScore 自动推导| +|comment|string¦null|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|recommendation|STRONG_HIRE| +|recommendation|HIRE| +|recommendation|NEUTRAL| +|recommendation|NO_HIRE| + +

AbilityQuestionFeedback

+ + + + + + +```json +{ + "attemptQuestionId": 0, + "position": 0, + "stem": "string", + "selectedOptionId": "string", + "awardedScore": 0, + "maxScore": 0, + "explanation": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|attemptQuestionId|integer(int64)|false|none||none| +|position|integer(int32)|false|none||none| +|stem|string|false|none||none| +|selectedOptionId|string|false|none||none| +|awardedScore|integer(int32)|false|none||none| +|maxScore|integer(int32)|false|none||none| +|explanation|string|false|none||none| + +

InterviewScoreResponse

+ + + + + + +```json +{ + "id": 0, + "interviewId": 0, + "applicationId": 0, + "status": "DRAFT", + "technicalScore": 0, + "communicationScore": 0, + "problemSolvingScore": 0, + "roleFitScore": 0, + "professionalismScore": 0, + "overallScore": 0, + "recommendation": "STRONG_HIRE", + "comment": "string", + "submittedAt": "2019-08-24T14:15:22Z", + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" +} + +``` + +面试评分响应(脱敏:不返回 companyUserId/studentUserId/evaluatorUserId/手机号/邮箱) + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|interviewId|integer(int64)|false|none||none| +|applicationId|integer(int64)|false|none||none| +|status|string|false|none||none| +|technicalScore|integer¦null|false|none||none| +|communicationScore|integer¦null|false|none||none| +|problemSolvingScore|integer¦null|false|none||none| +|roleFitScore|integer¦null|false|none||none| +|professionalismScore|integer¦null|false|none||none| +|overallScore|number(decimal)¦null|false|none||由服务端 BigDecimal 计算:(t+c+ps+rf+p)/5,保留两位小数 HALF_UP| +|recommendation|string¦null|false|none||none| +|comment|string¦null|false|none||none| +|submittedAt|string(date-time)¦null|false|none||none| +|version|integer(int64)|false|none||none| +|createdAt|string(date-time)|false|none||none| +|updatedAt|string(date-time)|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|status|DRAFT| +|status|SUBMITTED| +|recommendation|STRONG_HIRE| +|recommendation|HIRE| +|recommendation|NEUTRAL| +|recommendation|NO_HIRE| + +

AbilityHistoryItem

+ + + + + + +```json +{ + "attemptId": 0, + "typeCode": "string", + "status": "string", + "validityStatus": "string", + "overallScore": 0, + "answeredCount": 0, + "completionRate": 0, + "startedAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "completedAt": "2019-08-24T14:15:22Z", + "validUntil": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|attemptId|integer(int64)|false|none||none| +|typeCode|string|false|none||none| +|status|string|false|none||none| +|validityStatus|string|false|none||none| +|overallScore|number|false|none||none| +|answeredCount|integer(int32)|false|none||none| +|completionRate|number|false|none||none| +|startedAt|string(date-time)¦null|false|none||none| +|expiresAt|string(date-time)¦null|false|none||none| +|completedAt|string(date-time)¦null|false|none||none| +|validUntil|string(date-time)¦null|false|none||none| + +

ApiResponseAbilityTypeResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "typeCode": "string", + "displayName": "string", + "description": "string", + "questionCount": 0, + "attemptQuestionCount": 0, + "timeLimitMinutes": 0, + "resultValidDays": 0, + "status": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[AbilityTypeResponse](#schemaabilitytyperesponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

InterviewScoreHistoryItem

+ + + + + + +```json +{ + "id": 0, + "scoreId": 0, + "interviewId": 0, + "fromStatus": "DRAFT", + "toStatus": "DRAFT", + "actorRole": "COMPANY", + "snapshot": { + "property1": null, + "property2": null + }, + "createdAt": "2019-08-24T14:15:22Z" +} + +``` + +评分历史条目(脱敏:不返回 actorUserId/手机号/邮箱) + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|scoreId|integer(int64)|false|none||none| +|interviewId|integer(int64)|false|none||none| +|fromStatus|string¦null|false|none||none| +|toStatus|string|false|none||none| +|actorRole|string|false|none||none| +|snapshot|object|false|none||none| +|» **additionalProperties**|any|false|none||none| +|createdAt|string(date-time)|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|fromStatus|DRAFT| +|fromStatus|SUBMITTED| +|toStatus|DRAFT| +|toStatus|SUBMITTED| + +

ApiResponseAbilityAttemptResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "attemptId": 0, + "status": "string", + "answeredCount": 0, + "totalQuestions": 0, + "completionRate": 0, + "startedAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "remainingSeconds": 0, + "questions": [ + { + "attemptQuestionId": 0, + "position": 0, + "itemType": "string", + "stem": "string", + "options": [ + { + "optionId": null, + "text": null + } + ], + "selectedOptionId": "string" + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[AbilityAttemptResponse](#schemaabilityattemptresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseAbilityResultResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "attemptId": 0, + "typeCode": "string", + "status": "string", + "validityStatus": "string", + "validUntil": "2019-08-24T14:15:22Z", + "dimensionScores": [ + { + "code": "string", + "score": 0, + "answeredCount": 0 + } + ], + "overallScore": 0, + "weaknesses": [ + { + "code": "string", + "score": 0 + } + ], + "improvementAreas": [ + { + "dimension": "string", + "currentScore": 0, + "summary": "string", + "actions": [ + "string" + ] + } + ], + "radar": [ + { + "code": "string", + "value": 0 + } + ], + "answeredCount": 0, + "completionRate": 0, + "questionFeedback": [ + { + "attemptQuestionId": 0, + "position": 0, + "stem": "string", + "selectedOptionId": "string", + "awardedScore": 0, + "maxScore": 0, + "explanation": "string" + } + ], + "questionSetVersion": "string", + "rulesVersion": "string", + "generatedAt": "2019-08-24T14:15:22Z", + "disclaimer": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[AbilityResultResponse](#schemaabilityresultresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CreateReportRequest

+ + + + + + +```json +{ + "targetType": "USER", + "targetUserId": 0, + "messageId": 0, + "category": "string", + "reason": "string", + "evidenceUrls": [ + "string" + ], + "idempotencyKey": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|targetType|string|false|none||举报目标类型;USER 必填 targetUserId,MESSAGE 必填 messageId| +|targetUserId|integer(int64)|false|none||targetType=USER 时必填| +|messageId|integer(int64)|false|none||targetType=MESSAGE 时必填| +|category|string|false|none||举报分类,如 HARASSMENT| +|reason|string|false|none||none| +|evidenceUrls|[string]|false|none||最多 5 个,仅 http/https,最多 500 字符| +|idempotencyKey|string|false|none||幂等键(可选)| + +#### 枚举值 + +|属性|值| +|---|---| +|targetType|USER| +|targetType|MESSAGE| + +

ApiResponsePageResponseAbilityHistoryItem

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "attemptId": 0, + "typeCode": "string", + "status": "string", + "validityStatus": "string", + "overallScore": 0, + "answeredCount": 0, + "completionRate": 0, + "startedAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "completedAt": "2019-08-24T14:15:22Z", + "validUntil": "2019-08-24T14:15:22Z" + } + ], + "totalElements": 0, + "page": 0, + "size": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|object|false|none||none| +|» items|[[AbilityHistoryItem](#schemaabilityhistoryitem)]|false|none||none| +|» totalElements|integer(int64)|false|none||none| +|» page|integer(int32)|false|none||none| +|» size|integer(int32)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ReportDecisionRequest

+ + + + + + +```json +{ + "decision": "RESOLVED", + "note": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|decision|string|false|none||none| +|note|string|false|none||REJECTED 必填| + +#### 枚举值 + +|属性|值| +|---|---| +|decision|RESOLVED| +|decision|REJECTED| + +

RiskRuleResponse

+ + + + + + +```json +{ + "ruleCode": "string", + "sourceAction": "string", + "thresholdCount": 0, + "windowMinutes": 0, + "severity": "string", + "enabled": true, + "version": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|ruleCode|string|false|none||none| +|sourceAction|string|false|none||none| +|thresholdCount|integer(int32)|false|none||none| +|windowMinutes|integer(int32)|false|none||none| +|severity|string|false|none||none| +|enabled|boolean|false|none||none| +|version|integer(int64)|false|none||none| + +

ReportResponse

+ + + + + + +```json +{ + "id": 0, + "targetType": "USER", + "targetUserId": 0, + "messageId": 0, + "reportedUserId": 0, + "category": "string", + "reason": "string", + "evidenceUrls": [ + "string" + ], + "status": "PENDING", + "decision": "RESOLVED", + "decisionNote": "string", + "decidedAt": "2019-08-24T14:15:22Z", + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z", + "messagePreview": "string", + "reportedUser": { + "userId": 0, + "nickname": "string", + "role": "string" + }, + "history": [ + { + "id": 0, + "fromStatus": "string", + "toStatus": "string", + "actorUserId": 0, + "actorRole": "string", + "note": "string", + "createdAt": "2019-08-24T14:15:22Z" + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|targetType|string|false|none||none| +|targetUserId|integer(int64)|false|none||none| +|messageId|integer(int64)|false|none||none| +|reportedUserId|integer(int64)|false|none||none| +|category|string|false|none||none| +|reason|string|false|none||none| +|evidenceUrls|[string]|false|none||none| +|status|string|false|none||none| +|decision|string|false|none||none| +|decisionNote|string|false|none||none| +|decidedAt|string(date-time)|false|none||none| +|createdAt|string(date-time)|false|none||none| +|updatedAt|string(date-time)|false|none||none| +|messagePreview|string|false|none||MESSAGE 举报的脱敏消息预览,不返回会话其他敏感内容| +|reportedUser|[ReportResponseReportedUser](#schemareportresponsereporteduser)|false|none||none| +|history|[[ReportResponseDecisionHistoryItem](#schemareportresponsedecisionhistoryitem)]|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|targetType|USER| +|targetType|MESSAGE| +|status|PENDING| +|status|RESOLVED| +|status|REJECTED| +|decision|RESOLVED| +|decision|REJECTED| + +

RiskEventResponse

+ + + + + + +```json +{ + "eventId": 0, + "ruleCode": "string", + "sourceAction": "string", + "severity": "string", + "status": "string", + "occurrenceCount": 0, + "windowStartedAt": "2019-08-24T14:15:22Z", + "windowEndedAt": "2019-08-24T14:15:22Z", + "detectedAt": "2019-08-24T14:15:22Z", + "version": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|eventId|integer(int64)|false|none||none| +|ruleCode|string|false|none||none| +|sourceAction|string|false|none||none| +|severity|string|false|none||none| +|status|string|false|none||none| +|occurrenceCount|integer(int32)|false|none||none| +|windowStartedAt|string(date-time)|false|none||none| +|windowEndedAt|string(date-time)|false|none||none| +|detectedAt|string(date-time)|false|none||none| +|version|integer(int64)|false|none||none| + +

RiskSeverityCount

+ + + + + + +```json +{ + "severity": "string", + "count": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|severity|string|false|none||none| +|count|integer(int64)|false|none||none| + +

RiskRuleCount

+ + + + + + +```json +{ + "ruleCode": "string", + "count": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|ruleCode|string|false|none||none| +|count|integer(int64)|false|none||none| + +

RiskOverviewResponse

+ + + + + + +```json +{ + "openCount": 0, + "bySeverity": [ + { + "severity": "string", + "count": 0 + } + ], + "byRule": [ + { + "ruleCode": "string", + "count": 0 + } + ], + "lastDetectedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|openCount|integer(int64)|false|none||none| +|bySeverity|[[RiskSeverityCount](#schemariskseveritycount)]|false|none||none| +|byRule|[[RiskRuleCount](#schemariskrulecount)]|false|none||none| +|lastDetectedAt|string(date-time)¦null|false|none||none| + +

RiskTrendPoint

+ + + + + + +```json +{ + "time": "2019-08-24T14:15:22Z", + "count": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|time|string(date-time)|false|none||none| +|count|integer(int64)|false|none||none| + +

ApiResponsePageResponseReportResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "id": 0, + "targetType": "USER", + "targetUserId": 0, + "messageId": 0, + "reportedUserId": 0, + "category": "string", + "reason": "string", + "evidenceUrls": [ + "string" + ], + "status": "PENDING", + "decision": "RESOLVED", + "decisionNote": "string", + "decidedAt": "2019-08-24T14:15:22Z", + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z", + "messagePreview": "string", + "reportedUser": { + "userId": 0, + "nickname": "string", + "role": "string" + }, + "history": [ + { + "id": null, + "fromStatus": null, + "toStatus": null, + "actorUserId": null, + "actorRole": null, + "note": null, + "createdAt": null + } + ] + } + ], + "totalElements": 0, + "page": 0, + "size": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|object|false|none||none| +|» items|[[ReportResponse](#schemareportresponse)]|false|none||none| +|» totalElements|integer(int64)|false|none||none| +|» page|integer(int32)|false|none||none| +|» size|integer(int32)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

RiskTrendResponse

+ + + + + + +```json +{ + "bucket": "string", + "items": [ + { + "time": "2019-08-24T14:15:22Z", + "count": 0 + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|bucket|string|false|none||none| +|items|[[RiskTrendPoint](#schemarisktrendpoint)]|false|none||none| + +

RiskDistributionRow

+ + + + + + +```json +{ + "ruleCode": "string", + "severity": "string", + "count": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|ruleCode|string|false|none||none| +|severity|string|false|none||none| +|count|integer(int64)|false|none||none| + +

ApiResponsePageResponseBlockRelationResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "id": 0, + "blockedUserId": 0, + "nickname": "string", + "createdAt": "2019-08-24T14:15:22Z" + } + ], + "totalElements": 0, + "page": 0, + "size": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|object|false|none||none| +|» items|[[BlockRelationResponse](#schemablockrelationresponse)]|false|none||none| +|» totalElements|integer(int64)|false|none||none| +|» page|integer(int32)|false|none||none| +|» size|integer(int32)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

RiskDistributionResponse

+ + + + + + +```json +{ + "items": [ + { + "ruleCode": "string", + "severity": "string", + "count": 0 + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|items|[[RiskDistributionRow](#schemariskdistributionrow)]|false|none||none| + +

RiskRuleUpdateRequest

+ + + + + + +```json +{ + "enabled": true, + "thresholdCount": 0, + "windowMinutes": 0, + "severity": "string", + "expectedVersion": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|enabled|boolean|true|none||none| +|thresholdCount|integer(int32)|true|none||none| +|windowMinutes|integer(int32)|true|none||none| +|severity|string|true|none||none| +|expectedVersion|integer(int64)|true|none||none| + +

RiskEventActionRequest

+ + + + + + +```json +{ + "action": "string", + "reasonCode": "string", + "expectedVersion": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|action|string|true|none||none| +|reasonCode|string|true|none||none| +|expectedVersion|integer(int64)|true|none||none| + +

ApiResponseRiskOverviewResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "openCount": 0, + "bySeverity": [ + { + "severity": "string", + "count": 0 + } + ], + "byRule": [ + { + "ruleCode": "string", + "count": 0 + } + ], + "lastDetectedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[RiskOverviewResponse](#schemariskoverviewresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseRiskTrendResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "bucket": "string", + "items": [ + { + "time": "2019-08-24T14:15:22Z", + "count": 0 + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[RiskTrendResponse](#schemarisktrendresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseRiskDistributionResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "ruleCode": "string", + "severity": "string", + "count": 0 + } + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[RiskDistributionResponse](#schemariskdistributionresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponsePageResponseRiskEventResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "eventId": 0, + "ruleCode": "string", + "sourceAction": "string", + "severity": "string", + "status": "string", + "occurrenceCount": 0, + "windowStartedAt": "2019-08-24T14:15:22Z", + "windowEndedAt": "2019-08-24T14:15:22Z", + "detectedAt": "2019-08-24T14:15:22Z", + "version": 0 + } + ], + "totalElements": 0, + "page": 0, + "size": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|object|false|none||none| +|» items|[[RiskEventResponse](#schemariskeventresponse)]|false|none||none| +|» totalElements|integer(int64)|false|none||none| +|» page|integer(int32)|false|none||none| +|» size|integer(int32)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseRiskRuleResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "ruleCode": "string", + "sourceAction": "string", + "thresholdCount": 0, + "windowMinutes": 0, + "severity": "string", + "enabled": true, + "version": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[RiskRuleResponse](#schemariskruleresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseRiskEventResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "eventId": 0, + "ruleCode": "string", + "sourceAction": "string", + "severity": "string", + "status": "string", + "occurrenceCount": 0, + "windowStartedAt": "2019-08-24T14:15:22Z", + "windowEndedAt": "2019-08-24T14:15:22Z", + "detectedAt": "2019-08-24T14:15:22Z", + "version": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[RiskEventResponse](#schemariskeventresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseListRiskRuleResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": [ + { + "ruleCode": "string", + "sourceAction": "string", + "thresholdCount": 0, + "windowMinutes": 0, + "severity": "string", + "enabled": true, + "version": 0 + } + ], + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[[RiskRuleResponse](#schemariskruleresponse)]|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

TalentDiscoveryPreferenceResponse

+ + + + + + +```json +{ + "enabled": true, + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|enabled|boolean|false|none||none| +|version|integer(int64)|false|none||none| +|createdAt|string(date-time)|false|none||none| +|updatedAt|string(date-time)|false|none||none| + +

TalentDiscoveryPreferenceUpdateRequest

+ + + + + + +```json +{ + "enabled": true, + "expectedVersion": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|enabled|boolean|true|none||none| +|expectedVersion|integer(int64)|false|none||none| + +

TalentDiscoveryCandidateResponse

+ + + + + + +```json +{ + "candidateKey": "string", + "candidateLabel": "string", + "city": "string", + "education": "string", + "graduationYear": 0, + "skills": [ + "string" + ], + "fitBand": "HIGH", + "summary": "string", + "signalsAvailable": [ + "PREFERENCE" + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|candidateKey|string|false|none||none| +|candidateLabel|string|false|none||none| +|city|string|false|none||none| +|education|string|false|none||none| +|graduationYear|integer(int32)|false|none||none| +|skills|[string]|false|none||none| +|fitBand|string|false|none||none| +|summary|string|false|none||none| +|signalsAvailable|[string]|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|fitBand|HIGH| +|fitBand|MEDIUM| +|fitBand|BASIC| + +

TalentDiscoveryPageResponse

+ + + + + + +```json +{ + "mode": "PERSONALIZED", + "items": [ + { + "candidateKey": "string", + "candidateLabel": "string", + "city": "string", + "education": "string", + "graduationYear": 0, + "skills": [ + "string" + ], + "fitBand": "HIGH", + "summary": "string", + "signalsAvailable": [ + "PREFERENCE" + ] + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0, + "message": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|mode|string|false|none||none| +|items|[[TalentDiscoveryCandidateResponse](#schematalentdiscoverycandidateresponse)]|false|none||none| +|total|integer(int64)|false|none||none| +|page|integer(int32)|false|none||none| +|size|integer(int32)|false|none||none| +|totalPages|integer(int32)|false|none||none| +|message|string|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|mode|PERSONALIZED| +|mode|UNAVAILABLE| +|mode|NO_ELIGIBLE_CANDIDATE| + +

ApiResponseTalentDiscoveryPreferenceResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "enabled": true, + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "updatedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[TalentDiscoveryPreferenceResponse](#schematalentdiscoverypreferenceresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseTalentDiscoveryPageResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "mode": "PERSONALIZED", + "items": [ + { + "candidateKey": "string", + "candidateLabel": "string", + "city": "string", + "education": "string", + "graduationYear": 0, + "skills": [ + "string" + ], + "fitBand": "HIGH", + "summary": "string", + "signalsAvailable": [ + "PREFERENCE" + ] + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0, + "message": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[TalentDiscoveryPageResponse](#schematalentdiscoverypageresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CreateTalentInvitationRequest

+ + + + + + +```json +{ + "candidateKey": "string", + "message": "string", + "idempotencyKey": "0c14c6a6-6f50-4d1e-b0c4-b46ff43ba6a1" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|candidateKey|string|true|none||none| +|message|string|true|none||none| +|idempotencyKey|string(uuid)|true|none||none| + +

TalentInvitationDecisionRequest

+ + + + + + +```json +{ + "decision": "ACCEPT", + "expectedVersion": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|decision|string|true|none||none| +|expectedVersion|integer(int64)|true|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|decision|ACCEPT| +|decision|REJECT| + +

CompanyTalentInvitationResponse

+ + + + + + +```json +{ + "invitationId": 0, + "jobId": 0, + "jobTitle": "string", + "candidateLabel": "string", + "message": "string", + "status": "PENDING", + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|invitationId|integer(int64)|false|none||none| +|jobId|integer(int64)|false|none||none| +|jobTitle|string|false|none||none| +|candidateLabel|string|false|none||none| +|message|string|false|none||none| +|status|string|false|none||none| +|createdAt|string(date-time)|false|none||none| +|expiresAt|string(date-time)|false|none||none| +|decidedAt|string(date-time)|false|none||none| +|conversationId|integer(int64)|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|status|PENDING| +|status|ACCEPTED| +|status|REJECTED| +|status|EXPIRED| + +

StudentTalentInvitationResponse

+ + + + + + +```json +{ + "invitationId": 0, + "companyId": 0, + "companyName": "string", + "jobId": 0, + "jobTitle": "string", + "jobCity": "string", + "message": "string", + "status": "PENDING", + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|invitationId|integer(int64)|false|none||none| +|companyId|integer(int64)|false|none||none| +|companyName|string|false|none||none| +|jobId|integer(int64)|false|none||none| +|jobTitle|string|false|none||none| +|jobCity|string|false|none||none| +|message|string|false|none||none| +|status|string|false|none||none| +|version|integer(int64)|false|none||none| +|createdAt|string(date-time)|false|none||none| +|expiresAt|string(date-time)|false|none||none| +|decidedAt|string(date-time)|false|none||none| +|conversationId|integer(int64)|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|status|PENDING| +|status|ACCEPTED| +|status|REJECTED| +|status|EXPIRED| + +

TalentInvitationPageResponseCompanyTalentInvitationResponse

+ + + + + + +```json +{ + "items": [ + { + "invitationId": 0, + "jobId": 0, + "jobTitle": "string", + "candidateLabel": "string", + "message": "string", + "status": "PENDING", + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|items|[[CompanyTalentInvitationResponse](#schemacompanytalentinvitationresponse)]|false|none||none| +|total|integer(int64)|false|none||none| +|page|integer(int32)|false|none||none| +|size|integer(int32)|false|none||none| +|totalPages|integer(int32)|false|none||none| + +

TalentInvitationPageResponseStudentTalentInvitationResponse

+ + + + + + +```json +{ + "items": [ + { + "invitationId": 0, + "companyId": 0, + "companyName": "string", + "jobId": 0, + "jobTitle": "string", + "jobCity": "string", + "message": "string", + "status": "PENDING", + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|items|[[StudentTalentInvitationResponse](#schemastudenttalentinvitationresponse)]|false|none||none| +|total|integer(int64)|false|none||none| +|page|integer(int32)|false|none||none| +|size|integer(int32)|false|none||none| +|totalPages|integer(int32)|false|none||none| + +

ApiResponseCompanyTalentInvitationResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "invitationId": 0, + "jobId": 0, + "jobTitle": "string", + "candidateLabel": "string", + "message": "string", + "status": "PENDING", + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[CompanyTalentInvitationResponse](#schemacompanytalentinvitationresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseStudentTalentInvitationResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "invitationId": 0, + "companyId": 0, + "companyName": "string", + "jobId": 0, + "jobTitle": "string", + "jobCity": "string", + "message": "string", + "status": "PENDING", + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[StudentTalentInvitationResponse](#schemastudenttalentinvitationresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseCompanyTalentInvitationPageResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "invitationId": 0, + "jobId": 0, + "jobTitle": "string", + "candidateLabel": "string", + "message": "string", + "status": "PENDING", + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[TalentInvitationPageResponseCompanyTalentInvitationResponse](#schematalentinvitationpageresponsecompanytalentinvitationresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseStudentTalentInvitationPageResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "invitationId": 0, + "companyId": 0, + "companyName": "string", + "jobId": 0, + "jobTitle": "string", + "jobCity": "string", + "message": "string", + "status": "PENDING", + "version": 0, + "createdAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z", + "conversationId": 0 + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[TalentInvitationPageResponseStudentTalentInvitationResponse](#schematalentinvitationpageresponsestudenttalentinvitationresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

FairnessResponseDistribution

+ + + + + + +```json +{ + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|sampleSize|integer|false|none||none| +|mean|number|false|none||none| +|median|number|false|none||none| +|p10|number|false|none||none| +|p25|number|false|none||none| +|p75|number|false|none||none| +|p90|number|false|none||none| +|min|number|false|none||none| +|max|number|false|none||none| +|standardDeviation|number|false|none||none| +|buckets|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|concentrationRate|number|false|none||none| +|riskLevel|string|false|none||none| +|availability|string|false|none||none| +|reason|string|false|none||none| + +

FairnessResponseDimensionMetric

+ + + + + + +```json +{ + "dimension": "string", + "populationSize": 0, + "rowCount": 0, + "missingRowCount": 0, + "validSampleSize": 0, + "confidence": "string", + "missingRowRate": 0, + "nullScoreRate": 0, + "validCoverage": 0, + "statusCounts": { + "property1": 0, + "property2": 0 + }, + "versionCounts": { + "property1": 0, + "property2": 0 + }, + "inconsistentRecordCount": 0, + "unknownStatusCount": 0, + "outOfRangeScoreCount": 0, + "unknownRulesVersionCount": 0, + "distribution": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + }, + "distributionsByRulesVersion": { + "property1": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + }, + "property2": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + } + }, + "availability": "string", + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|dimension|string|false|none||none| +|populationSize|integer|false|none||none| +|rowCount|integer|false|none||none| +|missingRowCount|integer|false|none||none| +|validSampleSize|integer|false|none||none| +|confidence|string|false|none||none| +|missingRowRate|number|false|none||none| +|nullScoreRate|number|false|none||none| +|validCoverage|number|false|none||none| +|statusCounts|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|versionCounts|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|inconsistentRecordCount|integer|false|none||none| +|unknownStatusCount|integer|false|none||none| +|outOfRangeScoreCount|integer|false|none||none| +|unknownRulesVersionCount|integer|false|none||none| +|distribution|[FairnessResponseDistribution](#schemafairnessresponsedistribution)|false|none||none| +|distributionsByRulesVersion|object|false|none||none| +|» **additionalProperties**|[FairnessResponseDistribution](#schemafairnessresponsedistribution)|false|none||none| +|availability|string|false|none||none| +|reason|string|false|none||none| + +

FairnessResponseOverview

+ + + + + + +```json +{ + "basis": "string", + "scope": "string", + "period": "string", + "capturedAt": "2019-08-24T14:15:22Z", + "populationSize": 0, + "computableSnapshotRatio": 0, + "confidence": "string", + "riskLevel": "string", + "versionCounts": { + "property1": 0, + "property2": 0 + }, + "mixedVersionCount": 0, + "unknownVersionCount": 0, + "distribution": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + }, + "distributionsByRulesVersion": { + "property1": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + }, + "property2": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + } + }, + "coherentVersionSubset": [ + "string" + ], + "availability": "string", + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|basis|string|false|none||none| +|scope|string|false|none||none| +|period|string|false|none||none| +|capturedAt|string(date-time)|false|none||none| +|populationSize|integer|false|none||none| +|computableSnapshotRatio|number|false|none||none| +|confidence|string|false|none||none| +|riskLevel|string|false|none||none| +|versionCounts|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|mixedVersionCount|integer|false|none||none| +|unknownVersionCount|integer|false|none||none| +|distribution|[FairnessResponseDistribution](#schemafairnessresponsedistribution)|false|none||none| +|distributionsByRulesVersion|object|false|none||none| +|» **additionalProperties**|[FairnessResponseDistribution](#schemafairnessresponsedistribution)|false|none||none| +|coherentVersionSubset|[string]|false|none||none| +|availability|string|false|none||none| +|reason|string|false|none||none| + +

FairnessResponseDimensions

+ + + + + + +```json +{ + "basis": "string", + "scope": "string", + "period": "string", + "capturedAt": "2019-08-24T14:15:22Z", + "dimensions": [ + { + "dimension": "string", + "populationSize": 0, + "rowCount": 0, + "missingRowCount": 0, + "validSampleSize": 0, + "confidence": "string", + "missingRowRate": 0, + "nullScoreRate": 0, + "validCoverage": 0, + "statusCounts": { + "property1": 0, + "property2": 0 + }, + "versionCounts": { + "property1": 0, + "property2": 0 + }, + "inconsistentRecordCount": 0, + "unknownStatusCount": 0, + "outOfRangeScoreCount": 0, + "unknownRulesVersionCount": 0, + "distribution": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + }, + "distributionsByRulesVersion": { + "property1": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + }, + "property2": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + } + }, + "availability": "string", + "reason": "string" + } + ], + "availability": "string", + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|basis|string|false|none||none| +|scope|string|false|none||none| +|period|string|false|none||none| +|capturedAt|string(date-time)|false|none||none| +|dimensions|[[FairnessResponseDimensionMetric](#schemafairnessresponsedimensionmetric)]|false|none||none| +|availability|string|false|none||none| +|reason|string|false|none||none| + +

FairnessResponseUnavailable

+ + + + + + +```json +{ + "availability": "UNAVAILABLE", + "reason": "string", + "capturedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|availability|string|false|none||none| +|reason|string|false|none||none| +|capturedAt|string(date-time)|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|availability|UNAVAILABLE| + +

FairnessResponseAppeals

+ + + + + + +```json +{ + "basis": "string", + "from": "2019-08-24", + "to": "2019-08-24", + "capturedAt": "2019-08-24T14:15:22Z", + "appealCount": 0, + "sampleSize": 0, + "statusCounts": { + "property1": 0, + "property2": 0 + }, + "statusEventCounts": { + "property1": 0, + "property2": 0 + }, + "statusCandidateCounts": { + "property1": 0, + "property2": 0 + }, + "confidence": "string", + "approvedEverCount": 0, + "approvalRate": 0, + "rollbackExecutionRate": 0, + "duplicateAppealCount": 0, + "duplicateAppealRate": 0, + "comparableRollbackCount": 0, + "comparableRollbackCandidateCount": 0, + "changedCount": 0, + "changedCandidateCount": 0, + "actualScoreChangeRate": 0, + "meanDelta": 0, + "meanAbsoluteDelta": 0, + "duplicateRollbackHistoryCount": 0, + "invalidScoreRollbackCount": 0, + "ruleVersionChangedRollbackCount": 0, + "reasonCounts": { + "property1": 0, + "property2": 0 + }, + "availability": "string", + "reason": "string", + "exposureAppealRateAvailability": "string", + "exposureAppealRateReason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|basis|string|false|none||none| +|from|string(date)|false|none||none| +|to|string(date)|false|none||none| +|capturedAt|string(date-time)|false|none||none| +|appealCount|integer|false|none||申诉事件数;与按独立候选人数统计的其他字段区分| +|sampleSize|integer|false|none||none| +|statusCounts|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|statusEventCounts|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|statusCandidateCounts|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|confidence|string|false|none||none| +|approvedEverCount|integer|false|none||none| +|approvalRate|number|false|none||none| +|rollbackExecutionRate|number|false|none||none| +|duplicateAppealCount|integer|false|none||none| +|duplicateAppealRate|number|false|none||none| +|comparableRollbackCount|integer|false|none||可比 ROLLBACK 历史行数;仅唯一历史且分数/规则版本合法的申诉| +|comparableRollbackCandidateCount|integer|false|none||可比回滚历史对应的独立候选人数;同一候选人的多份合法申诉只计一人| +|changedCount|integer|false|none||none| +|changedCandidateCount|integer|false|none||none| +|actualScoreChangeRate|number|false|none||none| +|meanDelta|number|false|none||none| +|meanAbsoluteDelta|number|false|none||none| +|duplicateRollbackHistoryCount|integer|false|none||none| +|invalidScoreRollbackCount|integer|false|none||none| +|ruleVersionChangedRollbackCount|integer|false|none||none| +|reasonCounts|object|false|none||none| +|» **additionalProperties**|integer|false|none||none| +|availability|string|false|none||none| +|reason|string|false|none||none| +|exposureAppealRateAvailability|string|false|none||none| +|exposureAppealRateReason|string|false|none||none| + +

ApiResponseFairnessResponseOverview

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "basis": "string", + "scope": "string", + "period": "string", + "capturedAt": "2019-08-24T14:15:22Z", + "populationSize": 0, + "computableSnapshotRatio": 0, + "confidence": "string", + "riskLevel": "string", + "versionCounts": { + "property1": 0, + "property2": 0 + }, + "mixedVersionCount": 0, + "unknownVersionCount": 0, + "distribution": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + }, + "distributionsByRulesVersion": { + "property1": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + }, + "property2": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": { + "property1": 0, + "property2": 0 + }, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + } + }, + "coherentVersionSubset": [ + "string" + ], + "availability": "string", + "reason": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[FairnessResponseOverview](#schemafairnessresponseoverview)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseFairnessResponseDimensions

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "basis": "string", + "scope": "string", + "period": "string", + "capturedAt": "2019-08-24T14:15:22Z", + "dimensions": [ + { + "dimension": "string", + "populationSize": 0, + "rowCount": 0, + "missingRowCount": 0, + "validSampleSize": 0, + "confidence": "string", + "missingRowRate": 0, + "nullScoreRate": 0, + "validCoverage": 0, + "statusCounts": { + "property1": 0, + "property2": 0 + }, + "versionCounts": { + "property1": 0, + "property2": 0 + }, + "inconsistentRecordCount": 0, + "unknownStatusCount": 0, + "outOfRangeScoreCount": 0, + "unknownRulesVersionCount": 0, + "distribution": { + "sampleSize": 0, + "mean": 0, + "median": 0, + "p10": 0, + "p25": 0, + "p75": 0, + "p90": 0, + "min": 0, + "max": 0, + "standardDeviation": 0, + "buckets": {}, + "concentrationRate": 0, + "riskLevel": "string", + "availability": "string", + "reason": "string" + }, + "distributionsByRulesVersion": { + "property1": { + "sampleSize": null, + "mean": null, + "median": null, + "p10": null, + "p25": null, + "p75": null, + "p90": null, + "min": null, + "max": null, + "standardDeviation": null, + "buckets": null, + "concentrationRate": null, + "riskLevel": null, + "availability": null, + "reason": null + }, + "property2": { + "sampleSize": null, + "mean": null, + "median": null, + "p10": null, + "p25": null, + "p75": null, + "p90": null, + "min": null, + "max": null, + "standardDeviation": null, + "buckets": null, + "concentrationRate": null, + "riskLevel": null, + "availability": null, + "reason": null + } + }, + "availability": "string", + "reason": "string" + } + ], + "availability": "string", + "reason": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[FairnessResponseDimensions](#schemafairnessresponsedimensions)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseFairnessResponseUnavailable

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "availability": "UNAVAILABLE", + "reason": "string", + "capturedAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[FairnessResponseUnavailable](#schemafairnessresponseunavailable)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseFairnessResponseAppeals

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "basis": "string", + "from": "2019-08-24", + "to": "2019-08-24", + "capturedAt": "2019-08-24T14:15:22Z", + "appealCount": 0, + "sampleSize": 0, + "statusCounts": { + "property1": 0, + "property2": 0 + }, + "statusEventCounts": { + "property1": 0, + "property2": 0 + }, + "statusCandidateCounts": { + "property1": 0, + "property2": 0 + }, + "confidence": "string", + "approvedEverCount": 0, + "approvalRate": 0, + "rollbackExecutionRate": 0, + "duplicateAppealCount": 0, + "duplicateAppealRate": 0, + "comparableRollbackCount": 0, + "comparableRollbackCandidateCount": 0, + "changedCount": 0, + "changedCandidateCount": 0, + "actualScoreChangeRate": 0, + "meanDelta": 0, + "meanAbsoluteDelta": 0, + "duplicateRollbackHistoryCount": 0, + "invalidScoreRollbackCount": 0, + "ruleVersionChangedRollbackCount": 0, + "reasonCounts": { + "property1": 0, + "property2": 0 + }, + "availability": "string", + "reason": "string", + "exposureAppealRateAvailability": "string", + "exposureAppealRateReason": "string" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[FairnessResponseAppeals](#schemafairnessresponseappeals)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

StudentProfileResponse

+ + + + + + +```json +{ + "id": 0, + "userId": 0, + "realName": "string", + "bio": "string", + "location": "string", + "education": "string", + "school": "string", + "graduationYear": 0, + "resumeUrl": "string", + "skills": "string", + "createdAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|userId|integer(int64)|false|none||none| +|realName|string|false|none||none| +|bio|string|false|none||none| +|location|string|false|none||none| +|education|string|false|none||none| +|school|string|false|none||none| +|graduationYear|integer(int32)|false|none||none| +|resumeUrl|string|false|none||none| +|skills|string|false|none||none| +|createdAt|string(date-time)|false|none||none| + +

CandidateScoringCoverage

+ + + + + + +```json +{ + "computableDimensions": 0, + "totalDimensions": 0, + "includedDimensions": [ + "string" + ], + "excludedDimensions": [ + { + "dimension": "string", + "status": "string", + "reason": "string" + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|computableDimensions|integer(int32)|false|none||none| +|totalDimensions|integer(int32)|false|none||none| +|includedDimensions|[string]|false|none||none| +|excludedDimensions|[[CandidateScoringExcludedDimension](#schemacandidatescoringexcludeddimension)]|false|none||none| + +

CreateDataExportRequest

+ + + + + + +```json +{ + "format": "string", + "idempotencyKey": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|format|string|false|none||none| +|idempotencyKey|string|false|none||none| + +

CandidateScoringExcludedDimension

+ + + + + + +```json +{ + "dimension": "string", + "status": "string", + "reason": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|dimension|string|false|none||none| +|status|string|false|none||none| +|reason|string|false|none||none| + +

CandidateScoringRuleContribution

+ + + + + + +```json +{ + "ruleCode": "string", + "outcome": "APPLIED", + "contribution": 0, + "maxContribution": 0, + "label": "string", + "observation": "string", + "explanation": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|ruleCode|string|false|none||none| +|outcome|string|false|none||none| +|contribution|number¦null|false|none||none| +|maxContribution|number¦null|false|none||none| +|label|string|false|none||none| +|observation|string|false|none||none| +|explanation|string|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|outcome|APPLIED| +|outcome|NOT_APPLIED| +|outcome|MISSING| +|outcome|EXPIRED| +|outcome|UNAVAILABLE| + +

ApiResponseStudentProfileResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "id": 0, + "userId": 0, + "realName": "string", + "bio": "string", + "location": "string", + "education": "string", + "school": "string", + "graduationYear": 0, + "resumeUrl": "string", + "skills": "string", + "createdAt": "2019-08-24T14:15:22Z" + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[StudentProfileResponse](#schemastudentprofileresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CandidateScoringValidity

+ + + + + + +```json +{ + "completedAt": "2019-08-24T14:15:22Z", + "validUntil": "2019-08-24T14:15:22Z", + "expired": true +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|completedAt|string(date-time)|false|none||none| +|validUntil|string(date-time)|false|none||none| +|expired|boolean|false|none||none| + +

ApiResponsePageResponseDataExportTaskResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "taskId": 0, + "status": "string", + "format": "string", + "requestedAt": "2019-08-24T14:15:22Z", + "startedAt": "2019-08-24T14:15:22Z", + "completedAt": "2019-08-24T14:15:22Z", + "expiresAt": "2019-08-24T14:15:22Z", + "sizeBytes": 0, + "downloadAvailable": true, + "errorCode": "string" + } + ], + "totalElements": 0, + "page": 0, + "size": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|object|false|none||none| +|» items|[[DataExportTaskResponse](#schemadataexporttaskresponse)]|false|none||none| +|» totalElements|integer(int64)|false|none||none| +|» page|integer(int32)|false|none||none| +|» size|integer(int32)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

MessageResponse

+ + + + + + +```json +{ + "id": 0, + "conversationId": 0, + "senderUserId": 0, + "senderScope": "string", + "content": "string", + "status": "SENT", + "recalledAt": "2019-08-24T14:15:22Z", + "createdAt": "2019-08-24T14:15:22Z", + "isRead": true +} + +``` + +脱敏消息响应;TALENT_INVITATION 使用 senderScope 而非 senderUserId + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|conversationId|integer(int64)|false|none||none| +|senderUserId|integer(int64)|false|none||none| +|senderScope|string|false|none||none| +|content|string|false|none||none| +|status|string|false|none||none| +|recalledAt|string(date-time)|false|none||none| +|createdAt|string(date-time)|false|none||none| +|isRead|boolean|false|none||none| + +#### 枚举值 + +|属性|值| +|---|---| +|status|SENT| +|status|RECALLED| + +

MessagePageResponse

+ + + + + + +```json +{ + "items": [ + { + "id": 0, + "conversationId": 0, + "senderUserId": 0, + "senderScope": "string", + "content": "string", + "status": "SENT", + "recalledAt": "2019-08-24T14:15:22Z", + "createdAt": "2019-08-24T14:15:22Z", + "isRead": true + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 +} + +``` + +脱敏消息分页响应 + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|items|[[MessageResponse](#schemamessageresponse)]|false|none||[脱敏消息响应;TALENT_INVITATION 使用 senderScope 而非 senderUserId]| +|total|integer(int64)|false|none||none| +|page|integer(int32)|false|none||none| +|size|integer(int32)|false|none||none| +|totalPages|integer(int32)|false|none||none| + +

ApiResponseMessagePageResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "items": [ + { + "id": 0, + "conversationId": 0, + "senderUserId": 0, + "senderScope": "string", + "content": "string", + "status": "SENT", + "recalledAt": "2019-08-24T14:15:22Z", + "createdAt": "2019-08-24T14:15:22Z", + "isRead": true + } + ], + "total": 0, + "page": 0, + "size": 0, + "totalPages": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[MessagePageResponse](#schemamessagepageresponse)|false|none||脱敏消息分页响应| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

ApiResponseMessageResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "id": 0, + "conversationId": 0, + "senderUserId": 0, + "senderScope": "string", + "content": "string", + "status": "SENT", + "recalledAt": "2019-08-24T14:15:22Z", + "createdAt": "2019-08-24T14:15:22Z", + "isRead": true + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[MessageResponse](#schemamessageresponse)|false|none||脱敏消息响应;TALENT_INVITATION 使用 senderScope 而非 senderUserId| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

RefreshTokenRequest

+ + + + + + +```json +{ + "refreshToken": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|refreshToken|string|true|none||none| + +

TokenPairResponse

+ + + + + + +```json +{ + "accessToken": "string", + "refreshToken": "string", + "expiresIn": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|accessToken|string|false|none||none| +|refreshToken|string|false|none||none| +|expiresIn|integer(int64)|false|none||none| + +

ApiResponseTokenPairResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "accessToken": "string", + "refreshToken": "string", + "expiresIn": 0 + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer|false|none||none| +|message|string|false|none||none| +|data|[TokenPairResponse](#schematokenpairresponse)|false|none||none| + +

PasswordSetRequest

+ + + + + + +```json +{ + "smsCode": "string", + "newPassword": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|smsCode|string|true|none||none| +|newPassword|string|true|none||none| + +

PasswordResetRequest

+ + + + + + +```json +{ + "phone": "string", + "smsCode": "string", + "newPassword": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|phone|string|true|none||none| +|smsCode|string|true|none||none| +|newPassword|string|true|none||none| + +

PasswordLoginRequest

+ + + + + + +```json +{ + "phone": "string", + "password": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|phone|string|true|none||none| +|password|string|true|none||none| + +

PasswordChangeRequest

+ + + + + + +```json +{ + "currentPassword": "string", + "newPassword": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|currentPassword|string|true|none||none| +|newPassword|string|true|none||none| + +

PasswordOperationResponse

+ + + + + + +```json +{ + "passwordConfigured": true, + "reauthenticationRequired": true +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|passwordConfigured|boolean|false|none||none| +|reauthenticationRequired|boolean|false|none||none| + +

ApiResponsePasswordOperationResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "passwordConfigured": true, + "reauthenticationRequired": true + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[PasswordOperationResponse](#schemapasswordoperationresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CompanyDetails

+ + + + + + +```json +{ + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "website": "string", + "address": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|name|string|true|none||none| +|logoUrl|string|false|none||none| +|description|string|false|none||none| +|industry|string|false|none||none| +|website|string|false|none||none| +|address|string|false|none||none| + +

CompanyRegistrationRequest

+ + + + + + +```json +{ + "phone": "string", + "code": "string", + "password": "stringstring", + "company": { + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "website": "string", + "address": "string" + } +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|phone|string|true|none||none| +|code|string|true|none||none| +|password|string|true|none||none| +|company|[CompanyDetails](#schemacompanydetails)|true|none||none| + +

ApiResponseCompanyRegistrationResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "userId": 0, + "companyId": 0, + "role": "string", + "onboardingStatus": "string", + "accessToken": "string", + "refreshToken": "string", + "expiresIn": 0 + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CompanyRegistrationResponse](#schemacompanyregistrationresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CompanyRegistrationResponse

+ + + + + + +```json +{ + "userId": 0, + "companyId": 0, + "role": "string", + "onboardingStatus": "string", + "accessToken": "string", + "refreshToken": "string", + "expiresIn": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|userId|integer(int64)|false|none||none| +|companyId|integer(int64)|false|none||none| +|role|string|false|none||none| +|onboardingStatus|string|false|none||none| +|accessToken|string|false|none||none| +|refreshToken|string|false|none||none| +|expiresIn|integer(int64)|false|none||none| + +

ApiResponseCompanyOnboardingResponse

+ + + + + + +```json +{ + "code": 0, + "message": "string", + "data": { + "company": { + "id": 0, + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "website": "string", + "address": "string", + "verified": true + }, + "onboardingStatus": "string", + "latestVerification": { + "id": 0, + "status": "string", + "submittedAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z" + }, + "missingFields": [ + "string" + ], + "allowedActions": [ + "string" + ] + }, + "requestId": "string", + "timestamp": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|code|integer(int32)|false|none||none| +|message|string|false|none||none| +|data|[CompanyOnboardingResponse](#schemacompanyonboardingresponse)|false|none||none| +|requestId|string|false|none||none| +|timestamp|string(date-time)|false|none||none| + +

CompanyOnboardingResponse

+ + + + + + +```json +{ + "company": { + "id": 0, + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "website": "string", + "address": "string", + "verified": true + }, + "onboardingStatus": "string", + "latestVerification": { + "id": 0, + "status": "string", + "submittedAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z" + }, + "missingFields": [ + "string" + ], + "allowedActions": [ + "string" + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|company|[CompanySummary](#schemacompanysummary)|false|none||none| +|onboardingStatus|string|false|none||none| +|latestVerification|[VerificationSummary](#schemaverificationsummary)|false|none||none| +|missingFields|[string]|false|none||none| +|allowedActions|[string]|false|none||none| + +

CompanySummary

+ + + + + + +```json +{ + "id": 0, + "name": "string", + "logoUrl": "string", + "description": "string", + "industry": "string", + "website": "string", + "address": "string", + "verified": true +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|name|string|false|none||none| +|logoUrl|string|false|none||none| +|description|string|false|none||none| +|industry|string|false|none||none| +|website|string|false|none||none| +|address|string|false|none||none| +|verified|boolean|false|none||none| + +

VerificationSummary

+ + + + + + +```json +{ + "id": 0, + "status": "string", + "submittedAt": "2019-08-24T14:15:22Z", + "decidedAt": "2019-08-24T14:15:22Z" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|integer(int64)|false|none||none| +|status|string|false|none||none| +|submittedAt|string(date-time)|false|none||none| +|decidedAt|string(date-time)|false|none||none| + diff --git a/scripts/map_apits.py b/scripts/map_apits.py new file mode 100644 index 0000000..54f8693 --- /dev/null +++ b/scripts/map_apits.py @@ -0,0 +1,59 @@ +import json, re + +# Load real OpenAPI paths +with open("scripts/openapi.json", encoding="utf-8") as f: + spec = json.load(f) +real_paths = set() +for p, methods in spec.get("paths", {}).items(): + for m in methods: + real_paths.add((m.upper(), p)) + +# Load api.ts +with open("src/api/api.ts", encoding="utf-8") as f: + lines = f.readlines() + +# Extract per-function guessed request path + 待确认 flag +func_re = re.compile(r"^\s*(?:export\s+)?(?:async\s+)?function\s+(\w+)\s*\(") +req_re = re.compile(r"request(?:<[^>]*>)?\(\s*['\"]([^'\"]+)['\"]") +dai_re = re.compile(r"【待确认】") + +cur = None +funcs = {} # name -> {path, dai, lineno} +for i, ln in enumerate(lines): + m = func_re.match(ln) + if m: + cur = m.group(1) + funcs[cur] = {"path": None, "dai": False, "lineno": i+1} + if cur: + rm = req_re.search(ln) + if rm and funcs[cur]["path"] is None: + funcs[cur]["path"] = rm.group(1) + if dai_re.search(ln): + funcs[cur]["dai"] = True + +# Real paths set for existence check (ignore method for domain check) +all_real_path_strings = set(p for _, p in real_paths) + +print("=== FUNCTIONS WITH 【待确认】 GUESSED PATH ===") +phantom = [] +exists = [] +no_real_branch = [] +for name, info in funcs.items(): + if not info["dai"]: + continue + path = info["path"] + if path is None: + no_real_branch.append(name) + print(f" [NO-REAL-BRANCH] {name} (line {info['lineno']})") + continue + if path in all_real_path_strings: + exists.append((name, path)) + print(f" [REAL?] {name:42} -> {path} (line {info['lineno']})") + else: + phantom.append((name, path)) + print(f" [PHANTOM] {name:42} -> {path} (line {info['lineno']})") + +print() +print(f"REAL-DOMAIN (path string exists somewhere): {len(exists)}") +print(f"PHANTOM (path NOT in OpenAPI at all): {len(phantom)}") +print(f"【待确认】 but NO request path found: {len(no_real_branch)}") diff --git a/scripts/scan_wrong.py b/scripts/scan_wrong.py new file mode 100644 index 0000000..f409493 --- /dev/null +++ b/scripts/scan_wrong.py @@ -0,0 +1,23 @@ +import re +with open("src/api/api.ts", encoding="utf-8") as f: + lines = f.readlines() + +func_re = re.compile(r"^\s*(?:export\s+)?(?:async\s+)?function\s+(\w+)\s*\((.*?)\)\s*:") +req_re = re.compile(r"request(?:<[^>]*>)?\(") + +targets = ["fetchConversations","fetchNotifications","fetchInterviews","fetchMatchResult", + "fetchResume","fetchFavorites","fetchJobProgress","fetchJobPreference","saveJobPreference", + "fetchCandidateDetail","fetchInterviewScore","fetchInterviewScoreDraft","fetchConversation", + "fetchRankData"] + +cur=None; sig=None +for i,ln in enumerate(lines): + m=func_re.match(ln) + if m: + cur=m.group(1); sig=m.group(2) + if cur in targets: + if req_re.search(ln): + print(f"--- {cur}({sig.strip()}) line {i+1}") + print(" ", ln.rstrip()) + # also catch request spanning: unlikely +print("\nDONE") diff --git a/src/types/application.ts b/src/types/application.ts new file mode 100644 index 0000000..6dec4ed --- /dev/null +++ b/src/types/application.ts @@ -0,0 +1,66 @@ +/** + * 投递(Application)相关类型定义 + * 后端 OpenAPI 文档中字段名为 generic object,以下字段基于端点语义推断, + * 待后端补全字段名后再收敛。 + */ + +/** 投递状态(后端 timeline 端点暗示的状态枚举) */ +export type ApplicationStatus = + | 'submitted' // 已投递 + | 'viewed' // 已查看 + | 'shortlisted' // 进入候选 + | 'interview' // 面试中 + | 'offer' // 已发 Offer + | 'accepted' // 已接受 Offer + | 'rejected' // 已拒绝 + | 'withdrawn'; // 已撤回 + +/** 投递列表项(/applications/me 返回的 items) */ +export interface ApplicationItem { + id: string; + jobId: string; + /** 岗位名称(前端 UI 展示需要) */ + positionName?: string; + /** 企业名称 */ + companyName?: string; + /** 企业 logo URL */ + companyLogo?: string; + /** 工作地点 */ + location?: string; + /** 薪资范围 */ + salaryText?: string; + /** 投递状态 */ + status: ApplicationStatus; + /** 投递时间(ISO 字符串) */ + createdAt?: string; + /** 最后更新时间 */ + updatedAt?: string; +} + +/** 投递详情(/applications/{id}) */ +export interface ApplicationDetail extends ApplicationItem { + /** 求职信 */ + coverLetter?: string; + /** 简历 ID */ + resumeId?: string; + /** 前端透传的额外字段 */ + [key: string]: unknown; +} + +/** 投递状态时间线节点 */ +export interface ApplicationTimelineEvent { + status: ApplicationStatus; + /** 时间(ISO 字符串) */ + time?: string; + /** 备注,如"HR 查看了你的简历" */ + note?: string; +} + +/** 分页结果(后端统一分页结构) */ +export interface PageResult { + items: T[]; + total: number; + size: number; + page: number; + totalPages: number; +}