{ "openapi": "3.1.0", "info": { "title": "职来 API", "version": "v1" }, "servers": [ { "url": "http://localhost", "description": "Generated server url" } ], "tags": [ { "name": "岗位收藏", "description": "学生收藏/取消收藏岗位,查看收藏列表" }, { "name": "API", "description": "API 信息入口" }, { "name": "评分运营看板", "description": "企业评分运营看板、评分排名与评分趋势" }, { "name": "认证", "description": "登录、验证码、用户信息" }, { "name": "通知", "description": "站内通知查询、已读管理" }, { "name": "双向匹配沟通", "description": "匹配成功后创建或获取直聊会话(幂等)" }, { "name": "企业认证", "description": "企业认证提交、审核管理" }, { "name": "求职者评分体系", "description": "8 维候选人生成评分、综合分、趋势与企业只读评分卡" }, { "name": "投递", "description": "学生投递、撤回、查询;企业查看和审核投递;时间线" }, { "name": "Offer", "description": "企业录用邀请:创建、发送、接受/拒绝/洽谈、到期失效、提醒与时间线" }, { "name": "岗位", "description": "岗位创建、管理、查询" }, { "name": "评价审核", "description": "评价审核与防刷:待审列表、审核决策、审核历史(仅 ADMIN)" }, { "name": "简历版本", "description": "学生简历版本管理、默认简历、导出任务" }, { "name": "双向匹配阈值", "description": "企业与求职者的匹配阈值配置" }, { "name": "消息", "description": "会话创建、消息发送、已读管理" }, { "name": "评分治理", "description": "求职者评分申诉、审核、回滚与审计" }, { "name": "候选人反馈", "description": "企业对已投递候选人的评价反馈" }, { "name": "求职者评分卡", "description": "求职者评价聚合与评分卡" }, { "name": "双向匹配", "description": "求职者意愿分、企业 HR 适配分、匹配状态" }, { "name": "系统", "description": "健康检查、应用信息" }, { "name": "个人资料", "description": "学生个人资料查询、更新与简历管理" }, { "name": "岗位匹配", "description": "学生查看岗位匹配诊断(确定性规则)" }, { "name": "面试", "description": "面试创建、查看、响应、取消、完成" }, { "name": "结构化面试评分", "description": "企业为已完成面试填写/提交结构化评分,学生查看已提交评分与历史" }, { "name": "求职偏好", "description": "学生求职偏好查询与保存" }, { "name": "岗位评价", "description": "学生对已发布岗位进行评价" }, { "name": "企业", "description": "企业资料创建、查询与更新" }, { "name": "入职清单", "description": "学生读取有效入职清单并更新本人完成状态;企业维护本企业自定义项" }, { "name": "公司知识介绍", "description": "企业维护知识内容,学生读取公司基础资料、知识与公开评价摘要" } ], "paths": {"/salary-calculator/cities":{"get":{"tags":["薪资计算器"],"summary":"查询启用城市列表","operationId":"listSalaryCities","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"成功","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseListSalaryCitySummaryResponse"}}}},"401":{"description":"未认证"},"403":{"description":"非 STUDENT"}}}},"/salary-calculator/cities/{cityCode}":{"get":{"tags":["薪资计算器"],"summary":"查询城市默认参数","operationId":"getSalaryCity","security":[{"bearerAuth":[]}],"parameters":[{"name":"cityCode","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"成功","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseSalaryCityDetailResponse"}}}},"401":{"description":"未认证"},"403":{"description":"非 STUDENT"},"404":{"description":"城市不存在或停用"}}}},"/salary-calculator/calculations":{"post":{"tags":["薪资计算器"],"summary":"计算并保存到手工资","operationId":"calculateSalary","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalaryCalculationRequest"}}}},"responses":{"200":{"description":"成功","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseSalaryCalculationResponse"}}}},"400":{"description":"参数非法"},"401":{"description":"未认证"},"403":{"description":"非 STUDENT"},"404":{"description":"城市不存在或停用"},"409":{"description":"幂等或政策版本冲突"}}},"get":{"tags":["薪资计算器"],"summary":"查询本人薪资历史","operationId":"listSalaryCalculations","security":[{"bearerAuth":[]}],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":0}},{"name":"size","in":"query","schema":{"type":"integer","default":20,"maximum":100}}],"responses":{"200":{"description":"成功","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponsePageResponseSalaryHistorySummaryResponse"}}}},"400":{"description":"分页参数非法"},"401":{"description":"未认证"},"403":{"description":"非 STUDENT"}}}},"/salary-calculator/calculations/{id}":{"get":{"tags":["薪资计算器"],"summary":"查询本人薪资历史详情","operationId":"getSalaryCalculation","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"成功","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseSalaryHistoryDetailResponse"}}}},"401":{"description":"未认证"},"403":{"description":"非 STUDENT"},"404":{"description":"历史不存在或无权访问"}}},"delete":{"tags":["薪资计算器"],"summary":"删除本人薪资历史","operationId":"deleteSalaryCalculation","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"成功","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseVoid"}}}},"401":{"description":"未认证"},"403":{"description":"非 STUDENT"},"404":{"description":"历史不存在或无权访问"}}}}, "/": { "get": { "tags": [ "API" ], "summary": "API 信息", "description": "返回 API v0.1 基本信息", "operationId": "index", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/admin/candidate-scoring/appeals": { "get": { "tags": [ "评分治理" ], "summary": "全部申诉列表", "description": "仅 ADMIN", "operationId": "listAllAppeals", "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/admin/candidate-scoring/appeals/{appealId}/decision": { "post": { "tags": [ "评分治理" ], "summary": "审核决定", "description": "仅 ADMIN;APPROVE/REJECT,REJECT 必须填 reason", "operationId": "decideAppeal", "parameters": [ { "name": "appealId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AppealDecisionRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseAppealResponse" } } } } } } }, "/admin/candidate-scoring/appeals/{appealId}/history": { "get": { "tags": [ "评分治理" ], "summary": "申诉历史", "description": "本人(脱敏,无 actorUserId)或 ADMIN(全量);此路径的本人放行先于 ADMIN 通用规则", "operationId": "getAppealHistory", "parameters": [ { "name": "appealId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListAppealHistoryItem" } } } } } } }, "/admin/candidate-scoring/appeals/{appealId}/rollback": { "post": { "tags": [ "评分治理" ], "summary": "执行回滚", "description": "仅 ADMIN;记录前态+确定性重算+新版本;年 3 次上限", "operationId": "rollbackAppeal", "parameters": [ { "name": "appealId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseAppealResponse" } } } } } } }, "/admin/candidate-scoring/snapshots/{candidateUserId}/{dimension}/{period}/history": { "get": { "tags": [ "评分治理" ], "summary": "快照变更审计", "description": "仅 ADMIN;按学生+维度+周期查看回滚前后完整变化", "operationId": "getSnapshotHistory", "parameters": [ { "name": "candidateUserId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "dimension", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "period", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListSnapshotHistoryItem" } } } } } } }, "/admin/companies/verifications": { "get": { "tags": [ "企业认证" ], "summary": "待审核认证列表", "description": "管理员查看认证申请列表,支持 status/from/to 筛选和分页", "operationId": "listVerifications", "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "from", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time" } }, { "name": "to", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/admin/companies/verifications/history": { "get": { "tags": [ "企业认证" ], "summary": "认证审核历史", "description": "管理员查看某个认证申请的审核历史", "operationId": "listHistory", "parameters": [ { "name": "verificationId", "in": "query", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListMapStringObject" } } } } } } }, "/admin/companies/verifications/{id}": { "get": { "tags": [ "企业认证" ], "summary": "认证详情", "description": "管理员查看认证申请详情", "operationId": "getDetail", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/admin/companies/verifications/{id}/decision": { "post": { "tags": [ "企业认证" ], "summary": "审核决定", "description": "管理员通过或拒绝认证申请,拒绝时必须填写原因", "operationId": "decide_1", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VerificationDecisionRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/admin/reviews/history": { "get": { "tags": [ "评价审核" ], "summary": "审核历史", "description": "仅 ADMIN;分页返回审核结果、审核人、时间与原因", "operationId": "history", "parameters": [ { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/admin/reviews/pending": { "get": { "tags": [ "评价审核" ], "summary": "待审评价列表", "description": "仅 ADMIN;分页 + jobId/riskLevel/createdFrom/createdTo 筛选;不返回明文 IP/UA", "operationId": "pending", "parameters": [ { "name": "jobId", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64" } }, { "name": "riskLevel", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "createdFrom", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time" } }, { "name": "createdTo", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/admin/reviews/{reviewId}/decision": { "post": { "tags": [ "评价审核" ], "summary": "评价审核决策", "description": "仅 ADMIN;仅 PENDING 可审,重复提交 409;决策写入历史与 audit_logs", "operationId": "decide", "parameters": [ { "name": "reviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReviewDecisionRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/admin/scoring/dashboard/overview": { "get": { "tags": [ "评分运营看板" ], "summary": "全局运营概览", "description": "仅 ADMIN", "operationId": "getAdminOverview", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseAdminDashboardOverviewResponse" } } } } } } }, "/applications": { "post": { "tags": [ "投递" ], "summary": "投递岗位", "description": "只能投递 PUBLISHED 状态的岗位,不可重复投递", "operationId": "apply", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApplicationCreateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/applications/me": { "get": { "tags": [ "投递" ], "summary": "我的投递列表", "description": "查看当前学生自己的投递记录,支持 status 筛选和分页", "operationId": "listMyApplications", "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/applications/{applicationId}/feedback": { "get": { "tags": [ "候选人反馈" ], "summary": "查询候选人反馈", "description": "该投递的企业或学生可查看", "operationId": "get_4", "parameters": [ { "name": "applicationId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidateFeedbackResponse" } } } } } }, "put": { "tags": [ "候选人反馈" ], "summary": "修改候选人反馈", "description": "仅岗位所属企业", "operationId": "update_4", "parameters": [ { "name": "applicationId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CandidateFeedbackRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidateFeedbackResponse" } } } } } }, "post": { "tags": [ "候选人反馈" ], "summary": "创建候选人反馈", "description": "仅岗位所属企业;同一投递只能反馈一次", "operationId": "create", "parameters": [ { "name": "applicationId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CandidateFeedbackRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidateFeedbackResponse" } } } } } }, "delete": { "tags": [ "候选人反馈" ], "summary": "删除候选人反馈", "description": "仅岗位所属企业", "operationId": "delete_2", "parameters": [ { "name": "applicationId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/applications/{applicationId}/interviews": { "get": { "tags": [ "面试" ], "summary": "查询投递的面试列表", "description": "学生本人或岗位所属企业可查看", "operationId": "listByApplication", "parameters": [ { "name": "applicationId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListMapStringObject" } } } } } }, "post": { "tags": [ "面试" ], "summary": "创建面试邀请", "description": "企业为投递记录创建面试邀请", "operationId": "create_4", "parameters": [ { "name": "applicationId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InterviewCreateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/applications/{id}": { "get": { "tags": [ "投递" ], "summary": "投递详情", "description": "查看自己的投递记录详情", "operationId": "getApplication", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/applications/{id}/candidate-interest-score": { "put": { "tags": [ "双向匹配" ], "summary": "提交求职者岗位意愿分", "description": "仅投递本人(STUDENT);0-100;MATCHED/CLOSED 后不可修改", "operationId": "submitCandidateInterestScore", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ScoreRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/applications/{id}/conversation": { "post": { "tags": [ "双向匹配沟通" ], "summary": "创建/获取匹配会话", "description": "仅 MATCHED 双方可调用;重复调用返回同一会话", "operationId": "createOrGetConversation", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/applications/{id}/hr-suitability-score": { "put": { "tags": [ "双向匹配" ], "summary": "提交企业 HR 适配分", "description": "仅岗位所属企业;0-100;MATCHED/CLOSED 后不可修改", "operationId": "submitHrSuitabilityScore", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ScoreRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/applications/{id}/match": { "get": { "tags": [ "双向匹配" ], "summary": "查询投递匹配状态", "description": "仅投递求职者或岗位所属企业;不暴露内部路径/事件 ID", "operationId": "getMatch", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/applications/{id}/status": { "patch": { "tags": [ "投递" ], "summary": "更新投递状态(企业)", "description": "SUBMITTED→VIEWED→INTERVIEW→REJECTED/HIRED", "operationId": "updateStatus_1", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApplicationStatusRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/applications/{id}/timeline": { "get": { "tags": [ "投递" ], "summary": "投递状态时间线", "description": "学生本人或岗位所属企业可查看状态变更历史", "operationId": "timeline_2", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListMapStringObject" } } } } } } }, "/applications/{id}/withdraw": { "post": { "tags": [ "投递" ], "summary": "撤回投递", "description": "仅 SUBMITTED/VIEWED 状态可撤回,撤回后不可逆", "operationId": "withdraw", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/auth/login": { "post": { "tags": [ "认证" ], "summary": "Mock 登录", "description": "使用手机号+验证码登录,返回 JWT token", "operationId": "mockLogin", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoginRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/auth/me": { "get": { "tags": [ "认证" ], "summary": "当前用户信息", "description": "需要 JWT 认证", "operationId": "me", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/auth/sms/send": { "post": { "tags": [ "认证" ], "summary": "发送短信验证码(Mock)", "description": "开发环境 Mock:验证码会打印到日志", "operationId": "sendSmsCode", "parameters": [ { "name": "phone", "in": "query", "required": true, "schema": { "type": "string", "minLength": 1, "pattern": "[0-9]{11}" } }, { "name": "purpose", "in": "query", "required": false, "schema": { "type": "string", "default": "login" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringString" } } } } } } }, "/companies/me": { "get": { "tags": [ "企业" ], "summary": "查询当前企业资料", "description": "返回当前登录用户绑定的企业资料,未绑定企业返回 404", "operationId": "getMyCompany", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "put": { "tags": [ "企业" ], "summary": "更新企业资料", "description": "仅更新传入的非 null 字段;未绑定企业时返回 404", "operationId": "updateMyCompany", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompanyUpdateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "post": { "tags": [ "企业" ], "summary": "创建企业资料", "description": "仅 COMPANY 角色可调用;已存在时返回 409", "operationId": "createMyCompany", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompanyCreateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/companies/me/match-rule": { "get": { "tags": [ "双向匹配阈值" ], "summary": "查询企业匹配阈值", "description": "未配置返回默认 60", "operationId": "getCompanyRule", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "put": { "tags": [ "双向匹配阈值" ], "summary": "更新企业匹配阈值", "description": "requiredCandidateScore 0-100;首次更新创建配置", "operationId": "updateCompanyRule", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompanyMatchRuleRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/companies/me/verification": { "get": { "tags": [ "企业认证" ], "summary": "查询企业认证状态", "description": "企业查询自己的认证状态和历史", "operationId": "getMyVerification", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "post": { "tags": [ "企业认证" ], "summary": "提交企业认证", "description": "企业提交认证材料(营业执照等),只能提交自己的认证", "operationId": "submit", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VerificationSubmitRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/companies/{companyId}": { "get": { "tags": [ "企业" ], "summary": "查询企业公开详情", "description": "匿名可访问,仅返回 6 个公开字段", "operationId": "getPublicCompany", "parameters": [ { "name": "companyId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCompanyPublicView" } } } } } } }, "/companies/{companyId}/jobs": { "get": { "tags": [ "企业" ], "summary": "查询企业公开岗位列表", "description": "匿名可访问,仅返回 PUBLISHED 岗位", "operationId": "getCompanyJobs", "parameters": [ { "name": "companyId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } }, { "name": "sort", "in": "query", "required": false, "schema": { "type": "string", "default": "latest" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/company/applications": { "get": { "tags": [ "投递" ], "summary": "查看岗位投递列表(企业)", "description": "企业查看自己发布的某个岗位收到的投递,支持 status 筛选和分页", "operationId": "listCompanyApplications", "parameters": [ { "name": "jobId", "in": "query", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/company/candidates": { "get": { "tags": [ "投递" ], "summary": "企业候选人列表", "description": "跨岗位查询本企业所有候选人投递,支持按岗位、状态、关键词筛选,支持分页和排序", "operationId": "listCompanyCandidates", "parameters": [ { "name": "jobId", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64" } }, { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "keyword", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "sort", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "order", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidateListResponse" } } } } } } }, "/company/candidates/{applicationId}": { "get": { "tags": [ "投递" ], "summary": "企业候选人详情", "description": "查看投递详情及候选人公开资料,只能查看本企业岗位下的投递", "operationId": "getCompanyCandidateDetail", "parameters": [ { "name": "applicationId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidateDetailView" } } } } } } }, "/company/candidates/{applicationId}/scoring": { "get": { "tags": [ "求职者评分体系" ], "summary": "企业候选人评分卡", "description": "仅岗位所属企业;只读,仅返回 applicationId/overallScore/status/dimensions/generatedAt/rulesVersion,不泄露候选人敏感信息", "operationId": "getCompanyScoring", "parameters": [ { "name": "applicationId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCompanyCandidateScoringResponse" } } } } } } }, "/company/scoring/dashboard/candidate-rankings": { "get": { "tags": [ "评分运营看板" ], "summary": "候选人评分排名", "description": "仅 COMPANY;按学生去重;overallScore DESC, applicationId DESC", "operationId": "getCandidateRankings", "parameters": [ { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidateRankingListResponse" } } } } } } }, "/company/scoring/dashboard/candidate-rankings/{applicationId}": { "get": { "tags": [ "评分运营看板" ], "summary": "单候选人评分排名明细", "description": "仅 COMPANY;跨企业 403/8004", "operationId": "getCandidateRanking", "parameters": [ { "name": "applicationId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidateRankingDetailResponse" } } } } } } }, "/company/scoring/dashboard/job-rankings": { "get": { "tags": [ "评分运营看板" ], "summary": "岗位评分排名", "description": "仅 COMPANY;avgRating DESC, jobId DESC;审核通过评价", "operationId": "getJobRankings", "parameters": [ { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseJobRankingListResponse" } } } } } } }, "/company/scoring/dashboard/job-rankings/{jobId}": { "get": { "tags": [ "评分运营看板" ], "summary": "单岗位评分排名", "description": "仅 COMPANY;跨企业 403/8004", "operationId": "getJobRanking", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseJobRankingItem" } } } } } } }, "/company/scoring/dashboard/overview": { "get": { "tags": [ "评分运营看板" ], "summary": "企业评分运营概览", "description": "仅 COMPANY;只返回本企业数据", "operationId": "getOverview_1", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseDashboardOverviewResponse" } } } } } } }, "/company/scoring/dashboard/trend": { "get": { "tags": [ "评分运营看板" ], "summary": "企业评分趋势", "description": "仅 COMPANY;months 1–24", "operationId": "getTrend_2", "parameters": [ { "name": "months", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 6 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseScoreTrendResponse" } } } } } } }, "/conversations": { "get": { "tags": [ "消息" ], "summary": "会话列表", "description": "当前用户参与的所有会话", "operationId": "listConversations", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListMapStringObject" } } } } } }, "post": { "tags": [ "消息" ], "summary": "创建/获取会话", "description": "创建或返回与另一用户的 DIRECT 会话", "operationId": "createConversation", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateConversationRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/conversations/messages": { "post": { "tags": [ "消息" ], "summary": "发送消息", "description": "在会话中发送消息,仅成员可发送", "operationId": "sendMessage", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SendMessageRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/conversations/{id}": { "get": { "tags": [ "消息" ], "summary": "会话详情", "description": "查看会话信息和未读数", "operationId": "getConversation", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/conversations/{id}/messages": { "get": { "tags": [ "消息" ], "summary": "消息列表", "description": "分页查询会话消息,倒序;仅成员可查看", "operationId": "listMessages", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/conversations/{id}/read": { "post": { "tags": [ "消息" ], "summary": "标记已读", "description": "将当前会话所有消息标记为已读", "operationId": "markRead_1", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/health": { "get": { "tags": [ "系统" ], "summary": "应用健康检查", "description": "返回应用及依赖服务状态", "operationId": "health", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/health/details": { "get": { "tags": [ "health-controller" ], "operationId": "healthDetails", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/info": { "get": { "tags": [ "系统" ], "summary": "应用信息", "description": "返回应用版本、运行时信息", "operationId": "info", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/interviews/me": { "get": { "tags": [ "面试" ], "summary": "我的面试列表", "description": "查看当前用户相关的面试,支持 status/from/to 筛选和分页", "operationId": "listMyInterviews", "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "from", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time" } }, { "name": "to", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/interviews/{interviewId}": { "get": { "tags": [ "面试" ], "summary": "面试详情", "description": "学生本人或企业可查看面试详情", "operationId": "get_3", "parameters": [ { "name": "interviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "put": { "tags": [ "面试" ], "summary": "修改面试", "description": "企业修改面试时间、地点等信息,仅 SCHEDULED/CONFIRMED 状态可修改", "operationId": "update_3", "parameters": [ { "name": "interviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InterviewUpdateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/interviews/{interviewId}/cancel": { "post": { "tags": [ "面试" ], "summary": "取消面试", "description": "企业取消已安排的面试", "operationId": "cancel", "parameters": [ { "name": "interviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InterviewCancelRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/interviews/{interviewId}/complete": { "post": { "tags": [ "面试" ], "summary": "完成面试", "description": "企业在面试时间结束后将面试标记为完成", "operationId": "complete", "parameters": [ { "name": "interviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/interviews/{interviewId}/respond": { "post": { "tags": [ "面试" ], "summary": "响应面试邀请", "description": "学生接受、拒绝或申请改期", "operationId": "respond", "parameters": [ { "name": "interviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InterviewRespondRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/interviews/{interviewId}/timeline": { "get": { "tags": [ "面试" ], "summary": "面试状态时间线", "description": "查看面试状态变更历史", "operationId": "timeline_1", "parameters": [ { "name": "interviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListMapStringObject" } } } } } } }, "/jobs": { "get": { "tags": [ "岗位" ], "summary": "查询已发布岗位列表", "description": "仅返回 PUBLISHED 岗位,支持关键词、城市、用工类型、薪资筛选和分页", "operationId": "listJobs", "parameters": [ { "name": "keyword", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "city", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "employmentType", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "salaryMin", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32" } }, { "name": "salaryMax", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "post": { "tags": [ "岗位" ], "summary": "创建岗位", "description": "仅企业账号可调用,新岗位默认 DRAFT 状态", "operationId": "createJob", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobCreateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/jobs/compare": { "get": { "tags": [ "岗位评价" ], "summary": "岗位对比", "description": "公开访问;ids 为 2-3 个公开岗位;返回公开岗位字段与公开评分", "operationId": "compare_1", "parameters": [ { "name": "ids", "in": "query", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListMapStringObject" } } } } } } }, "/jobs/favorites": { "get": { "tags": [ "岗位收藏" ], "summary": "我的收藏列表", "description": "仅 STUDENT;分页,按收藏时间倒序", "operationId": "listFavorites", "parameters": [ { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/jobs/filters": { "get": { "tags": [ "岗位" ], "summary": "岗位筛选选项", "description": "返回当前 PUBLISHED 岗位可用的城市、用工类型和薪资范围", "operationId": "getFilters", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/jobs/public/{jobId}": { "get": { "tags": [ "岗位" ], "summary": "查询岗位详情(公开)", "description": "仅返回 PUBLISHED 岗位详情;CLOSED 也可查看详情", "operationId": "getPublicJob", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/jobs/search": { "get": { "tags": [ "岗位" ], "summary": "岗位高级搜索", "description": "仅返回 PUBLISHED 岗位,支持关键词、城市、用工类型、薪资、公司筛选、排序和分页", "operationId": "searchJobs", "parameters": [ { "name": "keyword", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "city", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "employmentType", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "salaryMin", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32" } }, { "name": "salaryMax", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32" } }, { "name": "companyId", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64" } }, { "name": "sort", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/jobs/{jobId}": { "get": { "tags": [ "岗位" ], "summary": "查询岗位详情", "description": "企业可查看自己管理的岗位详情", "operationId": "getJob", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "put": { "tags": [ "岗位" ], "summary": "更新岗位", "description": "仅岗位所属企业可修改", "operationId": "updateJob", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobUpdateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/jobs/{jobId}/favorite": { "post": { "tags": [ "岗位收藏" ], "summary": "收藏岗位", "description": "仅 STUDENT;仅 PUBLISHED;幂等", "operationId": "favorite", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "delete": { "tags": [ "岗位收藏" ], "summary": "取消收藏", "description": "仅 STUDENT;幂等,未收藏也返回 200", "operationId": "unfavorite", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/jobs/{jobId}/match": { "get": { "tags": [ "岗位匹配" ], "summary": "岗位匹配诊断", "description": "仅 STUDENT;返回匹配分、硬性条件、缺口和说明", "operationId": "diagnose", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/jobs/{jobId}/personalized-review-score": { "get": { "tags": [ "student-review-weight-controller" ], "operationId": "getPersonalizedScore", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponsePersonalizedScoreResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 STUDENT 角色", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/jobs/{jobId}/competition-ranking": { "get": { "tags": [ "同岗位竞争力排名" ], "summary": "同岗位竞争力排名", "description": "仅 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 投递。", "operationId": "getCompetitionRanking", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "400": { "description": "jobId 为空或 <=0", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 STUDENT 角色或学生未投递该岗位", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "404": { "description": "岗位不存在或岗位状态非 PUBLISHED", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } }, "security": [ { "bearerAuth": [] } ] } }, "/jobs/{jobId}/reviews": { "get": { "tags": [ "岗位评价" ], "summary": "查询岗位评价列表", "description": "公开访问;仅返回 PUBLISHED 评价,分页;每条含八维评分", "operationId": "list_2", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "post": { "tags": [ "岗位评价" ], "summary": "创建岗位评价", "description": "仅 STUDENT;同一学生对同一岗位只能评价一次", "operationId": "create_3", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobReviewCreateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/jobs/{jobId}/reviews/summary": { "get": { "tags": [ "岗位评价" ], "summary": "评分汇总", "description": "公开访问;统计 PUBLISHED 评价的平均分、分布和热门标签", "operationId": "summary", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/jobs/{jobId}/reviews/{reviewId}": { "get": { "tags": [ "岗位评价" ], "summary": "岗位评价详情", "description": "公开访问;返回单条 PUBLISHED 评价与八维评分", "operationId": "get_2", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "reviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "put": { "tags": [ "岗位评价" ], "summary": "修改评价", "description": "仅评价本人可以修改", "operationId": "update_2", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "reviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobReviewUpdateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "delete": { "tags": [ "岗位评价" ], "summary": "删除评价", "description": "仅评价本人可以删除", "operationId": "delete_1", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "reviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/jobs/{jobId}/status": { "patch": { "tags": [ "岗位" ], "summary": "发布/关闭岗位", "description": "DRAFT→PUBLISHED,PUBLISHED→CLOSED;禁止非法回退", "operationId": "updateStatus", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobStatusRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/notifications": { "get": { "tags": [ "通知" ], "summary": "通知列表", "description": "当前用户的通知,分页,按时间倒序", "operationId": "list_3", "parameters": [ { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/notifications/read-all": { "post": { "tags": [ "通知" ], "summary": "全部已读", "description": "标记当前用户全部通知已读(幂等)", "operationId": "markAllRead", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/notifications/unread-count": { "get": { "tags": [ "通知" ], "summary": "未读数", "description": "当前用户未读通知数", "operationId": "unreadCount", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/notifications/{id}/read": { "post": { "tags": [ "通知" ], "summary": "标记已读", "description": "标记单条通知已读(幂等)", "operationId": "markRead", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/offers": { "get": { "tags": [ "Offer" ], "summary": "Offer 列表", "description": "候选人查看收到的、企业查看发出的 Offer;支持 status、applicationId 筛选与分页", "operationId": "list_1", "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "applicationId", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "post": { "tags": [ "Offer" ], "summary": "创建 Offer", "description": "仅企业账号;投递存在、岗位属于本企业、投递状态可发、无有效 Offer;默认 DRAFT", "operationId": "create_2", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OfferCreateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/offers/compare": { "get": { "tags": [ "Offer" ], "summary": "Offer 比较", "description": "仅候选人本人;比较 2-5 个非 DRAFT 的 Offer", "operationId": "compare", "parameters": [ { "name": "ids", "in": "query", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListMapStringObject" } } } } } } }, "/offers/statistics": { "get": { "tags": [ "Offer" ], "summary": "Offer 统计", "description": "仅企业;统计本企业 Offer 状态分布、接受率、平均响应时间", "operationId": "statistics", "parameters": [ { "name": "months", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 6 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/offers/{id}": { "get": { "tags": [ "Offer" ], "summary": "Offer 详情", "description": "仅目标候选人、所属企业可访问;其他账号返回无权限错误", "operationId": "get_1", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "put": { "tags": [ "Offer" ], "summary": "修改 Offer", "description": "仅所属企业、仅 DRAFT 状态可修改;其余状态返回业务错误", "operationId": "update_1", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OfferUpdateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/offers/{id}/counter-offers": { "get": { "tags": [ "Offer" ], "summary": "还价列表", "description": "候选人查看本人 Offer 的还价、企业查看本企业 Offer 的还价", "operationId": "listCounterOffers", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListMapStringObject" } } } } } }, "post": { "tags": [ "Offer" ], "summary": "发起还价", "description": "仅候选人本人;仅 SENT/NEGOTIATING 可发起;SENT 时自动进入 NEGOTIATING", "operationId": "createCounterOffer", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CounterOfferCreateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/offers/{id}/counter-offers/{coId}/accept": { "patch": { "tags": [ "Offer" ], "summary": "接受还价", "description": "仅所属企业;接受后更新 Offer 薪资/入职日期并变为 ACCEPTED", "operationId": "acceptCounterOffer", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "coId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/offers/{id}/counter-offers/{coId}/reject": { "patch": { "tags": [ "Offer" ], "summary": "拒绝还价", "description": "仅所属企业;拒绝后 Offer 保持 NEGOTIATING", "operationId": "rejectCounterOffer", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "coId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/offers/{id}/remind": { "post": { "tags": [ "Offer" ], "summary": "手动提醒", "description": "仅所属企业;仅 SENT/NEGOTIATING 可提醒;相同提醒不重复创建", "operationId": "remind", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/offers/{id}/status": { "patch": { "tags": [ "Offer" ], "summary": "Offer 状态变更", "description": "DRAFT→SENT 企业;SENT/NEGOTIATING→ACCEPTED/REJECTED/NEGOTIATING 候选人;重复提交幂等", "operationId": "changeStatus", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OfferStatusRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/offers/{id}/timeline": { "get": { "tags": [ "Offer" ], "summary": "Offer 状态时间线", "description": "完整状态变更历史,含操作者、原因与请求 ID", "operationId": "timeline", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListMapStringObject" } } } } } } }, "/profile/me": { "get": { "tags": [ "个人资料" ], "summary": "查询当前学生资料", "description": "查询当前登录学生(仅 STUDENT 角色)自己的学生资料。身份仅从 JWT/SecurityContext 获取,不接受 userId、studentUserId 等请求参数;本接口无 Path、Query、Body 参数。若尚未创建个人资料:HTTP 200,data 为空对象 {}(非 null),且不会自动创建数据库记录。当前未设置接口级限流。", "operationId": "getMyProfile", "responses": { "200": { "description": "成功;有资料返回资料对象,无资料返回空对象 {};message=ok", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponseStudentProfileResponse" }, "examples": { "success-with-data": { "summary": "有资料", "description": "success-with-data", "value": { "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" } } } } } }, "401": { "description": "未登录、Token 缺失/非法/过期;运行时实际返回 code=401、message=not authenticated", "content": { "application/json": { "examples": { "unauthorized": { "description": "unauthorized", "value": { "code": 401, "message": "not authenticated", "timestamp": "2026-08-24T10:00:00Z" } } } } } }, "403": { "description": "已登录但不是 STUDENT 角色(COMPANY/ADMIN);code=2002、message=forbidden", "content": { "application/json": { "examples": { "forbidden": { "description": "forbidden", "value": { "code": 2002, "message": "forbidden", "data": null, "timestamp": "2026-08-24T10:00:00Z" } } } } } } }, "security": [ { "bearerAuth": [] } ] }, "put": { "tags": [ "个人资料" ], "summary": "更新学生资料", "description": "仅更新传入的非 null 字段;不存在则自动创建", "operationId": "updateMyProfile", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StudentProfileUpdateRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/profile/me/candidate-percentile": { "get": { "tags": [ "求职者评分卡" ], "summary": "查询百分位", "description": "仅 STUDENT;返回自己在候选人中的评分百分位", "operationId": "getPercentile", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidatePercentileResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 STUDENT 角色", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/profile/me/candidate-score-card": { "get": { "tags": [ "求职者评分卡" ], "summary": "查询求职者评分卡", "description": "仅 STUDENT;返回自己的评价聚合卡", "operationId": "getScoreCard", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidateScoreCardResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 STUDENT 角色", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/profile/me/candidate-score-trend": { "get": { "tags": [ "求职者评分卡" ], "summary": "查询评分趋势", "description": "仅 STUDENT;返回最近月份的反馈趋势", "operationId": "getTrend_1", "parameters": [ { "name": "months", "in": "query", "description": "统计月数,默认 6,范围 1-24", "required": false, "schema": { "type": "integer", "format": "int32", "default": 6 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidateScoreTrendResponse" } } } }, "400": { "description": "参数不合法", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidateScoreTrendResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 STUDENT 角色", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/profile/me/candidate-scoring": { "get": { "tags": [ "求职者评分体系" ], "summary": "综合评分卡", "description": "仅 STUDENT;返回本人 8 维评分、综合分、权重与状态", "operationId": "getOverview", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidateScoringOverviewResponse" } } } } } } }, "/profile/me/candidate-scoring/appeals": { "get": { "tags": [ "评分治理" ], "summary": "我的申诉列表", "description": "仅 STUDENT 本人", "operationId": "listMyAppeals", "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "post": { "tags": [ "评分治理" ], "summary": "提交评分申诉", "description": "仅 STUDENT 本人;同一学生+维度+周期 PENDING/APPROVED 唯一", "operationId": "createAppeal", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAppealRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseAppealResponse" } } } } } } }, "/profile/me/candidate-scoring/appeals/{appealId}": { "get": { "tags": [ "评分治理" ], "summary": "申诉详情", "description": "本人或 ADMIN", "operationId": "getAppeal", "parameters": [ { "name": "appealId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseAppealResponse" } } } } } } }, "/profile/me/candidate-scoring/appeals/{appealId}/cancel": { "post": { "tags": [ "评分治理" ], "summary": "撤销申诉", "description": "仅本人;仅 PENDING 可撤销", "operationId": "cancelAppeal", "parameters": [ { "name": "appealId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseAppealResponse" } } } } } } }, "/profile/me/candidate-scoring/dimensions/{dimension}": { "get": { "tags": [ "求职者评分体系" ], "summary": "单维度明细", "description": "仅 STUDENT;返回某维度分项、归因与数据源;非法 dimension 返回 400", "operationId": "getDimensionDetail", "parameters": [ { "name": "dimension", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseDimensionScoreDetailResponse" } } } } } } }, "/profile/me/candidate-scoring/trend": { "get": { "tags": [ "求职者评分体系" ], "summary": "评分趋势", "description": "仅 STUDENT;基于快照按月返回综合分与维度分(months 1-24)", "operationId": "getTrend", "parameters": [ { "name": "months", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 6 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCandidateScoringTrendResponse" } } } } } } }, "/profile/me/career-progress": { "get": { "tags": [ "求职进度" ], "summary": "统一求职进度聚合", "description": "只读学生端接口:汇总当前学生的投递分页、岗位摘要、下一场面试、最近已提交结构化面试评分、可展示 Offer、同岗位竞争力排名,以及待办/通知计数(仅计数,不含通知标题/正文/详情)。仅 STUDENT 可访问,身份仅从 JWT/SecurityContext 获取,不接受 userId/studentUserId/candidateId 参数;COMPANY/ADMIN 返回 403/2002,未登录返回 401,参数非法返回 400/1001。通知详情仍由既有 /notifications 提供。", "operationId": "getCareerProgress", "parameters": [ { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } }, { "name": "status", "in": "query", "required": false, "schema": { "type": "string", "enum": ["SUBMITTED", "VIEWED", "INTERVIEW", "HIRED", "REJECTED", "WITHDRAWN"] } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCareerProgressResponse" } } } }, "400": { "description": "page/size/status 参数非法", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 STUDENT 角色", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } }, "security": [ { "bearerAuth": [] } ] } }, "/profile/me/deletion": { "get": { "tags": [ "account-deletion-controller" ], "operationId": "getStatus", "parameters": [], "responses": { "200": { "description": "success", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseAccountDeletionResponse" } } } }, "401": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } }, "post": { "tags": [ "account-deletion-controller" ], "operationId": "initiate", "parameters": [], "responses": { "200": { "description": "success", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseAccountDeletionResponse" } } } }, "401": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "409": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/profile/me/deletion/cancel": { "post": { "tags": [ "account-deletion-controller" ], "operationId": "cancel", "parameters": [], "responses": { "200": { "description": "success", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseAccountDeletionResponse" } } } }, "401": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "409": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/profile/me/data-export-tasks": { "get": { "tags": [ "personal-data-export-controller" ], "summary": "查询个人数据导出任务列表", "description": "仅本人;按创建时间倒序分页;status 可选:PENDING/PROCESSING/COMPLETED/FAILED/EXPIRED/CANCELLED", "operationId": "listDataExportTasks", "parameters": [ { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "default": 20 } }, { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "success", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponsePageResponseDataExportTaskResponse" } } } }, "401": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "409": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } }, "post": { "tags": [ "personal-data-export-controller" ], "summary": "创建个人数据导出任务", "description": "异步生成 ZIP;同 idempotencyKey 重放返回原任务;注销 PENDING/COMPLETED 禁止创建", "operationId": "createDataExportTask", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateDataExportRequest" } } }, "required": false }, "responses": { "200": { "description": "success", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseDataExportTaskResponse" } } } }, "401": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "409": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/profile/me/data-export-tasks/{taskId}": { "get": { "tags": [ "personal-data-export-controller" ], "summary": "查询个人数据导出任务详情", "description": "仅本人;不暴露 storageKey 与内部字段", "operationId": "getDataExportTask", "parameters": [ { "name": "taskId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "success", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseDataExportTaskResponse" } } } }, "401": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "404": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/profile/me/data-export-tasks/{taskId}/download": { "get": { "tags": [ "personal-data-export-controller" ], "summary": "下载个人数据导出 ZIP", "description": "仅本人且 COMPLETED 未过期;attachment;需 JWT", "operationId": "downloadDataExportTask", "parameters": [ { "name": "taskId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "success", "content": { "application/zip": { "schema": { "type": "string", "format": "binary" } } } }, "401": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "409": { "description": "error", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/profile/me/match-rule": { "get": { "tags": [ "双向匹配阈值" ], "summary": "查询学生匹配阈值", "description": "未配置返回默认 60", "operationId": "getStudentRule", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "put": { "tags": [ "双向匹配阈值" ], "summary": "更新学生匹配阈值", "description": "requiredHrScore 0-100;首次更新创建配置", "operationId": "updateStudentRule", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StudentMatchRuleRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/profile/me/preferences": { "get": { "tags": [ "求职偏好" ], "summary": "查询求职偏好", "description": "仅 STUDENT;无记录时返回空偏好对象", "operationId": "getPreferences", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "put": { "tags": [ "求职偏好" ], "summary": "保存求职偏好", "description": "仅 STUDENT;upsert,完全替换传入字段", "operationId": "savePreferences", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StudentPreferenceRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/profile/me/privacy": { "get": { "tags": [ "privacy-settings-controller" ], "operationId": "getMyPrivacySettings", "parameters": [], "responses": { "200": { "description": "成功;无记录时返回默认对象(PRIVATE/contactVisible=false/version=0)", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponsePrivacySettingsResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 STUDENT 角色", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } }, "put": { "tags": [ "privacy-settings-controller" ], "operationId": "updateMyPrivacySettings", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PrivacySettingsUpdateRequest" } } }, "required": true }, "responses": { "200": { "description": "成功;返回更新后的隐私设置对象", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponsePrivacySettingsResponse" } } } }, "400": { "description": "请求体校验失败(缺少必填字段或非法枚举)", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 STUDENT 角色", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "409": { "description": "乐观锁版本冲突(9201)", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/profile/me/resume": { "get": { "tags": [ "个人资料" ], "summary": "下载简历", "description": "下载当前学生上传的简历文件,仅 STUDENT 角色", "operationId": "downloadResume", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "type": "string", "format": "byte" } } } } } }, "post": { "tags": [ "个人资料" ], "summary": "上传简历", "description": "仅 STUDENT 角色;PDF/DOC/DOCX,≤10MB;上传新简历时替换旧文件", "operationId": "uploadResume", "requestBody": { "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "file": { "type": "string", "format": "binary" } }, "required": [ "file" ] } } } }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "delete": { "tags": [ "个人资料" ], "summary": "删除简历", "description": "删除当前学生的简历文件并清空 resumeUrl,仅 STUDENT 角色", "operationId": "deleteResume", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/profile/me/resume-versions": { "get": { "tags": [ "简历版本" ], "summary": "简历版本列表", "description": "本人 ACTIVE 版本,version_no 倒序", "operationId": "list", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListMapStringObject" } } } } } }, "post": { "tags": [ "简历版本" ], "summary": "创建简历版本", "description": "仅本人(STUDENT);PDF/DOC/DOCX ≤10MB;可附版本名", "operationId": "create_1", "parameters": [ { "name": "name", "in": "query", "required": false, "schema": { "type": "string" } } ], "requestBody": { "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "file": { "type": "string", "format": "binary" } }, "required": [ "file" ] } } } }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/profile/me/resume-versions/{id}": { "get": { "tags": [ "简历版本" ], "summary": "简历版本详情", "description": "仅本人可查看;他人 403,不存在 404", "operationId": "get", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "put": { "tags": [ "简历版本" ], "summary": "修改简历版本", "description": "本人;可选重命名 + 可选替换文件(替换时删除旧文件)", "operationId": "update", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "name", "in": "query", "required": false, "schema": { "type": "string" } } ], "requestBody": { "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "file": { "type": "string", "format": "binary" } } } } } }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } }, "delete": { "tags": [ "简历版本" ], "summary": "删除简历版本", "description": "默认版本需先设其他默认;导出进行中不可删;删除文件并移除记录", "operationId": "delete", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/profile/me/resume-versions/{id}/default": { "post": { "tags": [ "简历版本" ], "summary": "设为默认简历", "description": "同用户最多一个默认;已默认幂等;并发冲突 409", "operationId": "setDefault", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/profile/me/resume-versions/{id}/export": { "post": { "tags": [ "简历版本" ], "summary": "创建简历导出任务", "description": "异步复制该版本文件到导出目录;返回任务状态", "operationId": "createExportTask", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/profile/me/review-weights": { "get": { "tags": [ "student-review-weight-controller" ], "operationId": "getMyWeights", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseReviewWeightResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 STUDENT 角色", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } }, "put": { "tags": [ "student-review-weight-controller" ], "operationId": "saveWeights", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SaveWeightRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseReviewWeightResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 STUDENT 角色", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/resume-export-tasks/{taskId}": { "get": { "tags": [ "简历版本" ], "summary": "导出任务状态", "description": "仅本人可查询;SUCCESS 含输出文件,FAILED 含失败原因", "operationId": "getExportTask", "parameters": [ { "name": "taskId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseMapStringObject" } } } } } } }, "/resume-export-tasks/{taskId}/download": { "get": { "tags": [ "简历版本" ], "summary": "下载导出产物", "description": "仅本人且任务 SUCCESS 可下载;attachment;不暴露内部路径", "operationId": "downloadExportTask", "parameters": [ { "name": "taskId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "type": "string", "format": "byte" } } } } } } }, "/review-weight-templates": { "get": { "tags": [ "student-review-weight-controller" ], "operationId": "getTemplates", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListWeightTemplateResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/interviews/{interviewId}/score": { "put": { "tags": [ "结构化面试评分" ], "summary": "保存评分草稿", "description": "企业 owner 为已完成的面试保存/更新草稿;草稿阶段五个维度可为空;overallScore 由服务端计算;SUBMITTED 后再次 PUT 返回 409/9503", "operationId": "saveInterviewScore", "parameters": [ { "name": "interviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InterviewScoreSaveRequest" } } }, "required": true }, "responses": { "200": { "description": "success", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseInterviewScoreResponse" } } } }, "400": { "description": "非法维度或推荐值", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非企业/跨企业/非岗位 owner", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "404": { "description": "面试不存在 8401", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "409": { "description": "未完成 9502 / 已提交 9503 / 并发冲突 9501", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } }, "get": { "tags": [ "结构化面试评分" ], "summary": "查看评分", "description": "企业 owner 可看 DRAFT/SUBMITTED;目标学生仅可看 SUBMITTED;无评分返回 404/9504", "operationId": "getInterviewScore", "parameters": [ { "name": "interviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "success", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseInterviewScoreResponse" } } } }, "400": { "description": "请求体校验失败", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非目标学生 / 跨企业 / 非岗位 owner / ADMIN", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "404": { "description": "无评分 9504 / 面试不存在 8401", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "409": { "description": "未完成 9502", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/interviews/{interviewId}/score/submit": { "post": { "tags": [ "结构化面试评分" ], "summary": "提交评分", "description": "将 DRAFT 提交为 SUBMITTED,提交后不可逆;并发冲突 409;重复提交幂等返回原评分", "operationId": "submitInterviewScore", "parameters": [ { "name": "interviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "success", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseInterviewScoreResponse" } } } }, "400": { "description": "缺维度 1001", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非企业/跨企业/非岗位 owner", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "404": { "description": "面试不存在 8401", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "409": { "description": "未完成 9502 / 并发冲突 9501", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/interviews/{interviewId}/score/history": { "get": { "tags": [ "结构化面试评分" ], "summary": "评分历史", "description": "企业 owner 可查看全部历史;目标学生仅在 SUBMITTED 后可见;无历史返回 200 空数组;不返回内部用户标识", "operationId": "getInterviewScoreHistory", "parameters": [ { "name": "interviewId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "success", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListInterviewScoreHistoryItem" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非目标学生 / 跨企业 / 非岗位 owner / ADMIN", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "404": { "description": "面试不存在 8401", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "409": { "description": "未完成 9502", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/reports": { "post": { "tags": ["举报与屏蔽"], "summary": "提交举报", "description": "targetType=USER 必填 targetUserId;MESSAGE 必填 messageId;reportedUserId 由服务端推导。同 reporter+idempotencyKey+相同请求体返回原举报 200;不同请求体 409/9606;同目标同分类已有 PENDING 409/9603。限流:每用户每小时 10 次,超限 429/9609。", "operationId": "createReport", "security": [{ "bearerAuth": [] }], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateReportRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseReportResponse" } } } }, "400": { "description": "BAD_REQUEST(1001)/举报自己 9602/理由缺失 9607", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "无权访问消息(2002,不泄露消息是否存在)", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "409": { "description": "重复举报 9603 / 幂等冲突 9606", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "429": { "description": "频率超限 9609", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/reports/me": { "get": { "tags": ["举报与屏蔽"], "summary": "我的举报列表", "description": "仅返回当前用户创建的举报;身份来自 JWT;不返回举报人内部信息/phone/email/passwordHash/resumeUrl/消息全文;支持 status/page/size。", "operationId": "listMyReports", "security": [{ "bearerAuth": [] }], "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponsePageResponseReportResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/reports/{id}": { "get": { "tags": ["举报与屏蔽"], "summary": "举报详情(本人/ADMIN)", "description": "当前举报人本人或 ADMIN 可查看;其他 403/2002;非 ADMIN 不显示举报人内部 ID/手机号/邮箱;MESSAGE 仅返回脱敏 messagePreview。", "operationId": "getReportDetail", "security": [{ "bearerAuth": [] }], "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseReportResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非本人非 ADMIN(2002)", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "404": { "description": "举报不存在(9601)", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/blocks/{blockedUserId}": { "put": { "tags": ["举报与屏蔽"], "summary": "屏蔽用户", "description": "屏蔽自己 400/9608;目标不存在复用用户不存在错误码;已存在返回 200 不新增;不影响系统通知/投递/Offer/面试/评分/评价。", "operationId": "blockUser", "security": [{ "bearerAuth": [] }], "parameters": [ { "name": "blockedUserId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseBlockRelationResponse" } } } }, "400": { "description": "屏蔽自己 9608", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } }, "delete": { "tags": ["举报与屏蔽"], "summary": "解除屏蔽", "description": "幂等:不存在时返回 200 不报错。", "operationId": "unblockUser", "security": [{ "bearerAuth": [] }], "parameters": [ { "name": "blockedUserId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK(幂等)", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/blocks/me": { "get": { "tags": ["举报与屏蔽"], "summary": "我的屏蔽列表", "description": "仅返回当前用户主动屏蔽的用户;不返回对方手机号/邮箱/密码/简历地址;支持 page/size。", "operationId": "listMyBlocks", "security": [{ "bearerAuth": [] }], "parameters": [ { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponsePageResponseBlockRelationResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/admin/reports": { "get": { "tags": ["举报管理"], "summary": "举报列表(ADMIN)", "description": "仅 ADMIN;COMPANY/STUDENT/未登录分别 403/403/401;支持 status/targetType/category/page/size;响应脱敏。", "operationId": "adminListReports", "security": [{ "bearerAuth": [] }], "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "targetType", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "category", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponsePageResponseReportResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 ADMIN", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/admin/reports/{id}": { "get": { "tags": ["举报管理"], "summary": "举报详情(ADMIN)", "description": "仅 ADMIN;可见类型/分类/理由/脱敏证据 URL/MESSAGE 脱敏内容/会话最小信息/处理历史;不返回密码/JWT/手机号/邮箱/resumeUrl。", "operationId": "adminGetReport", "security": [{ "bearerAuth": [] }], "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseReportResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 ADMIN", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "404": { "description": "举报不存在(9601)", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/admin/reports/{id}/decision": { "post": { "tags": ["举报管理"], "summary": "举报处理决定(ADMIN)", "description": "仅 ADMIN;decision 仅 RESOLVED/REJECTED;REJECTED 必填 note;仅 PENDING 可处理,重复 409/9604,非法流转 409/9605;处理后发送一条 REPORT_DECISION 通知。", "operationId": "decideReport", "security": [{ "bearerAuth": [] }], "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReportDecisionRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseReportResponse" } } } }, "400": { "description": "参数错误(REJECTED 缺 note)", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "401": { "description": "未登录", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "403": { "description": "非 ADMIN", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "404": { "description": "举报不存在(9601)", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } }, "409": { "description": "重复决定 9604 / 非法流转 9605", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponse" } } } } } } }, "/skills/word-cloud": { "get": { "tags": [ "行业技能词云" ], "summary": "查询行业技能词云", "description": "返回筛选范围内的全部技能,按 heat DESC, nameZh ASC, skillId ASC 排序,heat=null 最后;前端取前十条作为 TOP10。仅 STUDENT 可访问。", "operationId": "getWordCloud", "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "industryId", "in": "query", "required": true, "description": "行业 ID,必填正整数", "schema": { "type": "integer", "format": "int64", "minimum": 1, "example": 1 } }, { "name": "occupationId", "in": "query", "required": true, "description": "职位 ID,必填正整数;必须属于该行业", "schema": { "type": "integer", "format": "int64", "minimum": 1, "example": 2 } }, { "name": "categoryId", "in": "query", "required": false, "description": "技能分类 ID,可选正整数;省略时返回该职位下全部分类", "schema": { "type": "integer", "format": "int64", "minimum": 1, "example": 101 } } ], "responses": { "200": { "description": "成功返回筛选范围内的完整技能列表", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponseSkillCloudResponse" }, "example": { "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 } ] }, "requestId": "req-word-cloud", "timestamp": "2026-09-15T10:00:00Z" } } } }, "400": { "description": "筛选参数缺失、非正整数或节点关系非法", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 1001, "message": "bad request", "data": null, "requestId": "req-1001", "timestamp": "2026-09-15T10:03:00Z" } } } }, "401": { "description": "未登录或令牌无效,由全局 Security 入口返回裸 JSON", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedResponse" }, "example": { "code": 401, "message": "not authenticated", "timestamp": "" } } } }, "403": { "description": "已登录但不是 STUDENT 角色", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 2002, "message": "forbidden", "data": null, "requestId": "req-2002", "timestamp": "2026-09-15T10:03:00Z" } } } } } } }, "/skills/match": { "get": { "tags": [ "行业技能词云" ], "summary": "查询个人技能匹配度", "description": "使用 JWT 对应学生的 skills_json,与当前筛选结果 TOP10 比对;matchScore=round(matchedCount*100/min(10,total))。仅 STUDENT 可访问。", "operationId": "getSkillMatch", "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "industryId", "in": "query", "required": true, "description": "行业 ID,必填正整数", "schema": { "type": "integer", "format": "int64", "minimum": 1, "example": 1 } }, { "name": "occupationId", "in": "query", "required": true, "description": "职位 ID,必填正整数;必须属于该行业", "schema": { "type": "integer", "format": "int64", "minimum": 1, "example": 2 } }, { "name": "categoryId", "in": "query", "required": false, "description": "技能分类 ID,可选正整数;省略时使用该职位下全部技能", "schema": { "type": "integer", "format": "int64", "minimum": 1, "example": 101 } } ], "responses": { "200": { "description": "成功返回个人技能匹配结果", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponseSkillMatchResponse" }, "example": { "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 } ] }, "requestId": "req-match", "timestamp": "2026-09-15T10:01:00Z" } } } }, "400": { "description": "筛选参数缺失、非正整数或节点关系非法", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 1001, "message": "bad request", "data": null, "requestId": "req-1001", "timestamp": "2026-09-15T10:03:00Z" } } } }, "401": { "description": "未登录或令牌无效,由全局 Security 入口返回裸 JSON", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedResponse" }, "example": { "code": 401, "message": "not authenticated", "timestamp": "" } } } }, "403": { "description": "已登录但不是 STUDENT 角色", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 2002, "message": "forbidden", "data": null, "requestId": "req-2002", "timestamp": "2026-09-15T10:03:00Z" } } } } } } }, "/skills/learning-path": { "get": { "tags": [ "行业技能词云" ], "summary": "生成个人学习路径", "description": "只针对个人 TOP10 中未命中的技能,沿用热度顺序返回连续 priority 和确定性通用建议;不调用 AI,不返回课程链接、时长或进度。仅 STUDENT 可访问。", "operationId": "getLearningPath", "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "industryId", "in": "query", "required": true, "description": "行业 ID,必填正整数", "schema": { "type": "integer", "format": "int64", "minimum": 1, "example": 1 } }, { "name": "occupationId", "in": "query", "required": true, "description": "职位 ID,必填正整数;必须属于该行业", "schema": { "type": "integer", "format": "int64", "minimum": 1, "example": 2 } }, { "name": "categoryId", "in": "query", "required": false, "description": "技能分类 ID,可选正整数;省略时使用该职位下全部技能", "schema": { "type": "integer", "format": "int64", "minimum": 1, "example": 101 } } ], "responses": { "200": { "description": "成功返回缺失技能的学习路径;没有缺口时列表为空", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponseSkillLearningPathResponse" }, "example": { "code": 200, "message": "ok", "data": { "total": 1, "items": [ { "priority": 1, "skillId": 26, "skillName": "React", "categoryId": 103, "categoryName": "前端框架", "suggestion": "先理解 React 的核心概念与生命周期,再通过一个小型项目练习集成。" } ] }, "requestId": "req-learning-path", "timestamp": "2026-09-15T10:02:00Z" } } } }, "400": { "description": "筛选参数缺失、非正整数或节点关系非法", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 1001, "message": "bad request", "data": null, "requestId": "req-1001", "timestamp": "2026-09-15T10:03:00Z" } } } }, "401": { "description": "未登录或令牌无效,由全局 Security 入口返回裸 JSON", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedResponse" }, "example": { "code": 401, "message": "not authenticated", "timestamp": "" } } } }, "403": { "description": "已登录但不是 STUDENT 角色", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 2002, "message": "forbidden", "data": null, "requestId": "req-2002", "timestamp": "2026-09-15T10:03:00Z" } } } } } } }, "/onboarding/company/checklist-items": { "get": { "tags": [ "入职清单" ], "summary": "查询本企业自定义清单项", "description": "返回当前 COMPANY 所属企业的活动与软删除自定义项,不包含通用项和其他企业项。", "operationId": "listCompanyChecklistItems", "security": [ { "bearerAuth": [] } ], "parameters": [], "responses": { "200": { "description": "查询成功;无自定义项时返回空数组", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseListCompanyChecklistItemView" }, "example": { "code": 200, "message": "ok", "data": [ { "itemId": 501, "source": "COMPANY", "itemKey": "company-10-8f1c", "title": "领取门禁卡", "description": "到行政前台领取门禁卡并完成权限激活。", "category": "ADMIN", "required": false, "sortOrder": 1000, "active": true, "version": 0 } ], "requestId": "req-onboarding-company-items", "timestamp": "2026-09-17T01:32:00Z" } } } }, "401": { "description": "未登录或令牌无效,由全局 Security 入口返回裸 JSON", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedResponse" }, "example": { "code": 401, "message": "not authenticated", "timestamp": "" } } } }, "403": { "description": "仅 COMPANY 角色可访问", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 2002, "message": "forbidden", "data": null, "requestId": "req-2002", "timestamp": "2026-09-17T01:30:00Z" } } } }, "404": { "description": "当前账号没有所属企业", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 5001, "message": "company not found", "data": null, "requestId": "req-5001", "timestamp": "2026-09-17T01:30:00Z" } } } } } }, "post": { "tags": [ "入职清单" ], "summary": "创建本企业自定义清单项", "description": "为当前 COMPANY 所属企业创建自定义项;idempotencyKey 用于网络重试,活动项累计不超过 50 条。", "operationId": "createCompanyChecklistItem", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompanyChecklistItemCreateRequest" }, "example": { "title": "领取门禁卡", "description": "到行政前台领取门禁卡并完成权限激活。", "category": "ADMIN", "sortOrder": 1000, "required": false, "idempotencyKey": "company-10-access-card-20260917" } } } }, "responses": { "200": { "description": "创建成功;相同幂等请求返回首次创建的条目", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCompanyChecklistItemView" }, "example": { "code": 200, "message": "ok", "data": { "itemId": 501, "source": "COMPANY", "itemKey": "company-10-8f1c", "title": "领取门禁卡", "description": "到行政前台领取门禁卡并完成权限激活。", "category": "ADMIN", "required": false, "sortOrder": 1000, "active": true, "version": 0 }, "requestId": "req-onboarding-company-item", "timestamp": "2026-09-17T01:32:00Z" } } } }, "400": { "description": "标题、分类、排序、必填标记或幂等键不符合约束", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 1001, "message": "bad request", "data": null, "requestId": "req-1001", "timestamp": "2026-09-17T01:30:00Z" } } } }, "401": { "description": "未登录或令牌无效,由全局 Security 入口返回裸 JSON", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedResponse" }, "example": { "code": 401, "message": "not authenticated", "timestamp": "" } } } }, "403": { "description": "仅 COMPANY 角色可访问", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 2002, "message": "forbidden", "data": null, "requestId": "req-2002", "timestamp": "2026-09-17T01:30:00Z" } } } }, "404": { "description": "当前账号没有所属企业", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 5001, "message": "company not found", "data": null, "requestId": "req-5001", "timestamp": "2026-09-17T01:30:00Z" } } } }, "409": { "description": "活动自定义项已达到 50 条;或 9704 幂等键已用于不同请求体", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 9703, "message": "onboarding checklist item limit exceeded", "data": null, "requestId": "req-9703", "timestamp": "2026-09-17T01:30:00Z" } } } } } } }, "/onboarding/company/checklist-items/{itemId}": { "put": { "tags": [ "入职清单" ], "summary": "更新本企业自定义清单项", "description": "使用当前 version 更新本企业条目;版本过期返回 9702,不静默覆盖。", "operationId": "updateCompanyChecklistItem", "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "itemId", "in": "path", "required": true, "description": "企业自定义清单项 ID", "schema": { "type": "integer", "format": "int64", "minimum": 1 } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompanyChecklistItemUpdateRequest" }, "example": { "title": "领取门禁卡并激活", "description": "到行政前台领取门禁卡并完成权限激活。", "category": "ADMIN", "sortOrder": 900, "required": true, "active": true, "version": 0 } } } }, "responses": { "200": { "description": "更新成功并递增 version", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCompanyChecklistItemView" }, "example": { "code": 200, "message": "ok", "data": { "itemId": 501, "source": "COMPANY", "itemKey": "company-10-8f1c", "title": "领取门禁卡", "description": "到行政前台领取门禁卡并完成权限激活。", "category": "ADMIN", "required": false, "sortOrder": 1000, "active": true, "version": 0 }, "requestId": "req-onboarding-company-item", "timestamp": "2026-09-17T01:32:00Z" } } } }, "400": { "description": "参数或请求体验证失败", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 1001, "message": "bad request", "data": null, "requestId": "req-1001", "timestamp": "2026-09-17T01:30:00Z" } } } }, "401": { "description": "未登录或令牌无效,由全局 Security 入口返回裸 JSON", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedResponse" }, "example": { "code": 401, "message": "not authenticated", "timestamp": "" } } } }, "403": { "description": "仅 COMPANY 角色可访问", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 2002, "message": "forbidden", "data": null, "requestId": "req-2002", "timestamp": "2026-09-17T01:30:00Z" } } } }, "404": { "description": "条目不存在、已不属于该企业,或不属于该企业的有效清单", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 9701, "message": "onboarding checklist item not found", "data": null, "requestId": "req-9701", "timestamp": "2026-09-17T01:30:00Z" } } } }, "409": { "description": "请求 version 已过期", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 9702, "message": "onboarding checklist item was modified concurrently", "data": null, "requestId": "req-9702", "timestamp": "2026-09-17T01:30:00Z" } } } } } }, "delete": { "tags": [ "入职清单" ], "summary": "软删除本企业自定义清单项", "description": "使用当前 version 将 active 置为 false;重复删除保持幂等成功。", "operationId": "deleteCompanyChecklistItem", "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "itemId", "in": "path", "required": true, "description": "企业自定义清单项 ID", "schema": { "type": "integer", "format": "int64", "minimum": 1 } }, { "name": "version", "in": "query", "required": true, "description": "客户端最后读取到的条目版本", "schema": { "type": "integer", "format": "int64", "minimum": 0 } } ], "responses": { "200": { "description": "软删除成功;重复删除返回当前非活动条目", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCompanyChecklistItemView" }, "example": { "code": 200, "message": "ok", "data": { "itemId": 501, "source": "COMPANY", "itemKey": "company-10-8f1c", "title": "领取门禁卡", "description": "到行政前台领取门禁卡并完成权限激活。", "category": "ADMIN", "required": false, "sortOrder": 1000, "active": false, "version": 1 }, "requestId": "req-onboarding-company-item", "timestamp": "2026-09-17T01:32:00Z" } } } }, "400": { "description": "缺少 version 或参数类型不正确", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 1001, "message": "bad request", "data": null, "requestId": "req-1001", "timestamp": "2026-09-17T01:30:00Z" } } } }, "401": { "description": "未登录或令牌无效,由全局 Security 入口返回裸 JSON", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedResponse" }, "example": { "code": 401, "message": "not authenticated", "timestamp": "" } } } }, "403": { "description": "仅 COMPANY 角色可访问", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 2002, "message": "forbidden", "data": null, "requestId": "req-2002", "timestamp": "2026-09-17T01:30:00Z" } } } }, "404": { "description": "条目不存在、已不属于该企业,或不属于该企业的有效清单", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 9701, "message": "onboarding checklist item not found", "data": null, "requestId": "req-9701", "timestamp": "2026-09-17T01:30:00Z" } } } }, "409": { "description": "请求 version 已过期", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 9702, "message": "onboarding checklist item was modified concurrently", "data": null, "requestId": "req-9702", "timestamp": "2026-09-17T01:30:00Z" } } } } } } }, "/onboarding/company/knowledge": { "get": { "tags": [ "公司知识介绍" ], "summary": "读取本企业知识配置", "description": "返回当前 COMPANY 所属企业的知识配置;尚未配置时 configured=false、version=0。", "operationId": "getCompanyKnowledge", "security": [ { "bearerAuth": [] } ], "parameters": [], "responses": { "200": { "description": "查询成功", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCompanyKnowledgeView" }, "example": { "code": 200, "message": "ok", "data": { "configured": true, "culture": "以用户价值为中心,保持透明和长期主义。", "workPolicies": "弹性上班;每周一、三线下办公。", "onboardingGuide": "报到当天携带身份证件,联系行政同事完成入职登记。", "updatedAt": "2026-09-17T01:33:00Z", "version": 2 }, "requestId": "req-company-knowledge", "timestamp": "2026-09-17T01:33:00Z" } } } }, "401": { "description": "未登录或令牌无效,由全局 Security 入口返回裸 JSON", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedResponse" }, "example": { "code": 401, "message": "not authenticated", "timestamp": "" } } } }, "403": { "description": "仅 COMPANY 角色可访问", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 2002, "message": "forbidden", "data": null, "requestId": "req-2002", "timestamp": "2026-09-17T01:30:00Z" } } } }, "404": { "description": "当前账号没有所属企业", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 5001, "message": "company not found", "data": null, "requestId": "req-5001", "timestamp": "2026-09-17T01:30:00Z" } } } } } }, "put": { "tags": [ "公司知识介绍" ], "summary": "创建或更新本企业知识配置", "description": "首次创建可省略 version;已有配置必须提交当前 version。字段按纯文本保存且禁止 HTML 标签。", "operationId": "upsertCompanyKnowledge", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompanyKnowledgeUpdateRequest" }, "example": { "culture": "以用户价值为中心,保持透明和长期主义。", "workPolicies": "弹性上班;每周一、三线下办公。", "onboardingGuide": "报到当天携带身份证件,联系行政同事完成入职登记。", "version": 1 } } } }, "responses": { "200": { "description": "创建或更新成功", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCompanyKnowledgeView" }, "example": { "code": 200, "message": "ok", "data": { "configured": true, "culture": "以用户价值为中心,保持透明和长期主义。", "workPolicies": "弹性上班;每周一、三线下办公。", "onboardingGuide": "报到当天携带身份证件,联系行政同事完成入职登记。", "updatedAt": "2026-09-17T01:33:00Z", "version": 2 }, "requestId": "req-company-knowledge", "timestamp": "2026-09-17T01:33:00Z" } } } }, "400": { "description": "内容为空、超长、包含 HTML 标签,或已有配置缺少 version", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 1001, "message": "bad request", "data": null, "requestId": "req-1001", "timestamp": "2026-09-17T01:30:00Z" } } } }, "401": { "description": "未登录或令牌无效,由全局 Security 入口返回裸 JSON", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedResponse" }, "example": { "code": 401, "message": "not authenticated", "timestamp": "" } } } }, "403": { "description": "仅 COMPANY 角色可访问", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 2002, "message": "forbidden", "data": null, "requestId": "req-2002", "timestamp": "2026-09-17T01:30:00Z" } } } }, "404": { "description": "当前账号没有所属企业", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 5001, "message": "company not found", "data": null, "requestId": "req-5001", "timestamp": "2026-09-17T01:30:00Z" } } } }, "409": { "description": "知识配置版本已过期", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 9706, "message": "company knowledge was modified concurrently", "data": null, "requestId": "req-9706", "timestamp": "2026-09-17T01:30:00Z" } } } } } } }, "/onboarding/companies/{companyId}/checklist": { "get": { "tags": [ "入职清单" ], "summary": "读取有效入职清单", "description": "STUDENT 读取通用活动项与当前企业活动自定义项的合并清单;无企业自定义项时回退通用清单。", "operationId": "getEffectiveChecklist", "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "companyId", "in": "path", "required": true, "description": "企业 ID", "schema": { "type": "integer", "format": "int64", "minimum": 1 } } ], "responses": { "200": { "description": "查询成功", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseEffectiveChecklistResponse" }, "example": { "code": 200, "message": "ok", "data": { "companyId": 10, "companyName": "示例科技", "customized": true, "totalItems": 13, "completedItems": 1, "completionRate": 7.7, "items": [ { "itemId": 101, "source": "STANDARD", "itemKey": "standard-id-card", "title": "准备身份证件", "description": "准备身份证原件或有效身份证明,用于入职登记。", "category": "DOCUMENT", "required": true, "sortOrder": 100, "active": true, "completed": true, "completedAt": "2026-09-17T09:00:00", "progressVersion": 1 }, { "itemId": 501, "source": "COMPANY", "itemKey": "company-10-8f1c", "title": "领取门禁卡", "description": "到行政前台领取门禁卡并完成权限激活。", "category": "ADMIN", "required": false, "sortOrder": 1000, "active": true, "completed": false, "completedAt": null, "progressVersion": 0 } ] }, "requestId": "req-onboarding-checklist", "timestamp": "2026-09-17T01:30:00Z" } } } }, "400": { "description": "companyId 不是正整数", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 1001, "message": "bad request", "data": null, "requestId": "req-1001", "timestamp": "2026-09-17T01:30:00Z" } } } }, "401": { "description": "未登录或令牌无效,由全局 Security 入口返回裸 JSON", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedResponse" }, "example": { "code": 401, "message": "not authenticated", "timestamp": "" } } } }, "403": { "description": "仅 STUDENT 角色可访问", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 2002, "message": "forbidden", "data": null, "requestId": "req-2002", "timestamp": "2026-09-17T01:30:00Z" } } } }, "404": { "description": "企业不存在", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 5001, "message": "company not found", "data": null, "requestId": "req-5001", "timestamp": "2026-09-17T01:30:00Z" } } } } } } }, "/onboarding/companies/{companyId}/checklist/items/{itemId}/completion": { "put": { "tags": [ "入职清单" ], "summary": "更新清单条目完成状态", "description": "STUDENT 使用绝对 completed 状态更新本人进度;已有进度变化时必须提交当前 version,首次创建只接受 version=0 或空。", "operationId": "updateCompletion", "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "companyId", "in": "path", "required": true, "description": "企业 ID", "schema": { "type": "integer", "format": "int64", "minimum": 1 } }, { "name": "itemId", "in": "path", "required": true, "description": "有效清单条目 ID", "schema": { "type": "integer", "format": "int64", "minimum": 1 } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProgressUpdateRequest" }, "example": { "completed": true, "version": 0 } } } }, "responses": { "200": { "description": "更新成功;重复提交相同状态返回幂等结果", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseProgressUpdateResponse" }, "example": { "code": 200, "message": "ok", "data": { "itemId": 501, "completed": true, "completedAt": "2026-09-17T01:31:00Z", "progressVersion": 1, "totalItems": 13, "completedItems": 2, "completionRate": 15.4 }, "requestId": "req-onboarding-progress", "timestamp": "2026-09-17T01:31:00Z" } } } }, "400": { "description": "completed 缺失或 version 为负数", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 1001, "message": "bad request", "data": null, "requestId": "req-1001", "timestamp": "2026-09-17T01:30:00Z" } } } }, "401": { "description": "未登录或令牌无效,由全局 Security 入口返回裸 JSON", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedResponse" }, "example": { "code": 401, "message": "not authenticated", "timestamp": "" } } } }, "403": { "description": "仅 STUDENT 角色可访问", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 2002, "message": "forbidden", "data": null, "requestId": "req-2002", "timestamp": "2026-09-17T01:30:00Z" } } } }, "404": { "description": "条目不存在、已不属于该企业,或不属于该企业的有效清单", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 9701, "message": "onboarding checklist item not found", "data": null, "requestId": "req-9701", "timestamp": "2026-09-17T01:30:00Z" } } } }, "409": { "description": "进度版本已过期", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 9705, "message": "onboarding progress was modified concurrently", "data": null, "requestId": "req-9705", "timestamp": "2026-09-17T01:30:00Z" } } } } } } }, "/onboarding/companies/{companyId}/knowledge": { "get": { "tags": [ "公司知识介绍" ], "summary": "读取公司知识介绍", "description": "STUDENT 读取企业基础资料、企业维护内容和公开评价摘要;企业未配置知识时回退基础资料,公开评价少于 3 条时不返回均值。", "operationId": "getCompanyKnowledgeOverview", "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "companyId", "in": "path", "required": true, "description": "企业 ID", "schema": { "type": "integer", "format": "int64", "minimum": 1 } } ], "responses": { "200": { "description": "查询成功", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApiResponseCompanyKnowledgeOverviewResponse" }, "example": { "code": 200, "message": "ok", "data": { "company": { "id": 10, "name": "示例科技", "logoUrl": "https://cdn.example.com/company-10.png", "description": "面向企业提供数据基础设施产品。", "industry": "互联网", "website": "https://example.com", "address": "杭州市余杭区", "verified": true }, "knowledgeState": "CONFIGURED", "knowledge": { "culture": "以用户价值为中心,保持透明和长期主义。", "workPolicies": "弹性上班;每周一、三线下办公。", "onboardingGuide": "报到当天携带身份证件,联系行政同事完成入职登记。", "updatedAt": "2026-09-17T01:33:00Z" }, "reviewSummary": { "state": "SUFFICIENT", "totalReviews": 4, "averageRating": 4.5, "ratingDistribution": { "rating1": 0, "rating2": 0, "rating3": 1, "rating4": 1, "rating5": 2 }, "topTags": [ "发展空间", "同事友好" ], "dimensionSummary": { "AUTHENTICITY": { "averageScore": 4.5, "sampleCount": 4, "dataState": "SUFFICIENT" }, "BENEFITS": { "averageScore": 4.3, "sampleCount": 4, "dataState": "SUFFICIENT" }, "SALARY_TRANSPARENCY": { "averageScore": 4.0, "sampleCount": 4, "dataState": "SUFFICIENT" }, "JD_CLARITY": { "averageScore": 4.6, "sampleCount": 4, "dataState": "SUFFICIENT" }, "GROWTH": { "averageScore": 4.4, "sampleCount": 4, "dataState": "SUFFICIENT" }, "TEAM_ATMOSPHERE": { "averageScore": 4.7, "sampleCount": 4, "dataState": "SUFFICIENT" }, "PROMOTION": { "averageScore": 4.1, "sampleCount": 4, "dataState": "SUFFICIENT" }, "WORK_LIFE_BALANCE": { "averageScore": 4.0, "sampleCount": 4, "dataState": "SUFFICIENT" } } } }, "requestId": "req-company-overview", "timestamp": "2026-09-17T01:34:00Z" } } } }, "400": { "description": "companyId 不是正整数", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 1001, "message": "bad request", "data": null, "requestId": "req-1001", "timestamp": "2026-09-17T01:30:00Z" } } } }, "401": { "description": "未登录或令牌无效,由全局 Security 入口返回裸 JSON", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedResponse" }, "example": { "code": 401, "message": "not authenticated", "timestamp": "" } } } }, "403": { "description": "仅 STUDENT 角色可访问", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 2002, "message": "forbidden", "data": null, "requestId": "req-2002", "timestamp": "2026-09-17T01:30:00Z" } } } }, "404": { "description": "企业不存在", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiResponse" }, "example": { "code": 5001, "message": "company not found", "data": null, "requestId": "req-5001", "timestamp": "2026-09-17T01:30:00Z" } } } } } } } }, "components": { "schemas": {"SalaryDataLevel":{"type":"string","enum":["CITY","PROVINCE_FALLBACK"]},"SalaryCitySummaryResponse":{"type":"object","properties":{"cityCode":{"type":"string"},"provinceCode":{"type":"string"},"provinceName":{"type":"string"},"cityName":{"type":"string"},"policyVersion":{"type":"string"},"policyEffectiveDate":{"type":"string","format":"date"},"dataLevel":{"$ref":"#/components/schemas/SalaryDataLevel"}}},"SalaryCityDetailResponse":{"type":"object","properties":{"cityCode":{"type":"string"},"provinceCode":{"type":"string"},"provinceName":{"type":"string"},"cityName":{"type":"string"},"policyVersion":{"type":"string"},"policyEffectiveDate":{"type":"string","format":"date"},"dataLevel":{"$ref":"#/components/schemas/SalaryDataLevel"},"dataSource":{"type":"string"},"socialSecurityBaseMin":{"type":"number"},"socialSecurityBaseMax":{"type":"number"},"housingFundBaseMin":{"type":"number"},"housingFundBaseMax":{"type":"number"},"pensionRate":{"type":"number"},"medicalRate":{"type":"number"},"unemploymentRate":{"type":"number"},"housingFundRate":{"type":"number"},"seriousIllnessMonthlyFee":{"type":"number"}}},"SalaryCalculationOverrideRequest":{"type":"object","properties":{"socialSecurityBase":{"type":"number"},"housingFundBase":{"type":"number"},"pensionRate":{"type":"number"},"medicalRate":{"type":"number"},"unemploymentRate":{"type":"number"},"housingFundRate":{"type":"number"},"seriousIllnessMonthlyFee":{"type":"number"}}},"SalaryCalculationRequest":{"type":"object","required":["cityCode","grossMonthlySalary","expectedPolicyVersion"],"properties":{"cityCode":{"type":"string"},"grossMonthlySalary":{"type":"number"},"monthIndex":{"type":"integer","minimum":1,"maximum":12},"specialAdditionalDeduction":{"type":"number"},"expectedPolicyVersion":{"type":"string"},"idempotencyKey":{"type":"string","maxLength":64},"overrides":{"$ref":"#/components/schemas/SalaryCalculationOverrideRequest"}}},"SalaryCalculationResult":{"type":"object","properties":{"cityCode":{"type":"string"},"cityName":{"type":"string"},"dataLevel":{"$ref":"#/components/schemas/SalaryDataLevel"},"policyVersion":{"type":"string"},"policyEffectiveDate":{"type":"string","format":"date"},"taxRulesVersion":{"type":"string"},"estimate":{"type":"boolean"},"monthIndex":{"type":"integer"},"grossMonthlySalary":{"type":"number"},"specialAdditionalDeduction":{"type":"number"},"socialSecurityBase":{"type":"number"},"housingFundBase":{"type":"number"},"pensionRate":{"type":"number"},"medicalRate":{"type":"number"},"unemploymentRate":{"type":"number"},"housingFundRate":{"type":"number"},"seriousIllnessMonthlyFee":{"type":"number"},"pension":{"type":"number"},"medical":{"type":"number"},"unemployment":{"type":"number"},"housingFund":{"type":"number"},"cumulativeGrossIncome":{"type":"number"},"cumulativeSocialInsurance":{"type":"number"},"cumulativeHousingFund":{"type":"number"},"cumulativeSeriousIllness":{"type":"number"},"cumulativeBasicDeduction":{"type":"number"},"cumulativeSpecialAdditionalDeduction":{"type":"number"},"cumulativeTaxableIncome":{"type":"number"},"cumulativeTaxDue":{"type":"number"},"previouslyWithheldTax":{"type":"number"},"currentMonthTax":{"type":"number"},"netSalary":{"type":"number"}}},"SalaryCalculationResponse":{"type":"object","properties":{"historyId":{"type":"integer","format":"int64"},"createdAt":{"type":"string","format":"date-time"},"result":{"$ref":"#/components/schemas/SalaryCalculationResult"}}},"SalaryHistorySummaryResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"cityCode":{"type":"string"},"cityName":{"type":"string"},"dataLevel":{"$ref":"#/components/schemas/SalaryDataLevel"},"grossMonthlySalary":{"type":"number"},"netSalary":{"type":"number"},"monthIndex":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"}}},"SalaryHistoryDetailResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"cityCode":{"type":"string"},"cityName":{"type":"string"},"dataLevel":{"$ref":"#/components/schemas/SalaryDataLevel"},"policyVersion":{"type":"string"},"taxRulesVersion":{"type":"string"},"monthIndex":{"type":"integer"},"grossMonthlySalary":{"type":"number"},"netSalary":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"inputSnapshot":{"type":"object"},"policySnapshot":{"type":"object"},"resultSnapshot":{"type":"object"}}},"PageResponseSalaryHistorySummaryResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SalaryHistorySummaryResponse"}},"total":{"type":"integer","format":"int64"},"page":{"type":"integer"},"size":{"type":"integer"},"totalPages":{"type":"integer"}}},"ApiResponseListSalaryCitySummaryResponse":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/SalaryCitySummaryResponse"}},"requestId":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}}},"ApiResponseSalaryCityDetailResponse":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/SalaryCityDetailResponse"},"requestId":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}}},"ApiResponseSalaryCalculationResponse":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/SalaryCalculationResponse"},"requestId":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}}},"ApiResponsePageResponseSalaryHistorySummaryResponse":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/PageResponseSalaryHistorySummaryResponse"},"requestId":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}}},"ApiResponseSalaryHistoryDetailResponse":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/SalaryHistoryDetailResponse"},"requestId":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}}},"ApiResponseVoid":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"},"requestId":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}}}, "AccountDeletionResponse": { "type": "object", "properties": { "userId": { "type": "integer", "format": "int64", "example": 2 }, "status": { "type": "string", "enum": [ "NONE", "PENDING", "COMPLETED" ], "example": "PENDING", "description": "注销状态:NONE/PENDING/COMPLETED" }, "requestedAt": { "type": "string", "format": "date-time", "nullable": true }, "effectiveAt": { "type": "string", "format": "date-time", "nullable": true }, "cancelledAt": { "type": "string", "format": "date-time", "nullable": true }, "completedAt": { "type": "string", "format": "date-time", "nullable": true }, "version": { "type": "integer", "format": "int64", "example": 0 } } }, "AdminDashboardOverviewResponse": { "type": "object", "properties": { "totalCompanies": { "type": "integer", "format": "int32" }, "totalJobs": { "type": "integer", "format": "int32" }, "totalCandidates": { "type": "integer", "format": "int32" }, "avgCandidateScore": { "type": "number" }, "topCompanies": { "type": "array", "items": { "$ref": "#/components/schemas/CompanyScoreItem" } } } }, "ApiResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": {}, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "CareerProgressResponse": { "type": "object", "properties": { "todo": { "$ref": "#/components/schemas/ProgressTodoSummary" }, "applications": { "$ref": "#/components/schemas/PaginatedApplications" }, "generatedAt": { "type": "string", "format": "date-time" } } }, "ProgressTodoSummary": { "type": "object", "properties": { "pendingInterviewResponseCount": { "type": "integer", "format": "int64" }, "upcomingConfirmedInterviewCount": { "type": "integer", "format": "int64" }, "pendingOfferResponseCount": { "type": "integer", "format": "int64" }, "unreadNotificationCount": { "type": "integer", "format": "int64" }, "unreadReportDecisionCount": { "type": "integer", "format": "int64" } } }, "PaginatedApplications": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CareerProgressItem" } }, "total": { "type": "integer", "format": "int64" }, "page": { "type": "integer", "format": "int32" }, "size": { "type": "integer", "format": "int32" }, "totalPages": { "type": "integer", "format": "int32" } } }, "CareerProgressItem": { "type": "object", "properties": { "applicationId": { "type": "integer", "format": "int64" }, "applicationStatus": { "type": "string" }, "appliedAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "job": { "$ref": "#/components/schemas/JobSummary" }, "nextInterview": { "$ref": "#/components/schemas/InterviewSummary" }, "latestSubmittedInterviewScore": { "$ref": "#/components/schemas/ScoreSummary" }, "offer": { "$ref": "#/components/schemas/OfferSummary" }, "competition": { "$ref": "#/components/schemas/CompetitionSummary" } } }, "JobSummary": { "type": "object", "properties": { "jobId": { "type": "integer", "format": "int64" }, "title": { "type": "string" }, "companyName": { "type": "string" }, "city": { "type": "string" }, "employmentType": { "type": "string" }, "jobStatus": { "type": "string" } } }, "InterviewSummary": { "type": "object", "properties": { "interviewId": { "type": "integer", "format": "int64" }, "roundNo": { "type": "integer", "format": "int32" }, "title": { "type": "string" }, "interviewType": { "type": "string" }, "startAt": { "type": "string", "format": "date-time" }, "endAt": { "type": "string", "format": "date-time" }, "status": { "type": "string" } } }, "ScoreSummary": { "type": "object", "properties": { "interviewId": { "type": "integer", "format": "int64" }, "overallScore": { "type": "number" }, "recommendation": { "type": "string" }, "submittedAt": { "type": "string", "format": "date-time" } } }, "OfferSummary": { "type": "object", "properties": { "offerId": { "type": "integer", "format": "int64" }, "status": { "type": "string" }, "title": { "type": "string" }, "expireAt": { "type": "string", "format": "date-time" }, "onboardingDate": { "type": "string", "format": "date" } } }, "CompetitionSummary": { "type": "object", "properties": { "eligible": { "type": "boolean" }, "rank": { "type": "integer", "format": "int32" }, "cohortSize": { "type": "integer", "format": "int32" }, "overallScore": { "type": "number" }, "percentile": { "type": "number" }, "status": { "type": "string" }, "mySnapshotPeriod": { "type": "string" }, "rulesVersion": { "type": "string" } } }, "ApiResponseCareerProgressResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32", "example": 200 }, "message": { "type": "string", "example": "ok" }, "data": { "$ref": "#/components/schemas/CareerProgressResponse" }, "requestId": { "type": "string", "example": "req-1" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseAccountDeletionResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32", "example": 200 }, "message": { "type": "string", "example": "ok" }, "data": { "$ref": "#/components/schemas/AccountDeletionResponse" }, "requestId": { "type": "string", "example": "req-1" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseAdminDashboardOverviewResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/AdminDashboardOverviewResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseAppealResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/AppealResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseCandidateDetailView": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CandidateDetailView" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseCandidateFeedbackResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CandidateFeedbackResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseCandidateListResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CandidateListResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseCandidatePercentileResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CandidatePercentileResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseCandidateRankingDetailResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CandidateRankingDetailResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseCandidateRankingListResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CandidateRankingListResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseCandidateScoreCardResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CandidateScoreCardResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseCandidateScoreTrendResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CandidateScoreTrendResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseCandidateScoringOverviewResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CandidateScoringOverviewResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseCandidateScoringTrendResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CandidateScoringTrendResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseCompanyCandidateScoringResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CompanyCandidateScoringResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseCompanyPublicView": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CompanyPublicView" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseDashboardOverviewResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/DashboardOverviewResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseDimensionScoreDetailResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/DimensionScoreDetailResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseJobRankingItem": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/JobRankingItem" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseJobRankingListResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/JobRankingListResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseListAppealHistoryItem": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/AppealHistoryItem" } }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseListMapStringObject": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "type": "array", "items": { "type": "object", "additionalProperties": {} } }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseListSnapshotHistoryItem": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/SnapshotHistoryItem" } }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseListWeightTemplateResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/WeightTemplateResponse" } }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseMapStringObject": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "type": "object", "additionalProperties": {} }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseMapStringString": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "type": "object", "additionalProperties": { "type": "string" } }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponsePersonalizedScoreResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/PersonalizedScoreResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponsePrivacySettingsResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32", "example": 200 }, "message": { "type": "string", "example": "ok" }, "data": { "$ref": "#/components/schemas/PrivacySettingsResponse" }, "requestId": { "type": "string", "example": "req-1" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseReviewWeightResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/ReviewWeightResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseScoreTrendResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/ScoreTrendResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "AppealDecisionRequest": { "type": "object", "properties": { "decision": { "type": "string", "minLength": 1 }, "reason": { "type": "string" } }, "required": [ "decision" ] }, "AppealHistoryItem": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "fromStatus": { "type": "string" }, "toStatus": { "type": "string" }, "actorUserId": { "type": "integer", "format": "int64" }, "actorRole": { "type": "string" }, "reason": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" } } }, "AppealResponse": { "type": "object", "properties": { "appealId": { "type": "integer", "format": "int64" }, "candidateId": { "type": "integer", "format": "int64" }, "dimension": { "type": "string" }, "period": { "type": "string" }, "status": { "type": "string" }, "reason": { "type": "string" }, "decision": { "type": "string" }, "decisionReason": { "type": "string" }, "reviewerId": { "type": "integer", "format": "int64" }, "reviewedAt": { "type": "string", "format": "date-time" }, "rollbackAt": { "type": "string", "format": "date-time" }, "scoreAtAppeal": { "type": "number" }, "snapshotVersionAtAppeal": { "type": "integer", "format": "int64" }, "rulesVersion": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } } }, "ApplicationCreateRequest": { "type": "object", "properties": { "jobId": { "type": "integer", "format": "int64" } }, "required": [ "jobId" ] }, "ApplicationStatusRequest": { "type": "object", "properties": { "status": { "type": "string", "minLength": 1, "pattern": "^(VIEWED|INTERVIEW|REJECTED|HIRED)$" } }, "required": [ "status" ] }, "CandidateDetailView": { "type": "object", "properties": { "applicationId": { "type": "integer", "format": "int64" }, "jobId": { "type": "integer", "format": "int64" }, "jobTitle": { "type": "string" }, "jobCity": { "type": "string" }, "jobEmploymentType": { "type": "string" }, "status": { "type": "string" }, "coverLetter": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "candidateName": { "type": "string" }, "candidateAvatarUrl": { "type": "string" }, "candidateBio": { "type": "string" }, "candidateLocation": { "type": "string" }, "candidateSchool": { "type": "string" }, "candidateEducation": { "type": "string" }, "candidateGraduationYear": { "type": "integer", "format": "int32" }, "candidateSkills": { "type": "array", "items": { "type": "string" } } } }, "CandidateFeedbackRequest": { "type": "object", "properties": { "rating": { "type": "integer", "format": "int32", "maximum": 5, "minimum": 1 }, "content": { "type": "string", "maxLength": 1000, "minLength": 0 }, "tags": { "type": "array", "items": { "type": "string", "maxLength": 50, "minLength": 1 }, "maxItems": 10, "minItems": 0 } }, "required": [ "content", "rating" ] }, "CandidateFeedbackResponse": { "type": "object", "description": "脱敏后的候选人反馈", "properties": { "id": { "type": "integer", "format": "int64", "description": "反馈 ID", "example": 1 }, "applicationId": { "type": "integer", "format": "int64", "description": "投递 ID", "example": 31 }, "rating": { "type": "integer", "format": "int32", "description": "评分,范围 1-5", "example": 5 }, "content": { "type": "string", "description": "反馈内容", "example": "沟通良好" }, "tags": { "type": "array", "description": "反馈标签", "items": { "type": "string" } }, "createdAt": { "type": "string", "format": "date-time", "description": "创建时间", "example": "2026-08-25T10:00:00" }, "updatedAt": { "type": "string", "format": "date-time", "description": "更新时间", "example": "2026-08-25T10:00:00" } } }, "CandidateFeedbackSummary": { "type": "object", "properties": { "totalCount": { "type": "integer", "format": "int32" }, "averageRating": { "type": "number" }, "ratingDistribution": { "type": "object", "additionalProperties": { "type": "integer", "format": "int32" } }, "tags": { "type": "array", "items": { "$ref": "#/components/schemas/TagCount" } } } }, "CandidateItemView": { "type": "object", "properties": { "applicationId": { "type": "integer", "format": "int64" }, "jobId": { "type": "integer", "format": "int64" }, "jobTitle": { "type": "string" }, "status": { "type": "string" }, "candidateName": { "type": "string" }, "candidateSchool": { "type": "string" }, "candidateEducation": { "type": "string" }, "candidateGraduationYear": { "type": "integer", "format": "int32" }, "candidateAvatarUrl": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } } }, "CandidateListResponse": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CandidateItemView" } }, "total": { "type": "integer", "format": "int64" }, "page": { "type": "integer", "format": "int32" }, "size": { "type": "integer", "format": "int32" }, "totalPages": { "type": "integer", "format": "int32" } } }, "CandidateMatchSignals": { "type": "object", "properties": { "candidateInterestScore": { "$ref": "#/components/schemas/MatchSignal" }, "hrSuitabilityScore": { "$ref": "#/components/schemas/MatchSignal" } } }, "CandidatePercentileResponse": { "type": "object", "properties": { "candidateId": { "type": "integer", "format": "int64" }, "status": { "type": "string" }, "scoreType": { "type": "string" }, "score": { "type": "number" }, "percentile": { "type": "number" }, "cohortSize": { "type": "integer", "format": "int32" }, "sampleCount": { "type": "integer", "format": "int32" }, "minimumSampleCount": { "type": "integer", "format": "int32" } } }, "CandidateRankingDetailResponse": { "type": "object", "properties": { "applicationId": { "type": "integer", "format": "int64" }, "jobId": { "type": "integer", "format": "int64" }, "candidateName": { "type": "string" }, "candidateSchool": { "type": "string" }, "overallScore": { "type": "number" }, "percentile": { "type": "number" }, "cohortSize": { "type": "integer", "format": "int32" }, "dimensionScores": { "type": "array", "items": { "$ref": "#/components/schemas/DimensionScoreItem" } } } }, "CandidateRankingItem": { "type": "object", "properties": { "applicationId": { "type": "integer", "format": "int64" }, "jobId": { "type": "integer", "format": "int64" }, "candidateName": { "type": "string" }, "candidateSchool": { "type": "string" }, "overallScore": { "type": "number" }, "percentile": { "type": "number" }, "sampleCount": { "type": "integer", "format": "int32" } } }, "CandidateRankingListResponse": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CandidateRankingItem" } }, "total": { "type": "integer", "format": "int64" }, "page": { "type": "integer", "format": "int32" }, "size": { "type": "integer", "format": "int32" }, "totalPages": { "type": "integer", "format": "int32" } } }, "CandidateScoreCardResponse": { "type": "object", "properties": { "candidateId": { "type": "integer", "format": "int64" }, "status": { "type": "string" }, "overallScore": { "type": "number" }, "sampleCount": { "type": "integer", "format": "int32" }, "feedbackSummary": { "$ref": "#/components/schemas/CandidateFeedbackSummary" }, "matchSignals": { "$ref": "#/components/schemas/CandidateMatchSignals" }, "unsupportedDimensions": { "type": "array", "items": { "type": "string" } }, "generatedAt": { "type": "string", "format": "date-time" } } }, "CandidateScoreTrendItem": { "type": "object", "properties": { "month": { "type": "string" }, "feedbackCount": { "type": "integer", "format": "int32" }, "averageRating": { "type": "number" }, "ratingScore": { "type": "number" } } }, "CandidateScoreTrendResponse": { "type": "object", "properties": { "candidateId": { "type": "integer", "format": "int64" }, "months": { "type": "integer", "format": "int32" }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/CandidateScoreTrendItem" } } } }, "CandidateScoringOverviewResponse": { "type": "object", "properties": { "candidateId": { "type": "integer", "format": "int64" }, "status": { "type": "string" }, "overallScore": { "type": "number" }, "weights": { "type": "object", "additionalProperties": { "type": "number" } }, "dimensions": { "type": "array", "items": { "$ref": "#/components/schemas/DimensionItem" } }, "rulesVersion": { "type": "string" }, "generatedAt": { "type": "string", "format": "date-time" } } }, "CandidateScoringTrendResponse": { "type": "object", "properties": { "candidateId": { "type": "integer", "format": "int64" }, "months": { "type": "integer", "format": "int32" }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/TrendItem" } } } }, "CompanyCandidateScoringResponse": { "type": "object", "properties": { "applicationId": { "type": "integer", "format": "int64" }, "overallScore": { "type": "number" }, "status": { "type": "string" }, "dimensions": { "type": "array", "items": { "$ref": "#/components/schemas/CompanyDimensionItem" } }, "generatedAt": { "type": "string", "format": "date-time" }, "rulesVersion": { "type": "string" } } }, "CompanyCreateRequest": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 100, "minLength": 0 }, "logoUrl": { "type": "string" }, "description": { "type": "string" }, "industry": { "type": "string" }, "website": { "type": "string" }, "address": { "type": "string" } }, "required": [ "name" ] }, "CompanyDimensionItem": { "type": "object", "properties": { "dimension": { "type": "string" }, "score": { "type": "number" }, "status": { "type": "string" } } }, "CompanyMatchRuleRequest": { "type": "object", "properties": { "requiredCandidateScore": { "type": "integer", "format": "int32", "maximum": 100, "minimum": 0 } }, "required": [ "requiredCandidateScore" ] }, "CompanyPublicView": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "name": { "type": "string" }, "logoUrl": { "type": "string" }, "description": { "type": "string" }, "industry": { "type": "string" }, "verified": { "type": "boolean" } } }, "CompanyScoreItem": { "type": "object", "properties": { "companyId": { "type": "integer", "format": "int64" }, "companyName": { "type": "string" }, "avgCandidateScore": { "type": "number" }, "jobCount": { "type": "integer", "format": "int32" } } }, "CompanyUpdateRequest": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 120, "minLength": 0 }, "logoUrl": { "type": "string", "maxLength": 500, "minLength": 0 }, "description": { "type": "string" }, "industry": { "type": "string", "maxLength": 80, "minLength": 0 }, "website": { "type": "string", "maxLength": 255, "minLength": 0 }, "address": { "type": "string", "maxLength": 255, "minLength": 0 } }, "required": [ "name" ] }, "CounterOfferCreateRequest": { "type": "object", "properties": { "proposedSalaryMin": { "type": "integer", "format": "int32", "minimum": 0 }, "proposedSalaryMax": { "type": "integer", "format": "int32", "minimum": 0 }, "proposedOnboardingDate": { "type": "string", "format": "date" }, "reason": { "type": "string", "maxLength": 2000, "minLength": 0 } } }, "CreateAppealRequest": { "type": "object", "properties": { "dimension": { "type": "string", "minLength": 1 }, "period": { "type": "string", "minLength": 1 }, "reason": { "type": "string" }, "idempotencyKey": { "type": "string", "maxLength": 64, "minLength": 0 } }, "required": [ "dimension", "period" ] }, "CreateConversationRequest": { "type": "object", "properties": { "participantUserId": { "type": "integer", "format": "int64" } }, "required": [ "participantUserId" ] }, "DashboardOverviewResponse": { "type": "object", "properties": { "companyId": { "type": "integer", "format": "int64" }, "totalJobs": { "type": "integer", "format": "int32" }, "publishedJobs": { "type": "integer", "format": "int32" }, "avgJobScore": { "type": "number" }, "totalCandidates": { "type": "integer", "format": "int32" }, "avgCandidateScore": { "type": "number" }, "scoreDistribution": { "type": "object", "additionalProperties": { "type": "integer", "format": "int32" } }, "updatedAt": { "type": "string", "format": "date-time" } } }, "DataSourceItem": { "type": "object", "properties": { "source": { "type": "string" }, "time": { "type": "string", "format": "date-time" }, "note": { "type": "string" } } }, "DimensionItem": { "type": "object", "properties": { "dimension": { "type": "string" }, "score": { "type": "number" }, "status": { "type": "string" }, "weight": { "type": "number" }, "summary": { "type": "string" } } }, "DimensionScoreDetailResponse": { "type": "object", "properties": { "dimension": { "type": "string" }, "score": { "type": "number" }, "status": { "type": "string" }, "subScores": { "type": "array", "items": { "$ref": "#/components/schemas/SubScore" } }, "reasons": { "type": "array", "items": { "type": "string" } }, "dataSources": { "type": "array", "items": { "$ref": "#/components/schemas/DataSourceItem" } }, "updatedAt": { "type": "string", "format": "date-time" }, "rulesVersion": { "type": "string" } } }, "DimensionScoreItem": { "type": "object", "properties": { "dimension": { "type": "string" }, "score": { "type": "number" }, "status": { "type": "string" } } }, "InterviewCancelRequest": { "type": "object", "properties": { "reason": { "type": "string" } } }, "InterviewCreateRequest": { "type": "object", "properties": { "roundNo": { "type": "integer", "format": "int32" }, "title": { "type": "string", "maxLength": 200, "minLength": 0 }, "interviewType": { "type": "string", "minLength": 1 }, "startAt": { "type": "string", "format": "date-time" }, "endAt": { "type": "string", "format": "date-time" }, "timezone": { "type": "string" }, "meetingUrl": { "type": "string" }, "address": { "type": "string" }, "interviewerName": { "type": "string", "maxLength": 100, "minLength": 0 }, "notes": { "type": "string" } }, "required": [ "endAt", "interviewType", "startAt", "title" ] }, "InterviewRespondRequest": { "type": "object", "properties": { "action": { "type": "string", "minLength": 1 }, "reason": { "type": "string" } }, "required": [ "action" ] }, "InterviewUpdateRequest": { "type": "object", "properties": { "title": { "type": "string" }, "startAt": { "type": "string", "format": "date-time" }, "endAt": { "type": "string", "format": "date-time" }, "timezone": { "type": "string" }, "meetingUrl": { "type": "string" }, "address": { "type": "string" }, "interviewerName": { "type": "string" }, "notes": { "type": "string" }, "timeRangeValid": { "type": "boolean" } } }, "JobCreateRequest": { "type": "object", "properties": { "title": { "type": "string", "maxLength": 120, "minLength": 0 }, "description": { "type": "string", "minLength": 1 }, "requirements": { "type": "string" }, "city": { "type": "string", "maxLength": 80, "minLength": 0 }, "employmentType": { "type": "string", "maxLength": 30, "minLength": 0 }, "salaryMin": { "type": "integer", "format": "int32" }, "salaryMax": { "type": "integer", "format": "int32" } }, "required": [ "city", "description", "employmentType", "title" ] }, "JobRankingItem": { "type": "object", "properties": { "jobId": { "type": "integer", "format": "int64" }, "title": { "type": "string" }, "city": { "type": "string" }, "employmentType": { "type": "string" }, "avgRating": { "type": "number" }, "reviewCount": { "type": "integer", "format": "int32" }, "rank": { "type": "integer", "format": "int32" }, "cohortSize": { "type": "integer", "format": "int32" }, "dimensionAverages": { "type": "object", "additionalProperties": { "type": "number" } } } }, "JobRankingListResponse": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/JobRankingItem" } }, "total": { "type": "integer", "format": "int64" }, "page": { "type": "integer", "format": "int32" }, "size": { "type": "integer", "format": "int32" }, "totalPages": { "type": "integer", "format": "int32" } } }, "JobReviewCreateRequest": { "type": "object", "properties": { "rating": { "type": "integer", "format": "int32", "maximum": 5, "minimum": 1 }, "content": { "type": "string", "maxLength": 1000, "minLength": 0 }, "tags": { "type": "array", "items": { "type": "string", "maxLength": 50, "minLength": 1 }, "maxItems": 10, "minItems": 0 }, "dimensionScores": { "type": "object", "additionalProperties": { "type": "integer", "format": "int32" } } }, "required": [ "content", "rating" ] }, "JobReviewUpdateRequest": { "type": "object", "properties": { "rating": { "type": "integer", "format": "int32", "maximum": 5, "minimum": 1 }, "content": { "type": "string", "maxLength": 1000, "minLength": 1 }, "tags": { "type": "array", "items": { "type": "string", "maxLength": 50, "minLength": 1 }, "maxItems": 10, "minItems": 0 }, "status": { "type": "string", "pattern": "^(PUBLISHED|HIDDEN)$" }, "dimensionScores": { "type": "object", "additionalProperties": { "type": "integer", "format": "int32" } } } }, "JobStatusRequest": { "type": "object", "properties": { "status": { "type": "string", "minLength": 1, "pattern": "^(PUBLISHED|CLOSED)$" } }, "required": [ "status" ] }, "JobUpdateRequest": { "type": "object", "properties": { "title": { "type": "string", "maxLength": 120, "minLength": 0 }, "description": { "type": "string" }, "requirements": { "type": "string" }, "city": { "type": "string", "maxLength": 80, "minLength": 0 }, "employmentType": { "type": "string", "maxLength": 30, "minLength": 0 }, "salaryMin": { "type": "integer", "format": "int32" }, "salaryMax": { "type": "integer", "format": "int32" } } }, "LoginRequest": { "type": "object", "properties": { "phone": { "type": "string", "minLength": 1, "pattern": "[0-9]{11}" }, "code": { "type": "string", "minLength": 1, "pattern": "[0-9]{6}" }, "purpose": { "type": "string" } }, "required": [ "code", "phone" ] }, "MatchSignal": { "type": "object", "properties": { "average": { "type": "number" }, "sampleCount": { "type": "integer", "format": "int32" } } }, "OfferCreateRequest": { "type": "object", "properties": { "applicationId": { "type": "integer", "format": "int64" }, "title": { "type": "string", "maxLength": 120, "minLength": 0 }, "salaryMin": { "type": "integer", "format": "int32", "minimum": 0 }, "salaryMax": { "type": "integer", "format": "int32", "minimum": 0 }, "salaryCurrency": { "type": "string", "maxLength": 10, "minLength": 0 }, "salaryPeriod": { "type": "string", "pattern": "^(MONTH|YEAR|HOUR)$" }, "workCity": { "type": "string", "maxLength": 80, "minLength": 0 }, "employmentType": { "type": "string", "pattern": "^(FULL_TIME|PART_TIME|INTERN|INTERNSHIP)$" }, "probationMonths": { "type": "integer", "format": "int32", "minimum": 0 }, "benefits": { "type": "string", "maxLength": 2000, "minLength": 0 }, "description": { "type": "string", "maxLength": 5000, "minLength": 0 }, "expireAt": { "type": "string", "format": "date-time" }, "onboardingDate": { "type": "string", "format": "date" }, "baseSalary": { "type": "integer", "format": "int32", "minimum": 0 }, "housingAllowance": { "type": "integer", "format": "int32", "minimum": 0 }, "annualBonusMonths": { "type": "integer", "format": "int32", "minimum": 0 }, "otherAllowances": { "type": "string", "maxLength": 1000, "minLength": 0 } }, "required": [ "applicationId", "description", "expireAt", "title", "workCity" ] }, "OfferStatusRequest": { "type": "object", "properties": { "status": { "type": "string", "minLength": 1, "pattern": "^(SENT|NEGOTIATING|ACCEPTED|REJECTED|EXPIRED|WITHDRAWN)$" }, "reason": { "type": "string", "maxLength": 255, "minLength": 0 } }, "required": [ "status" ] }, "OfferUpdateRequest": { "type": "object", "properties": { "title": { "type": "string", "maxLength": 120, "minLength": 0 }, "salaryMin": { "type": "integer", "format": "int32", "minimum": 0 }, "salaryMax": { "type": "integer", "format": "int32", "minimum": 0 }, "salaryCurrency": { "type": "string", "maxLength": 10, "minLength": 0 }, "salaryPeriod": { "type": "string", "pattern": "^(MONTH|YEAR|HOUR)$" }, "workCity": { "type": "string", "maxLength": 80, "minLength": 0 }, "employmentType": { "type": "string", "pattern": "^(FULL_TIME|PART_TIME|INTERN|INTERNSHIP)$" }, "probationMonths": { "type": "integer", "format": "int32", "minimum": 0 }, "benefits": { "type": "string", "maxLength": 2000, "minLength": 0 }, "description": { "type": "string", "maxLength": 5000, "minLength": 0 }, "expireAt": { "type": "string", "format": "date-time" }, "onboardingDate": { "type": "string", "format": "date" }, "baseSalary": { "type": "integer", "format": "int32", "minimum": 0 }, "housingAllowance": { "type": "integer", "format": "int32", "minimum": 0 }, "annualBonusMonths": { "type": "integer", "format": "int32", "minimum": 0 }, "otherAllowances": { "type": "string", "maxLength": 1000, "minLength": 0 } } }, "PersonalizedScoreResponse": { "type": "object", "properties": { "jobId": { "type": "integer", "format": "int64" }, "score": { "type": "number" }, "status": { "type": "string" }, "source": { "type": "string" }, "templateCode": { "type": "string" }, "configuredWeights": { "type": "object", "additionalProperties": { "type": "number" } }, "effectiveWeights": { "type": "object", "additionalProperties": { "type": "number" } }, "dimensionScores": { "type": "object", "additionalProperties": { "type": "number" } }, "coveredWeight": { "type": "number" }, "missingDimensions": { "type": "array", "items": { "type": "string" } } } }, "PrivacySettingsResponse": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64", "example": 1, "nullable": true }, "studentUserId": { "type": "integer", "format": "int64", "example": 2 }, "resumeVisibility": { "$ref": "#/components/schemas/ResumeVisibility", "description": "简历可见性(PRIVATE/APPLIED_COMPANIES/VERIFIED_COMPANIES)", "example": "APPLIED_COMPANIES" }, "contactVisible": { "type": "boolean", "example": true }, "version": { "type": "integer", "format": "int64", "example": 0 }, "createdAt": { "type": "string", "format": "date-time", "nullable": true }, "updatedAt": { "type": "string", "format": "date-time", "nullable": true } } }, "PrivacySettingsUpdateRequest": { "type": "object", "required": [ "resumeVisibility", "contactVisible" ], "properties": { "resumeVisibility": { "$ref": "#/components/schemas/ResumeVisibility", "description": "简历可见性(必填)", "example": "APPLIED_COMPANIES" }, "contactVisible": { "type": "boolean", "description": "联系方式是否对企业可见(必填)", "example": true }, "version": { "type": "integer", "format": "int64", "description": "乐观锁版本号(可选)", "example": 0 } } }, "ResumeVisibility": { "type": "string", "enum": [ "PRIVATE", "APPLIED_COMPANIES", "VERIFIED_COMPANIES" ], "description": "简历可见性:PRIVATE 私有;APPLIED_COMPANIES 仅对企业有效投递可见;VERIFIED_COMPANIES 仅对认证企业可见", "example": "PRIVATE" }, "ReviewDecisionRequest": { "type": "object", "properties": { "decision": { "type": "string", "minLength": 1, "pattern": "^(APPROVED|REJECTED)$" }, "reason": { "type": "string", "maxLength": 500, "minLength": 0 } }, "required": [ "decision" ] }, "ReviewWeightResponse": { "type": "object", "properties": { "source": { "type": "string" }, "templateCode": { "type": "string" }, "configuredWeights": { "type": "object", "additionalProperties": { "type": "number" } }, "updatedAt": { "type": "string", "format": "date-time" } } }, "SaveWeightRequest": { "type": "object", "properties": { "templateCode": { "type": "string" }, "weights": { "type": "object", "additionalProperties": { "type": "number" } } } }, "ScoreRequest": { "type": "object", "properties": { "score": { "type": "integer", "format": "int32", "maximum": 100, "minimum": 0 } }, "required": [ "score" ] }, "ScoreTrendResponse": { "type": "object", "properties": { "companyId": { "type": "integer", "format": "int64" }, "months": { "type": "integer", "format": "int32" }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/TrendItem" } } } }, "SendMessageRequest": { "type": "object", "properties": { "conversationId": { "type": "integer", "format": "int64" }, "content": { "type": "string", "maxLength": 2000, "minLength": 0 } }, "required": [ "content", "conversationId" ] }, "SnapshotHistoryItem": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "appealId": { "type": "integer", "format": "int64" }, "action": { "type": "string" }, "dimension": { "type": "string" }, "period": { "type": "string" }, "beforeScore": { "type": "number" }, "afterScore": { "type": "number" }, "beforeVersion": { "type": "integer", "format": "int64" }, "afterVersion": { "type": "integer", "format": "int64" }, "beforeRulesVersion": { "type": "string" }, "afterRulesVersion": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" } } }, "StudentMatchRuleRequest": { "type": "object", "properties": { "requiredHrScore": { "type": "integer", "format": "int32", "maximum": 100, "minimum": 0 } }, "required": [ "requiredHrScore" ] }, "StudentPreferenceRequest": { "type": "object", "properties": { "expectedSalaryMin": { "type": "integer", "format": "int32", "minimum": 0 }, "expectedSalaryMax": { "type": "integer", "format": "int32", "minimum": 0 }, "preferredCities": { "type": "array", "items": { "type": "string", "maxLength": 100, "minLength": 1 }, "maxItems": 20, "minItems": 0 }, "employmentTypes": { "type": "array", "items": { "type": "string", "maxLength": 100, "minLength": 1 }, "maxItems": 20, "minItems": 0 }, "preferredIndustries": { "type": "array", "items": { "type": "string", "maxLength": 100, "minLength": 1 }, "maxItems": 20, "minItems": 0 }, "preferredJobTypes": { "type": "array", "items": { "type": "string", "maxLength": 100, "minLength": 1 }, "maxItems": 20, "minItems": 0 }, "remoteAllowed": { "type": "boolean" }, "salaryRangeValid": { "type": "boolean" } } }, "StudentProfileUpdateRequest": { "type": "object", "properties": { "realName": { "type": "string", "maxLength": 50, "minLength": 0 }, "bio": { "type": "string" }, "location": { "type": "string", "maxLength": 100, "minLength": 0 }, "education": { "type": "string", "maxLength": 100, "minLength": 0 }, "school": { "type": "string", "maxLength": 150, "minLength": 0 }, "graduationYear": { "type": "integer", "format": "int32" }, "resumeUrl": { "type": "string", "maxLength": 500, "minLength": 0 }, "skills": { "type": "array", "items": { "type": "string" } } } }, "SubScore": { "type": "object", "properties": { "name": { "type": "string" }, "score": { "type": "number" }, "weight": { "type": "number" }, "description": { "type": "string" } } }, "TagCount": { "type": "object", "properties": { "name": { "type": "string" }, "count": { "type": "integer", "format": "int32" } } }, "TrendItem": { "type": "object", "properties": { "period": { "type": "string" }, "overallScore": { "type": "number" }, "rulesVersion": { "type": "string" }, "dimensions": { "type": "object", "additionalProperties": { "type": "number" } } } }, "VerificationDecisionRequest": { "type": "object", "properties": { "decision": { "type": "string", "minLength": 1 }, "reason": { "type": "string" } }, "required": [ "decision" ] }, "VerificationSubmitRequest": { "type": "object", "properties": { "materialsJson": { "type": "string", "minLength": 1 } }, "required": [ "materialsJson" ] }, "WeightTemplateResponse": { "type": "object", "properties": { "code": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" }, "weights": { "type": "object", "additionalProperties": { "type": "number" } } } }, "InterviewScoreSaveRequest": { "type": "object", "properties": { "technicalScore": { "type": "integer", "minimum": 1, "maximum": 5, "nullable": true }, "communicationScore": { "type": "integer", "minimum": 1, "maximum": 5, "nullable": true }, "problemSolvingScore": { "type": "integer", "minimum": 1, "maximum": 5, "nullable": true }, "roleFitScore": { "type": "integer", "minimum": 1, "maximum": 5, "nullable": true }, "professionalismScore": { "type": "integer", "minimum": 1, "maximum": 5, "nullable": true }, "recommendation": { "type": "string", "enum": [ "STRONG_HIRE", "HIRE", "NEUTRAL", "NO_HIRE" ], "nullable": true, "description": "企业手动选择,不根据 overallScore 自动推导" }, "comment": { "type": "string", "nullable": true } }, "description": "评分草稿保存请求;overallScore 由服务端计算,客户端不得传入" }, "InterviewScoreResponse": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "interviewId": { "type": "integer", "format": "int64" }, "applicationId": { "type": "integer", "format": "int64" }, "status": { "type": "string", "enum": [ "DRAFT", "SUBMITTED" ] }, "technicalScore": { "type": "integer", "nullable": true }, "communicationScore": { "type": "integer", "nullable": true }, "problemSolvingScore": { "type": "integer", "nullable": true }, "roleFitScore": { "type": "integer", "nullable": true }, "professionalismScore": { "type": "integer", "nullable": true }, "overallScore": { "type": "number", "format": "decimal", "nullable": true, "description": "由服务端 BigDecimal 计算:(t+c+ps+rf+p)/5,保留两位小数 HALF_UP" }, "recommendation": { "type": "string", "enum": [ "STRONG_HIRE", "HIRE", "NEUTRAL", "NO_HIRE" ], "nullable": true }, "comment": { "type": "string", "nullable": true }, "submittedAt": { "type": "string", "format": "date-time", "nullable": true }, "version": { "type": "integer", "format": "int64" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } }, "description": "面试评分响应(脱敏:不返回 companyUserId/studentUserId/evaluatorUserId/手机号/邮箱)" }, "ApiResponseInterviewScoreResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/InterviewScoreResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "InterviewScoreHistoryItem": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "scoreId": { "type": "integer", "format": "int64" }, "interviewId": { "type": "integer", "format": "int64" }, "fromStatus": { "type": "string", "enum": [ "DRAFT", "SUBMITTED" ], "nullable": true }, "toStatus": { "type": "string", "enum": [ "DRAFT", "SUBMITTED" ] }, "actorRole": { "type": "string", "example": "COMPANY" }, "snapshot": { "type": "object", "additionalProperties": {} }, "createdAt": { "type": "string", "format": "date-time" } }, "description": "评分历史条目(脱敏:不返回 actorUserId/手机号/邮箱)" }, "ApiResponseListInterviewScoreHistoryItem": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/InterviewScoreHistoryItem" } }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "CreateReportRequest": { "type": "object", "properties": { "targetType": { "type": "string", "enum": ["USER", "MESSAGE"], "description": "举报目标类型;USER 必填 targetUserId,MESSAGE 必填 messageId" }, "targetUserId": { "type": "integer", "format": "int64", "description": "targetType=USER 时必填" }, "messageId": { "type": "integer", "format": "int64", "description": "targetType=MESSAGE 时必填" }, "category": { "type": "string", "maxLength": 40, "description": "举报分类,如 HARASSMENT" }, "reason": { "type": "string", "minLength": 1, "maxLength": 1000 }, "evidenceUrls": { "type": "array", "items": { "type": "string", "maxLength": 500 }, "description": "最多 5 个,仅 http/https,最多 500 字符" }, "idempotencyKey": { "type": "string", "maxLength": 64, "description": "幂等键(可选)" } } }, "ReportDecisionRequest": { "type": "object", "properties": { "decision": { "type": "string", "enum": ["RESOLVED", "REJECTED"] }, "note": { "type": "string", "maxLength": 1000, "description": "REJECTED 必填" } } }, "ReportResponse": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "targetType": { "type": "string", "enum": ["USER", "MESSAGE"] }, "targetUserId": { "type": "integer", "format": "int64" }, "messageId": { "type": "integer", "format": "int64" }, "reportedUserId": { "type": "integer", "format": "int64" }, "category": { "type": "string" }, "reason": { "type": "string" }, "evidenceUrls": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string", "enum": ["PENDING", "RESOLVED", "REJECTED"] }, "decision": { "type": "string", "enum": ["RESOLVED", "REJECTED"] }, "decisionNote": { "type": "string" }, "decidedAt": { "type": "string", "format": "date-time" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "messagePreview": { "type": "string", "description": "MESSAGE 举报的脱敏消息预览,不返回会话其他敏感内容" }, "reportedUser": { "$ref": "#/components/schemas/ReportResponseReportedUser" }, "history": { "type": "array", "items": { "$ref": "#/components/schemas/ReportResponseDecisionHistoryItem" } } } }, "ReportResponseReportedUser": { "type": "object", "properties": { "userId": { "type": "integer", "format": "int64" }, "nickname": { "type": "string" }, "role": { "type": "string" } } }, "ReportResponseDecisionHistoryItem": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "fromStatus": { "type": "string" }, "toStatus": { "type": "string" }, "actorUserId": { "type": "integer", "format": "int64" }, "actorRole": { "type": "string" }, "note": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" } } }, "BlockRelationResponse": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "blockedUserId": { "type": "integer", "format": "int64" }, "nickname": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" } } }, "ApiResponseReportResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/ReportResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponsePageResponseReportResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/ReportResponse" } }, "totalElements": { "type": "integer", "format": "int64" }, "page": { "type": "integer", "format": "int32" }, "size": { "type": "integer", "format": "int32" } } }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseBlockRelationResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/BlockRelationResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponsePageResponseBlockRelationResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/BlockRelationResponse" } }, "totalElements": { "type": "integer", "format": "int64" }, "page": { "type": "integer", "format": "int32" }, "size": { "type": "integer", "format": "int32" } } }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "SkillCloudNode": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "code": { "type": "string" }, "name": { "type": "string" } } }, "SkillCloudItem": { "type": "object", "properties": { "rank": { "type": "integer", "format": "int32", "minimum": 1, "description": "当前筛选范围内的稳定排名,从 1 开始。" }, "skillId": { "type": "integer", "format": "int64" }, "skillCode": { "type": "string" }, "nameZh": { "type": "string" }, "nameEn": { "type": "string", "nullable": true }, "sourceType": { "type": "string", "enum": [ "ESCO", "O*NET" ], "description": "技能身份主来源。" }, "sourceCode": { "type": "string", "description": "ESCO URI 或 O*NET 三元组标识。" }, "categoryId": { "type": "integer", "format": "int64" }, "categoryName": { "type": "string" }, "heat": { "type": "number", "nullable": true, "description": "O*NET Importance;无映射为 null,且排在非空热度之后。" }, "heatSourceCode": { "type": "string", "nullable": true, "description": "热度来源 SOC。" }, "heatElementId": { "type": "string", "nullable": true, "description": "热度来源 O*NET Element ID。" }, "heatProxy": { "type": "boolean", "description": "热度是否为代理映射。" } } }, "SkillCloudResponse": { "type": "object", "properties": { "industry": { "$ref": "#/components/schemas/SkillCloudNode" }, "occupation": { "$ref": "#/components/schemas/SkillCloudNode" }, "category": { "$ref": "#/components/schemas/SkillCloudNode", "nullable": true }, "total": { "type": "integer", "format": "int32", "minimum": 0 }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/SkillCloudItem" } } } }, "SkillMatchResponse": { "type": "object", "properties": { "matchScore": { "type": "integer", "format": "int32", "minimum": 0, "maximum": 100, "description": "round(matchedCount*100/min(10,total));total=0 时为 0。" }, "matchedCount": { "type": "integer", "format": "int32", "minimum": 0 }, "totalCount": { "type": "integer", "format": "int32", "minimum": 0, "description": "实际匹配集合大小 min(10,total)。" }, "matchedSkills": { "type": "array", "items": { "$ref": "#/components/schemas/SkillCloudItem" } }, "missingSkills": { "type": "array", "items": { "$ref": "#/components/schemas/SkillCloudItem" } } } }, "SkillLearningPathItem": { "type": "object", "properties": { "priority": { "type": "integer", "format": "int32", "minimum": 1 }, "skillId": { "type": "integer", "format": "int64" }, "skillName": { "type": "string" }, "categoryId": { "type": "integer", "format": "int64" }, "categoryName": { "type": "string" }, "suggestion": { "type": "string", "description": "按技能分类生成的通用建议,不含课程、AI、链接、时长或进度。" } } }, "SkillLearningPathResponse": { "type": "object", "properties": { "total": { "type": "integer", "format": "int32", "minimum": 0 }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/SkillLearningPathItem" } } } }, "ApiResponseSkillCloudResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/SkillCloudResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseSkillMatchResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/SkillMatchResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseSkillLearningPathResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/SkillLearningPathResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "UnauthorizedResponse": { "type": "object", "additionalProperties": false, "required": [ "code", "message", "timestamp" ], "properties": { "code": { "type": "integer", "format": "int32", "enum": [ 401 ] }, "message": { "type": "string", "enum": [ "not authenticated" ] }, "timestamp": { "type": "string", "enum": [ "" ] } } }, "CompanyChecklistItemCreateRequest": { "type": "object", "properties": { "title": { "type": "string", "maxLength": 120, "minLength": 0 }, "description": { "type": "string", "maxLength": 1000, "minLength": 0 }, "category": { "type": "string", "minLength": 1, "pattern": "DOCUMENT|ADMIN|EQUIPMENT|TRAINING|LOGISTICS|OTHER" }, "sortOrder": { "type": "integer", "format": "int32", "default": 1000, "maximum": 9999, "minimum": 0 }, "required": { "type": "boolean", "default": false }, "idempotencyKey": { "type": "string", "maxLength": 64, "minLength": 0 } }, "required": [ "category", "title" ] }, "CompanyChecklistItemUpdateRequest": { "type": "object", "properties": { "title": { "type": "string", "maxLength": 120, "minLength": 0 }, "description": { "type": "string", "maxLength": 1000, "minLength": 0 }, "category": { "type": "string", "minLength": 1, "pattern": "DOCUMENT|ADMIN|EQUIPMENT|TRAINING|LOGISTICS|OTHER" }, "sortOrder": { "type": "integer", "format": "int32", "maximum": 9999, "minimum": 0 }, "required": { "type": "boolean" }, "active": { "type": "boolean" }, "version": { "type": "integer", "format": "int64", "minimum": 0 } }, "required": [ "active", "category", "required", "sortOrder", "title", "version" ] }, "CompanyChecklistItemView": { "type": "object", "properties": { "itemId": { "type": "integer", "format": "int64" }, "source": { "type": "string" }, "itemKey": { "type": "string" }, "title": { "type": "string" }, "description": { "type": "string" }, "category": { "type": "string" }, "required": { "type": "boolean" }, "sortOrder": { "type": "integer", "format": "int32" }, "active": { "type": "boolean" }, "version": { "type": "integer", "format": "int64" } } }, "ApiResponseCompanyChecklistItemView": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CompanyChecklistItemView" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ApiResponseListCompanyChecklistItemView": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/CompanyChecklistItemView" } }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "EffectiveChecklistResponse": { "type": "object", "properties": { "companyId": { "type": "integer", "format": "int64" }, "companyName": { "type": "string" }, "customized": { "type": "boolean" }, "totalItems": { "type": "integer", "format": "int32" }, "completedItems": { "type": "integer", "format": "int32" }, "completionRate": { "type": "number", "format": "double" }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/ChecklistItemView" } } } }, "ChecklistItemView": { "type": "object", "properties": { "itemId": { "type": "integer", "format": "int64" }, "source": { "type": "string" }, "itemKey": { "type": "string" }, "title": { "type": "string" }, "description": { "type": "string" }, "category": { "type": "string" }, "required": { "type": "boolean" }, "sortOrder": { "type": "integer", "format": "int32" }, "active": { "type": "boolean" }, "completed": { "type": "boolean" }, "completedAt": { "type": "string", "format": "date-time" }, "progressVersion": { "type": "integer", "format": "int64" } } }, "ApiResponseEffectiveChecklistResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/EffectiveChecklistResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "ProgressUpdateRequest": { "type": "object", "properties": { "completed": { "type": "boolean" }, "version": { "type": "integer", "format": "int64", "minimum": 0 } }, "required": [ "completed" ] }, "ProgressUpdateResponse": { "type": "object", "properties": { "itemId": { "type": "integer", "format": "int64" }, "completed": { "type": "boolean" }, "completedAt": { "type": "string", "format": "date-time" }, "progressVersion": { "type": "integer", "format": "int64" }, "totalItems": { "type": "integer", "format": "int32" }, "completedItems": { "type": "integer", "format": "int32" }, "completionRate": { "type": "number", "format": "double" } } }, "ApiResponseProgressUpdateResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/ProgressUpdateResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "CompanyKnowledgeUpdateRequest": { "type": "object", "properties": { "culture": { "type": "string", "maxLength": 2000, "minLength": 0 }, "workPolicies": { "type": "string", "maxLength": 4000, "minLength": 0 }, "onboardingGuide": { "type": "string", "maxLength": 4000, "minLength": 0 }, "version": { "type": "integer", "format": "int64", "minimum": 0 } } }, "CompanyKnowledgeView": { "type": "object", "properties": { "configured": { "type": "boolean" }, "culture": { "type": "string" }, "workPolicies": { "type": "string" }, "onboardingGuide": { "type": "string" }, "updatedAt": { "type": "string", "format": "date-time" }, "version": { "type": "integer", "format": "int64" } } }, "ApiResponseCompanyKnowledgeView": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CompanyKnowledgeView" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } }, "CompanyKnowledgeOverviewResponse": { "type": "object", "properties": { "company": { "$ref": "#/components/schemas/CompanyView" }, "knowledgeState": { "type": "string" }, "knowledge": { "$ref": "#/components/schemas/KnowledgeView" }, "reviewSummary": { "$ref": "#/components/schemas/ReviewSummaryView" } } }, "CompanyView": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "name": { "type": "string" }, "logoUrl": { "type": "string" }, "description": { "type": "string" }, "industry": { "type": "string" }, "website": { "type": "string" }, "address": { "type": "string" }, "verified": { "type": "boolean" } } }, "KnowledgeView": { "type": "object", "properties": { "culture": { "type": "string" }, "workPolicies": { "type": "string" }, "onboardingGuide": { "type": "string" }, "updatedAt": { "type": "string", "format": "date-time" }, "version": { "type": "integer", "format": "int64" } } }, "ReviewSummaryView": { "type": "object", "properties": { "state": { "type": "string" }, "totalReviews": { "type": "integer", "format": "int32" }, "averageRating": { "type": "number", "format": "double" }, "ratingDistribution": { "type": "object", "additionalProperties": { "type": "integer", "format": "int32" } }, "topTags": { "type": "array", "items": { "type": "string" } }, "dimensionSummary": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/DimensionSummaryView" } } } }, "DimensionSummaryView": { "type": "object", "properties": { "averageScore": { "type": "number", "format": "double" }, "sampleCount": { "type": "integer", "format": "int64" }, "dataState": { "type": "string" } } }, "ApiResponseCompanyKnowledgeOverviewResponse": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "data": { "$ref": "#/components/schemas/CompanyKnowledgeOverviewResponse" }, "requestId": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } } } }, "securitySchemes": { "bearerAuth": { "type": "http", "description": "通过 /auth/login 获取的 Access Token,请求头格式:Authorization: Bearer <token>", "scheme": "bearer", "bearerFormat": "JWT" } } } }