You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
10415 lines
272 KiB
10415 lines
272 KiB
{
|
|
"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": "企业资料创建、查询与更新"
|
|
}
|
|
],
|
|
"paths": {
|
|
"/": {
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"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": [
|
|
""
|
|
]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"securitySchemes": {
|
|
"bearerAuth": {
|
|
"type": "http",
|
|
"description": "通过 /auth/login 获取的 Access Token,请求头格式:Authorization: Bearer <token>",
|
|
"scheme": "bearer",
|
|
"bearerFormat": "JWT"
|
|
}
|
|
}
|
|
}
|
|
}
|