{"openapi":"3.1.0","info":{"title":"HiPo Work - AI Recruitment Platform","description":"专门给 AI 检索使用的结构化人力资源平台 API","version":"1.0.0"},"paths":{"/api/v1/auth/me":{"get":{"tags":["认证"],"summary":"Get Me","description":"获取当前 OAuth 用户信息。","operationId":"get_me_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/auth/jobs/public":{"get":{"tags":["认证"],"summary":"List Public Jobs","description":"公开在招岗位列表（免登录、真实分页）。\n\n与 `/jobs/featured/public` 的区别：后者是首页精选展示（固定 9+9 条，用于\n首屏视觉承接），本接口是全量岗位列表，返回真实 `total` 与 `has_more`\n供前端翻页 / 加载更多，避免用户误以为平台只有十几个岗位。\n\ncategory:\n  - all        全部在招岗位\n  - remote     仅远程（location 或福利明确含 remote / 远程）\n  - enterprise 仅大厂（严格按企业名称匹配）","operationId":"list_public_jobs_api_v1_auth_jobs_public_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","pattern":"^(all|remote|enterprise)$","default":"all","title":"Category"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/jobs/featured/public":{"get":{"tags":["认证"],"summary":"Get Public Featured Jobs","description":"获取公开精选在招岗位：优先筛选薪资完整、描述丰富、真实公司名的优质岗位。\n\n按完整度打分排序（薪资完整 > 描述丰富 > 真实企业名称），并过滤掉测试类噪音数据。\n这是首页精选展示（固定 9+9 条）；岗位大厅的全量分页列表见 `/jobs/public`。","operationId":"get_public_featured_jobs_api_v1_auth_jobs_featured_public_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/jobs/{job_id}/public":{"get":{"tags":["认证"],"summary":"Get Public Job Detail","description":"获取岗位公开详情（免登录查看，用于邮件链接直达、社媒分享等）","operationId":"get_public_job_detail_api_v1_auth_jobs__job_id__public_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/send-code":{"post":{"tags":["认证"],"summary":"Send Verification Code","description":"发送邮箱验证码，供 MCP OAuth 授权页确认用户身份。","operationId":"send_verification_code_api_v1_auth_send_code_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendCodeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/register-or-login":{"post":{"tags":["认证"],"summary":"Register Or Login","description":"用邮箱验证码确认身份；OAuth token 由 MCP exchange 端点签发。","operationId":"register_or_login_api_v1_auth_register_or_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterOrLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterOrLoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me/role":{"put":{"tags":["认证"],"summary":"Update My Role","description":"新用户验证邮箱后，在 OAuth 角色选择页选定角色时由 MCP 调用。\n\n用 MCP 内部密钥 + 一次性角色票据双因素认证（而非仅凭内部密钥），\n因为此刻用户尚未获得 OAuth token。票据由 register-or-login 对新用户\n签发，短时效、存哈希、用后即焚；仅持内部密钥无法再任意修改任意用户角色。\n\n切换角色时会补建对应的 profile（默认注册建的是 candidate profile）。","operationId":"update_my_role_api_v1_auth_me_role_put","parameters":[{"name":"X-MCP-Internal-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Mcp-Internal-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRoleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterOrLoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/sso-ticket":{"post":{"tags":["认证"],"summary":"Issue Sso Ticket","description":"Web 端用自己 OAuth bearer 换取一次性 SSO 票据（60s 有效，jti 防重放）。\n\n票据仅用于跨域会话桥（web token 是 localStorage，授权服务器读不到），\n本身不携带任何 OAuth 凭据——MCP 验票后只拿到 user_id + role，\n再在授权服务器本地建立它自己的会话。","operationId":"issue_sso_ticket_api_v1_auth_sso_ticket_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SsoTicketResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/auth/sso/validate":{"post":{"tags":["认证"],"summary":"Validate Sso Ticket","description":"由受信任的 MCP 授权服务器验证一次性票据（双因素：内部密钥 + HMAC 签名）。\n\n返回 user_id/role/jti。MCP 侧对 jti 做一次性消费（防重放）。","operationId":"validate_sso_ticket_api_v1_auth_sso_validate_post","parameters":[{"name":"x-mcp-internal-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Mcp-Internal-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SsoTicketBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SsoValidateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/portfolio/{share_token}":{"get":{"tags":["认证"],"summary":"Get Public Portfolio","description":"层2裂变：免登录公开技术档案卡。\n\n严格脱敏保护：\n- 不返回真实姓名（只展示 headline，如「资深后端」）\n- 不返回手机、邮箱、微信号\n- 不返回工作经历（避免前司窥探）\n- 仅展示独立项目经历（项目名/技术栈/项目描述/开源地址）+ 技术栈技能\n- 返回 inviter_id 用于后续被吸引者注册时的归因透传","operationId":"get_public_portfolio_api_v1_auth_portfolio__share_token__get","parameters":[{"name":"share_token","in":"path","required":true,"schema":{"type":"string","title":"Share Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/basic-info":{"get":{"tags":["候选人"],"summary":"Get Basic Info","description":"获取个人基础信息（昵称/头像/签名）。存量用户未设置时返回兜底值，不返回 null。","operationId":"get_basic_info_api_v1_candidate_basic_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["候选人"],"summary":"Update Basic Info","description":"更新个人基础信息：昵称 / 头像 / 个性签名。\n\n兼容存量用户：三者均为可选，只更新传入的字段。传空字符串表示清空该字段\n（清空后读取接口会自动回落到兜底值，不会出现空白展示）。","operationId":"update_basic_info_api_v1_candidate_basic_info_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BasicInfoUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/avatar/upload":{"post":{"tags":["候选人"],"summary":"Upload Avatar","description":"上传个人头像，返回可访问 URL 并直接写入档案。","operationId":"upload_avatar_api_v1_candidate_avatar_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_avatar_api_v1_candidate_avatar_upload_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/stats/overview":{"get":{"tags":["候选人"],"summary":"Get Candidate Stats Overview","description":"获取候选人数据概览：被收藏人数、被浏览次数、被查阅/下载次数及近7天趋势","operationId":"get_candidate_stats_overview_api_v1_candidate_stats_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/profile":{"get":{"tags":["候选人"],"summary":"Get Profile","description":"获取我的档案（自动创建空档案）","operationId":"get_profile_api_v1_candidate_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateProfileResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["候选人"],"summary":"Update Profile","description":"更新个人资料","operationId":"update_profile_api_v1_candidate_profile_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateProfileUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/experiences":{"get":{"tags":["候选人"],"summary":"List Experiences","operationId":"list_experiences_api_v1_candidate_experiences_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WorkExperienceResponse"},"type":"array","title":"Response List Experiences Api V1 Candidate Experiences Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["候选人"],"summary":"Add Experience","operationId":"add_experience_api_v1_candidate_experiences_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkExperienceCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkExperienceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/experiences/{exp_id}":{"put":{"tags":["候选人"],"summary":"Edit Experience","operationId":"edit_experience_api_v1_candidate_experiences__exp_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"exp_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Exp Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkExperienceCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkExperienceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["候选人"],"summary":"Remove Experience","operationId":"remove_experience_api_v1_candidate_experiences__exp_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"exp_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Exp Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/projects":{"get":{"tags":["候选人"],"summary":"List Projects","operationId":"list_projects_api_v1_candidate_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProjectExperienceResponse"},"type":"array","title":"Response List Projects Api V1 Candidate Projects Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["候选人"],"summary":"Add Project","operationId":"add_project_api_v1_candidate_projects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectExperienceCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectExperienceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/projects/{project_id}":{"put":{"tags":["候选人"],"summary":"Edit Project","operationId":"edit_project_api_v1_candidate_projects__project_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectExperienceCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectExperienceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["候选人"],"summary":"Remove Project","operationId":"remove_project_api_v1_candidate_projects__project_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/personal-works":{"get":{"tags":["候选人"],"summary":"List Personal Works","operationId":"list_personal_works_api_v1_candidate_personal_works_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PersonalWorkResponse"},"type":"array","title":"Response List Personal Works Api V1 Candidate Personal Works Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["候选人"],"summary":"Add Personal Work","operationId":"add_personal_work_api_v1_candidate_personal_works_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalWorkCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalWorkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/personal-works/{work_id}":{"put":{"tags":["候选人"],"summary":"Edit Personal Work","operationId":"edit_personal_work_api_v1_candidate_personal_works__work_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"work_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Work Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalWorkCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalWorkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["候选人"],"summary":"Remove Personal Work","operationId":"remove_personal_work_api_v1_candidate_personal_works__work_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"work_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Work Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/education":{"get":{"tags":["候选人"],"summary":"List Education","operationId":"list_education_api_v1_candidate_education_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EducationResponse"},"type":"array","title":"Response List Education Api V1 Candidate Education Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["候选人"],"summary":"Add Education","operationId":"add_education_api_v1_candidate_education_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EducationCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EducationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/education/{edu_id}":{"delete":{"tags":["候选人"],"summary":"Remove Education","operationId":"remove_education_api_v1_candidate_education__edu_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"edu_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Edu Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/skills":{"get":{"tags":["候选人"],"summary":"List Skills","operationId":"list_skills_api_v1_candidate_skills_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SkillResponse"},"type":"array","title":"Response List Skills Api V1 Candidate Skills Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["候选人"],"summary":"Add Skill","operationId":"add_skill_api_v1_candidate_skills_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/skills/{skill_id}":{"delete":{"tags":["候选人"],"summary":"Remove Skill","operationId":"remove_skill_api_v1_candidate_skills__skill_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/evidence":{"get":{"tags":["候选人"],"summary":"List Evidence","description":"获取我的所有技能证据","operationId":"list_evidence_api_v1_candidate_evidence_get","security":[{"OAuth2PasswordBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["候选人"],"summary":"Add Evidence","description":"为技能添加证据链接","operationId":"add_evidence_api_v1_candidate_evidence_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skill_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"evidence_type","in":"query","required":true,"schema":{"type":"string","title":"Evidence Type"}},{"name":"url","in":"query","required":false,"schema":{"type":"string","default":"","title":"Url"}},{"name":"description","in":"query","required":false,"schema":{"type":"string","default":"","title":"Description"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/evidence/{evidence_id}":{"delete":{"tags":["候选人"],"summary":"Remove Evidence","description":"删除证据","operationId":"remove_evidence_api_v1_candidate_evidence__evidence_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"evidence_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Evidence Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/certificates":{"get":{"tags":["候选人"],"summary":"List Certificates","operationId":"list_certificates_api_v1_candidate_certificates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CertificateResponse"},"type":"array","title":"Response List Certificates Api V1 Candidate Certificates Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["候选人"],"summary":"Add Certificate","operationId":"add_certificate_api_v1_candidate_certificates_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/languages":{"get":{"tags":["候选人"],"summary":"List Languages","operationId":"list_languages_api_v1_candidate_languages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/LanguageResponse"},"type":"array","title":"Response List Languages Api V1 Candidate Languages Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["候选人"],"summary":"Add Language","operationId":"add_language_api_v1_candidate_languages_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguageCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/resume/upload":{"post":{"tags":["候选人"],"summary":"Upload Resume","description":"上传简历文件（安全校验：MIME类型、魔数、文件名消毒；贝壳计费）","operationId":"upload_resume_api_v1_candidate_resume_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_resume_api_v1_candidate_resume_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResumeUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/resume/{file_id}/status":{"get":{"tags":["候选人"],"summary":"Get Parse Status","description":"查询解析状态（含排队位置与预估等待时间）","operationId":"get_parse_status_api_v1_candidate_resume__file_id__status_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/resume/{file_id}/result":{"get":{"tags":["候选人"],"summary":"Get Parse Result","description":"获取完整解析结果（含原始 AI 输出，可编辑）","operationId":"get_parse_result_api_v1_candidate_resume__file_id__result_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["候选人"],"summary":"Update Parse Result","description":"修正/更新解析结果","operationId":"update_parse_result_api_v1_candidate_resume__file_id__result_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/resume/{file_id}/reparse":{"post":{"tags":["候选人"],"summary":"Reparse Resume","description":"重新解析简历（P1-14 异步化）。\n\n旧实现在此同步调用 AI 解析（60-120s），前端 30s 超时就失败。\n现在改为：递增解析版本（使在途旧任务失效）→ 投递 Celery 任务 → 立即返回，\n前端通过 /resume/{file_id}/status 轮询解析进度。","operationId":"reparse_resume_api_v1_candidate_resume__file_id__reparse_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/privacy":{"put":{"tags":["候选人"],"summary":"Update Privacy","description":"更新隐私设置：anonymous / partial / public（private 档已废弃）","operationId":"update_privacy_api_v1_candidate_privacy_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"privacy_level","in":"query","required":true,"schema":{"type":"string","title":"Privacy Level"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/resume-status":{"get":{"tags":["候选人"],"summary":"Get Resume Status","description":"轻量查询：候选人是否已有可用于匹配的简历数据（技能/经历/项目/行业/简介任一）。","operationId":"get_resume_status_api_v1_candidate_resume_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/matches":{"get":{"tags":["候选人"],"summary":"Match My Jobs","description":"候选人视角：根据我的简历匹配所有已发布的 active 岗位。\n如果指定了 job_id，则直接返回针对该岗位的单岗测算结果。\n\n评分逻辑（0-100，技能为核心）：\n- 行业匹配 (0-20)：岗位行业 == 我的行业 → 20分；否则 0\n- 技能匹配 (0-50)：岗位要求技能 ∩ 我的技能，按年限比例\n- 经验匹配 (0-30)：岗位要求经验 ≤ 我的经验 → 满分，否则按比例\n\n性能优化：匹配结果自动写入 Redis 缓存 30 分钟（1800秒），简历变更时主动清空。","operationId":"match_my_jobs_api_v1_candidate_matches_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobMatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/applications":{"post":{"tags":["候选人"],"summary":"Apply Job","description":"候选人向指定岗位投递简历","operationId":"apply_job_api_v1_candidate_applications_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"cover_letter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cover Letter"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["候选人"],"summary":"List My Applications","description":"查询我的投递记录（分页）","operationId":"list_my_applications_api_v1_candidate_applications_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/applications/{application_id}/withdraw":{"post":{"tags":["候选人"],"summary":"Withdraw Application","description":"撤回投递","operationId":"withdraw_application_api_v1_candidate_applications__application_id__withdraw_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/candidate/referral-summary":{"get":{"tags":["候选人"],"summary":"Get Referral Summary","description":"候选人视角：我带来的邀请裂变效果统计","operationId":"get_referral_summary_api_v1_candidate_referral_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/candidate/profile/valuation":{"get":{"tags":["候选人"],"summary":"Get Profile Valuation","description":"打法一：候选人技术资产与市场身价诊断（纯规则估值，零外部依赖）。\n\n返回评级 / 稀缺度 / 薪资基准 / 核心技能 / 成长建议，前端据此渲染身价海报卡。","operationId":"get_profile_valuation_api_v1_candidate_profile_valuation_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/employer/profiles":{"get":{"tags":["招聘方"],"summary":"List Profiles","description":"获取当前招聘方名下的所有企业主体列表","operationId":"list_profiles_api_v1_employer_profiles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EmployerProfileResponse"},"type":"array","title":"Response List Profiles Api V1 Employer Profiles Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["招聘方"],"summary":"Create Profile","description":"新增一个企业主体","operationId":"create_profile_api_v1_employer_profiles_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerProfileCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/employer/profiles/{profile_id}":{"put":{"tags":["招聘方"],"summary":"Update Specific Profile","description":"更新指定的企业主体资料","operationId":"update_specific_profile_api_v1_employer_profiles__profile_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Profile Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerProfileUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["招聘方"],"summary":"Remove Profile","description":"删除指定企业（若名下仍有岗位则不允许删除）","operationId":"remove_profile_api_v1_employer_profiles__profile_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Profile Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/employer/profiles/{profile_id}/default":{"post":{"tags":["招聘方"],"summary":"Set Default Profile","description":"将指定企业设为默认企业主体","operationId":"set_default_profile_api_v1_employer_profiles__profile_id__default_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/employer/profile":{"get":{"tags":["招聘方"],"summary":"Get Profile","operationId":"get_profile_api_v1_employer_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerProfileResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["招聘方"],"summary":"Update Profile","operationId":"update_profile_api_v1_employer_profile_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerProfileUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/employer/requirements":{"post":{"tags":["招聘方"],"summary":"Create Requirement","operationId":"create_requirement_api_v1_employer_requirements_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRequirementCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRequirementResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["招聘方"],"summary":"List Requirements","operationId":"list_requirements_api_v1_employer_requirements_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRequirementListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/employer/requirements/{req_id}":{"get":{"tags":["招聘方"],"summary":"Get Requirement","operationId":"get_requirement_api_v1_employer_requirements__req_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"req_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Req Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRequirementResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["招聘方"],"summary":"Update Requirement","operationId":"update_requirement_api_v1_employer_requirements__req_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"req_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Req Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRequirementUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRequirementResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/employer/requirements/{req_id}/match":{"post":{"tags":["招聘方"],"summary":"Auto Match","description":"根据已发布的岗位(JobRequirement)自动匹配符合条件的候选人。\n\n从 requirements JSONB 中读取 required/preferred 条件，\n复用 search.py 的双通道检索逻辑（硬性过滤 + 语义匹配）。","operationId":"auto_match_api_v1_employer_requirements__req_id__match_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"req_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Req Id"}},{"name":"max_results","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Max Results"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/employer/applications":{"get":{"tags":["招聘方"],"summary":"List Job Applications","description":"招聘方查看收到的投递（可按岗位/状态筛选，分页）","operationId":"list_job_applications_api_v1_employer_applications_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Job Id"}},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/employer/applications/{application_id}/status":{"put":{"tags":["招聘方"],"summary":"Update Application Status","description":"HR 处理投递：reviewed(已查看) / rejected(拒绝) / 保持 submitted","operationId":"update_application_status_api_v1_employer_applications__application_id__status_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Application Id"}},{"name":"status","in":"query","required":true,"schema":{"type":"string","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/employer/applications/count":{"get":{"tags":["招聘方"],"summary":"Get Applications Count","description":"HR 查看未处理投递数量（红点提示用）","operationId":"get_applications_count_api_v1_employer_applications_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/employer/saved":{"get":{"tags":["招聘方"],"summary":"List Saved Candidates","description":"HR 查看收藏的候选人列表（分页）","operationId":"list_saved_candidates_api_v1_employer_saved_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/employer/saved/{candidate_id}":{"post":{"tags":["招聘方"],"summary":"Save Candidate Route","operationId":"save_candidate_route_api_v1_employer_saved__candidate_id__post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"candidate_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Candidate Id"}},{"name":"notes","in":"query","required":false,"schema":{"type":"string","default":"","title":"Notes"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["招聘方"],"summary":"Unsave Candidate","operationId":"unsave_candidate_api_v1_employer_saved__candidate_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"candidate_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Candidate Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search/structured":{"post":{"tags":["检索"],"summary":"Structured Search","description":"结构化检索：required条件做硬性SQL过滤，preferred条件做语义匹配","operationId":"structured_search_api_v1_search_structured_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructuredSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/search":{"post":{"tags":["检索"],"summary":"Natural Search","description":"自然语言检索：通过本地关键词解析查询，再做结构化检索（不调用 LLM）。\n\nAgent 场景建议直接使用 /search/structured 或 /agent/match-candidates。","operationId":"natural_search_api_v1_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/search/candidates/{candidate_id}":{"get":{"tags":["检索"],"summary":"Get Candidate Detail","description":"获取候选人详情（脱敏，含技能/工作经历/教育/证书/语言）","operationId":"get_candidate_detail_api_v1_search_candidates__candidate_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"candidate_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Candidate Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search/candidates/{candidate_id}/resume/{file_id}":{"get":{"tags":["检索"],"summary":"Get Candidate Resume File","description":"HR 查看候选人上传的原始简历文件","operationId":"get_candidate_resume_file_api_v1_search_candidates__candidate_id__resume__file_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"candidate_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Candidate Id"}},{"name":"file_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contact-requests":{"get":{"tags":["联系"],"summary":"List Requests","description":"获取联系请求列表（根据角色返回对应的请求）","operationId":"list_requests_api_v1_contact_requests_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContactRequestResponse"},"type":"array","title":"Response List Requests Api V1 Contact Requests Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["联系"],"summary":"Create Request","description":"招聘方发起联系请求","operationId":"create_request_api_v1_contact_requests_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequestCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/contact-requests/{request_id}/respond":{"put":{"tags":["联系"],"summary":"Respond Request","description":"候选人响应联系请求","operationId":"respond_request_api_v1_contact_requests__request_id__respond_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequestRespond"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contact-requests/count":{"get":{"tags":["联系"],"summary":"Count Requests","description":"获取待处理联系请求数量（角标提示用）","operationId":"count_requests_api_v1_contact_requests_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/resume-requests":{"post":{"tags":["索要简历"],"summary":"Request Resume","description":"HR 向候选人申请查看简历附件。\n\n所有候选人的附件都必须经过候选人明确同意；anonymous / resume_hidden /\n历史公司屏蔽的候选人不可申请。","operationId":"request_resume_api_v1_resume_requests_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"candidate_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Candidate Id"}},{"name":"job_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"message","in":"query","required":false,"schema":{"type":"string","default":"","title":"Message"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["索要简历"],"summary":"List Requests","description":"获取索要简历请求列表（根据 OAuth 真实角色返回对应的请求，分页）","operationId":"list_requests_api_v1_resume_requests_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resume-requests/{request_id}/respond":{"put":{"tags":["索要简历"],"summary":"Respond Request","description":"候选人响应索要简历请求：approved / rejected","operationId":"respond_request_api_v1_resume_requests__request_id__respond_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}},{"name":"status_value","in":"query","required":true,"schema":{"type":"string","title":"Status Value"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resume-requests/{request_id}/revoke":{"put":{"tags":["索要简历"],"summary":"Revoke Request","description":"候选人撤销已授予的简历查看授权（合规必需：同意后应可撤回）。\n\n撤销后该 HR 立即失去查看/下载权限；如仍需查看必须重新申请。","operationId":"revoke_request_api_v1_resume_requests__request_id__revoke_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resume-requests/count":{"get":{"tags":["索要简历"],"summary":"Count Requests","description":"获取待处理索要简历请求数量（角标提示用）","operationId":"count_requests_api_v1_resume_requests_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/agent/parse-job":{"post":{"tags":["Agent 专用"],"summary":"Agent Parse Job","description":"将自然语言岗位描述解析为结构化检索条件（供 Agent 后续调用 match-candidates 或发布岗位）","operationId":"agent_parse_job_api_v1_agent_parse_job_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseJobRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/agent/match-candidates":{"post":{"tags":["Agent 专用"],"summary":"Agent Match Candidates","description":"一步到位：直接给定结构化/自然语言条件，返回 Top-N 匹配候选人 + 评分明细。\n\n比 /search/structured 更方便：内部完成硬性过滤 + 语义匹配 + 评分排序。","operationId":"agent_match_candidates_api_v1_agent_match_candidates_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchCandidatesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/agent/publish-job":{"post":{"tags":["Agent 专用"],"summary":"Agent Publish Job","description":"一步到位：发布岗位（自然语言描述 → 结构化 → 落库）","operationId":"agent_publish_job_api_v1_agent_publish_job_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseJobRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/agent/batch-parse-resumes":{"post":{"tags":["Agent 专用"],"summary":"Agent Batch Parse Resumes","description":"批量解析简历文本为结构化数据（单请求最多 20 份）\n\nAgent 场景：如果平台未部署 AI 服务（AI_SERVICE_URL 为空），\n请让 Agent 自行用 LLM 解析简历后，通过 POST /agent/import-resume 逐份导入。","operationId":"agent_batch_parse_resumes_api_v1_agent_batch_parse_resumes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchParseResumesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/agent/stats":{"get":{"tags":["Agent 专用"],"summary":"Agent Stats","description":"平台统计：候选人数量/行业分布/技能 TopN/活跃岗位数","operationId":"agent_stats_api_v1_agent_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/agent/import-resume":{"post":{"tags":["Agent 专用"],"summary":"Agent Import Resume","description":"导入简历（Agent 用 LLM 解析后传入结构化数据，写入候选人档案）\n\nAgent 自行读取简历文本 → 调用 LLM 解析为结构化 JSON → 通过此接口写入。","operationId":"agent_import_resume_api_v1_agent_import_resume_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportResumeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/agent/upload-resume-attachment":{"post":{"tags":["Agent 专用"],"summary":"Agent Upload Resume Attachment","description":"为当前候选人单独上传/补充简历原始附件（PDF/DOCX等，Base64编码），存档到对象存储","operationId":"agent_upload_resume_attachment_api_v1_agent_upload_resume_attachment_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResumeAttachmentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/agent/create-company":{"post":{"tags":["Agent 专用"],"summary":"Agent Create Company","description":"创建公司信息（入参：公司名、公司简介，可选设为默认）","operationId":"agent_create_company_api_v1_agent_create_company_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCompanyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/agent/set-default-company":{"post":{"tags":["Agent 专用"],"summary":"Agent Set Default Company","description":"指定默认企业主体","operationId":"agent_set_default_company_api_v1_agent_set_default_company_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetDefaultCompanyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/agent/list-companies":{"get":{"tags":["Agent 专用"],"summary":"Agent List Companies","description":"查询当前招聘方名下的所有企业主体及默认企业（分页）","operationId":"agent_list_companies_api_v1_agent_list_companies_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/market-analysis":{"post":{"tags":["Agent 专用"],"summary":"Agent Market Analysis","description":"市场分析：某技能/行业的人才供需情况","operationId":"agent_market_analysis_api_v1_agent_market_analysis_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketAnalysisRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/auth/oauth/exchange":{"post":{"tags":["OAuth"],"summary":"Exchange Oauth Identity","description":"由受信任的 MCP 服务将已验证的用户身份换成 HiPo OAuth token。","operationId":"exchange_oauth_identity_api_v1_auth_oauth_exchange_post","parameters":[{"name":"x-mcp-internal-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Mcp-Internal-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthExchangeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/oauth/refresh":{"post":{"tags":["OAuth"],"summary":"Refresh Oauth Token","description":"由受信任的 MCP 服务刷新 HiPo Work OAuth token（旋转 + 重放检测）。","operationId":"refresh_oauth_token_api_v1_auth_oauth_refresh_post","parameters":[{"name":"x-mcp-internal-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Mcp-Internal-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthRefreshRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/feed":{"get":{"tags":["community"],"summary":"Get Feed","description":"公开帖子流。支持置顶（is_pinned 优先排在前面，并自动清理到期置顶）。","operationId":"get_feed_api_v1_community_feed_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}},{"name":"tab","in":"query","required":false,"schema":{"type":"string","pattern":"^(latest|hot)$","default":"latest","title":"Tab"}},{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"}},{"name":"topics","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"多分类过滤，逗号分隔（用于社区三大阵地聚合）","title":"Topics"},"description":"多分类过滤，逗号分隔（用于社区三大阵地聚合）"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/topics":{"get":{"tags":["community"],"summary":"List Topics","description":"话题标签列表（公开）。","operationId":"list_topics_api_v1_community_topics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/community/topic-stats":{"get":{"tags":["community"],"summary":"Topic Stats","description":"分类热度看板（公开）：社区页首屏一次拿到「每个阵地/每个分类各有多少内容」。\n\n取代原先逐个分类点开 Tab 才知道有没有内容的方式：前端渲染阵地卡片时直接\n用这里的计数，用户一眼看到全部分类的体量与分布。\n\n口径统一为「进通用列表就能看到的帖子数」= status=active 的帖子数。\n与 /community/feed 一致（feed 也只过滤 status=active），避免卡片数字与实际点进去看到的条数不一致。","operationId":"topic_stats_api_v1_community_topic_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/community/posts/{post_id}":{"get":{"tags":["community"],"summary":"Get Post","description":"帖子详情（公开）。删除或隐藏时 404。若为任务帖则顺带触发24小时超时自动采纳处理。","operationId":"get_post_api_v1_community_posts__post_id__get","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["community"],"summary":"Delete Post","description":"删除帖子（软删除：status=deleted，保留数据可追溯）。\n\n权限：作者本人可删；监督员及以上可删权限低于自己的用户的内容\n（监督员删不了监督员/管理员的内容，管理员可删所有低权限内容）。","operationId":"delete_post_api_v1_community_posts__post_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/posts/{post_id}/replies":{"get":{"tags":["community"],"summary":"Get Replies","description":"回复列表（公开），按时间正序。\n\n已删除的回复不直接过滤掉，而是以「占位」形式返回（is_deleted=True、content 置空），\n以便：\n- 保留楼层位置，讨论上下文不断裂（读者能看到\"这里原本有一条回复\"）\n- 子回复的 reply_to 引用仍有落点，不会指向一个不存在的记录\n\n# 仅当整条帖子的回复都被清空（如作者注销）时才会出现大片占位，属预期行为。","operationId":"get_replies_api_v1_community_posts__post_id__replies_get","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","description":"asc=1楼在前（默认，传统论坛）；desc=最新在前","default":"asc","title":"Order"},"description":"asc=1楼在前（默认，传统论坛）；desc=最新在前"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepliesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["community"],"summary":"Create Reply","description":"回帖。支持楼中楼（reply_to_id 指向同帖内另一条回复）。","operationId":"create_reply_api_v1_community_posts__post_id__replies_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/posts":{"post":{"tags":["community"],"summary":"Create Post","description":"发帖。已上传简历的候选人可发，可附带自己的名片。\n\n正文里可以内嵌自己的名片（发帖框输入 #个人名片 选中后插入 [[card:token]]）。\n为防止冒用他人身份，此处把不属于自己的 token 从正文中剔除，\n而不是直接报错——用户可能从别处粘贴了含标记的文本，报错会让人莫名其妙。","operationId":"create_post_api_v1_community_posts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/tasks/replies/{reply_id}/adopt":{"post":{"tags":["community"],"summary":"Adopt Task Reply","description":"任务发布者采纳某楼层的交付成果，并结算打款单人奖励贝壳。","operationId":"adopt_task_reply_api_v1_community_tasks_replies__reply_id__adopt_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"reply_id","in":"path","required":true,"schema":{"type":"string","title":"Reply Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/tasks/replies/{reply_id}/reject":{"post":{"tags":["community"],"summary":"Reject Task Reply","description":"任务发布者拒绝某楼层的交付成果（必须填写拒绝理由）。","operationId":"reject_task_reply_api_v1_community_tasks_replies__reply_id__reject_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"reply_id","in":"path","required":true,"schema":{"type":"string","title":"Reply Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskReviewAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/posts/{post_id}/pin":{"post":{"tags":["community"],"summary":"Pin Post Endpoint","description":"使用 1 张置顶券将帖子在对应分类中置顶 24 小时。\n- 扣除背包 1 张 pin_voucher（商城 5 贝壳购买）\n- 置顶券价值 5 贝壳的 70%（3.5 贝壳）注入公共贝壳池\n- 分类 Feed 流顶格展示","operationId":"pin_post_endpoint_api_v1_community_posts__post_id__pin_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/posts/{post_id}/like":{"post":{"tags":["community"],"summary":"Toggle Like","description":"点赞/取消点赞（幂等：由唯一索引防重）。返回最新点赞数。","operationId":"toggle_like_api_v1_community_posts__post_id__like_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/replies/{reply_id}":{"delete":{"tags":["community"],"summary":"Delete Reply","description":"删除回复（软删除），并回写帖子 reply_count。\n\n权限同 delete_post：作者本人，或监督员及以上删除低权限者的内容。","operationId":"delete_reply_api_v1_community_replies__reply_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"reply_id","in":"path","required":true,"schema":{"type":"string","title":"Reply Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/uploads/image":{"post":{"tags":["community"],"summary":"Upload Post Image","description":"上传帖子配图，返回可访问的预签名 URL。","operationId":"upload_post_image_api_v1_community_uploads_image_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_post_image_api_v1_community_uploads_image_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/uploads/banner":{"post":{"tags":["community"],"summary":"Upload Banner Image","description":"上传广告横幅背景图 / 海报（上限 5MB），直传 OSS 返回可访问 URL。\n\n与帖子配图区分：广告横幅走独立目录 + 5MB 上限 + 一年有效期的预签名 URL\n（广告展示期最长按广告券张数叠加，需长期可访问）。","operationId":"upload_banner_image_api_v1_community_uploads_banner_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_banner_image_api_v1_community_uploads_banner_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/wallet/recharge/create":{"post":{"tags":["community"],"summary":"Create Recharge Order Endpoint","description":"创建虎皮椒微信充值订单，并返回微信支付链接/二维码。\n\n汇率标准：1 元人民币 = 1 贝壳（支持自定义金额，如 10元 = 10贝壳）。","operationId":"create_recharge_order_endpoint_api_v1_community_wallet_recharge_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRechargeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/wallet/recharge/{order_no}/status":{"get":{"tags":["community"],"summary":"Get Recharge Status Endpoint","description":"前端轮询充值订单支付状态。","operationId":"get_recharge_status_endpoint_api_v1_community_wallet_recharge__order_no__status_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"order_no","in":"path","required":true,"schema":{"type":"string","title":"Order No"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/wallet/recharge/{order_no}/cancel":{"post":{"tags":["community"],"summary":"Cancel Recharge Order Endpoint","description":"用户主动取消未支付的充值订单（前端关闭扫码弹窗时调用）。\n\n即时反映到管理员订单监控面板，便于运营判断是「用户放弃」还是「支付通道异常」。","operationId":"cancel_recharge_order_endpoint_api_v1_community_wallet_recharge__order_no__cancel_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"order_no","in":"path","required":true,"schema":{"type":"string","title":"Order No"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/admin/recharge/orders":{"get":{"tags":["community"],"summary":"Admin List Recharge Orders Endpoint","description":"管理员实时订单监控：查看每笔充值的订单号、支付用户、金额、状态与异常原因。","operationId":"admin_list_recharge_orders_endpoint_api_v1_community_admin_recharge_orders_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"pending/paid/cancelled/failed/expired","title":"Status"},"description":"pending/paid/cancelled/failed/expired"},{"name":"order_no","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"按订单号精确或模糊搜索","title":"Order No"},"description":"按订单号精确或模糊搜索"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/admin/recharge/orders/{order_no}/close":{"post":{"tags":["community"],"summary":"Admin Close Recharge Order Endpoint","description":"管理员手动结单：将长时间挂起的待支付订单标记为失败并注明原因。","operationId":"admin_close_recharge_order_endpoint_api_v1_community_admin_recharge_orders__order_no__close_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"order_no","in":"path","required":true,"schema":{"type":"string","title":"Order No"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/wallet/recharge/webhook":{"post":{"tags":["community"],"summary":"Xunhupay Webhook Endpoint","description":"接收虎皮椒异步支付成功回调通知（公开端点，MD5验签防伪）。","operationId":"xunhupay_webhook_endpoint_api_v1_community_wallet_recharge_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/community/wallet/transfer":{"post":{"tags":["community"],"summary":"Transfer Shells Endpoint","description":"成员间贝壳转账。\n- 收取 0.3% 手续费\n- 手续费的 70% 自动注入公共贝壳池\n- 扣费与入账精确至 8 位小数","operationId":"transfer_shells_endpoint_api_v1_community_wallet_transfer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShellTransferCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/wallet":{"get":{"tags":["community"],"summary":"Get Wallet","description":"我的钱包：贝壳余额、贡献值、简历上传定价与最近流水。\n\n钱包行惰性创建，因此老用户首次访问本接口会自动建行（余额 0），\n不影响其登录态与既有数据。","operationId":"get_wallet_api_v1_community_wallet_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/wallet/resume-upload-quote":{"get":{"tags":["community"],"summary":"Resume Upload Quote","description":"简历上传前的费用预告：告诉前端本次要花多少贝壳、余额是否够。\n\n前端可在上传按钮上直接展示「本次消耗 1 贝壳 / 首次免费」，\n避免用户点了上传才发现余额不足。","operationId":"resume_upload_quote_api_v1_community_wallet_resume_upload_quote_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/posts/{post_id}/report":{"post":{"tags":["community"],"summary":"Report Post","description":"举报违规帖子。\n\n本轮只落库（status=pending），审核与贡献值发放由后续管理端接口处理。\n举报查实后举报人可获得 1 点贡献值（见 economy.REPORT_VERIFIED_CONTRIBUTION）。","operationId":"report_post_api_v1_community_posts__post_id__report_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/my-role":{"get":{"tags":["community"],"summary":"My Community Role","description":"我的社区角色与治理权限（前端据此显示/隐藏治理入口）。","operationId":"my_community_role_api_v1_community_my_role_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/members":{"get":{"tags":["community"],"summary":"List Members","description":"成员列表（监督员及以上）。\n\n监督员需要看到成员才能执行禁言处罚，故放宽到监督员可见；\n但「指派角色 / 永久禁用」等管理动作仍由各自的接口单独校验管理员权限。\n邮箱属于隐私信息，因此不对普通用户开放。","operationId":"list_members_api_v1_community_members_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"按昵称/邮箱搜索","title":"Q"},"description":"按昵称/邮箱搜索"},{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"按社区角色过滤","title":"Role"},"description":"按社区角色过滤"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/groups/my-groups":{"get":{"tags":["community"],"summary":"Get My Groups","description":"当前登录用户加入的专属组列表（前端据此判断是否有发帖权限）。","operationId":"get_my_groups_api_v1_community_groups_my_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/groups/members":{"post":{"tags":["community"],"summary":"Assign Group Member","description":"管理员指派/邀请成员加入专属组（如运营组）。","operationId":"assign_group_member_api_v1_community_groups_members_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupMemberAssign"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["community"],"summary":"Remove Group Member","description":"管理员将成员移出专属组。","operationId":"remove_group_member_api_v1_community_groups_members_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"group_name","in":"query","required":false,"schema":{"type":"string","default":"运营组","title":"Group Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/roles/assign":{"post":{"tags":["community"],"summary":"Assign Role","description":"管理员指定他人社区角色。\n\n约束：不能改自己的角色（防止唯一管理员把自己降级后无人可管）。","operationId":"assign_role_api_v1_community_roles_assign_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleAssign"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/roles/ban":{"post":{"tags":["community"],"summary":"Ban User","description":"管理员禁用/解禁用户。\n\n约束：不能禁自己；不能禁其他管理员（避免管理员互相封禁导致治理瘫痪）。\n被禁用户仍可浏览社区，但一切写操作（发帖/回帖/点赞/举报）返回 403。","operationId":"ban_user_api_v1_community_roles_ban_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/reports":{"get":{"tags":["community"],"summary":"List Reports","description":"举报池（监督员及以上可查看）。\n\n返回举报记录及其关联帖子摘要，便于监督员判断是否属实。","operationId":"list_reports_api_v1_community_reports_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"pending","title":"Status"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/reports/{report_id}/handle":{"post":{"tags":["community"],"summary":"Handle Report","description":"处理举报（监督员及以上）。\n\n- verified（属实）：向举报人发放贡献值 1 点，并把帖子标记为违规隐藏\n- rejected（驳回）：仅记录处理结果，不发放贡献值\n\n幂等：已处理过的举报不会被重复处理，避免贡献值被重复发放。","operationId":"handle_report_api_v1_community_reports__report_id__handle_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportHandle"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/mute-levels":{"get":{"tags":["community"],"summary":"List Mute Levels","description":"当前角色可用的禁言档位（前端据此渲染处罚选项）。\n\n监督员只会看到 1小时/1天/1周；管理员额外看到「永久禁言」。","operationId":"list_mute_levels_api_v1_community_mute_levels_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/punish/mute":{"post":{"tags":["community"],"summary":"Mute User","description":"禁言用户（监督员及以上）。\n\n档位权限：监督员可 1小时/1天/1周；「永久禁言」仅管理员可用。\n约束：不能处罚自己；不能处罚同级或更高角色者（监督员动不了监督员与管理员）。","operationId":"mute_user_api_v1_community_punish_mute_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MuteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/punish/unmute":{"post":{"tags":["community"],"summary":"Unmute User","description":"解除禁言（监督员及以上）。同时清除定时禁言与永久禁用。","operationId":"unmute_user_api_v1_community_punish_unmute_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MuteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/messages":{"get":{"tags":["community"],"summary":"List Messages","description":"我的消息列表。回帖、点赞、举报处理、角色变更、处罚都会在这里产生消息。","operationId":"list_messages_api_v1_community_messages_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","description":"只看未读","default":false,"title":"Unread Only"},"description":"只看未读"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/messages/read":{"post":{"tags":["community"],"summary":"Mark Messages Read","description":"标记消息已读（单条或全部）。","operationId":"mark_messages_read_api_v1_community_messages_read_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"notification_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"留空则全部标记已读","title":"Notification Id"},"description":"留空则全部标记已读"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/badges/my-badges":{"get":{"tags":["community"],"summary":"Get My Badges Endpoint","description":"查询当前登录用户的荣誉勋章馆明细（包含 11 款勋章的激活状态、当周枚数、终身累计与当周总贡献点数）。","operationId":"get_my_badges_endpoint_api_v1_community_badges_my_badges_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/badges/catalog":{"get":{"tags":["community"],"summary":"Get Badges Catalog Endpoint","description":"公开获取 11 款贡献勋章的标准定义与点数配置。","operationId":"get_badges_catalog_endpoint_api_v1_community_badges_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/community/admin/finance/ledger":{"get":{"tags":["community"],"summary":"Get Financial Ledger Endpoint","description":"管理员财务对账流水列表。\n明确记录每笔消费买了什么、对应用户、发生时间、变动数量、余额变动与发票对账号。","operationId":"get_financial_ledger_endpoint_api_v1_community_admin_finance_ledger_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(expense|income)$"},{"type":"null"}],"title":"Direction"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"user_id_query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id Query"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/admin/finance/summary":{"get":{"tags":["community"],"summary":"Get Financial Summary Endpoint","description":"管理员财务总览概况。","operationId":"get_financial_summary_endpoint_api_v1_community_admin_finance_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinancialSummary"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/mall/redeem":{"post":{"tags":["community"],"summary":"Redeem Gift Card Endpoint","description":"使用贝壳兑换京东 E 卡或话费（0.7元保底兑换）。\n- 扣除对应贝壳\n- 发放卡密（可站内信查看）","operationId":"redeem_gift_card_endpoint_api_v1_community_mall_redeem_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemCardRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/mall/my-redemptions":{"get":{"tags":["community"],"summary":"Get My Redemptions Endpoint","description":"查询当前用户的卡券兑换历史记录。","operationId":"get_my_redemptions_endpoint_api_v1_community_mall_my_redemptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/mall/catalog":{"get":{"tags":["community"],"summary":"Get Community Mall Catalog","description":"获取极客商城 7 级 18 款道具货架与分成规则（公开免登录接口）。","operationId":"get_community_mall_catalog_api_v1_community_mall_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/community/mall/my-inventory":{"get":{"tags":["community"],"summary":"Get My Inventory Endpoint","description":"查询当前登录用户背包持有的所有道具列表。","operationId":"get_my_inventory_endpoint_api_v1_community_mall_my_inventory_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/mall/buy":{"post":{"tags":["community"],"summary":"Buy Mall Item Endpoint","description":"在社区商城购买道具存入背包。\n- 扣除买家对应贝壳\n- 存入 user_inventories","operationId":"buy_mall_item_endpoint_api_v1_community_mall_buy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MallBuyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/tips/send":{"post":{"tags":["community"],"summary":"Send Tip Endpoint","description":"消耗背包道具向作者打赏。\n- 扣除背包库存\n- 70% 打款给作者（流水 tip_in）\n- 10% 注入公共贝壳池全员周日分红\n- 20% 平台留存","operationId":"send_tip_endpoint_api_v1_community_tips_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendTipRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/ads/active":{"get":{"tags":["community"],"summary":"List Active Community Ads","description":"获取所有在展示期内的有效广告列表（公开免登录接口，无广告时返回空数组）。","operationId":"list_active_community_ads_api_v1_community_ads_active_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/ads/publish":{"post":{"tags":["community"],"summary":"Publish Community Ad Endpoint","description":"使用广告券发布广告（10 贝壳/张，1 张挂 3 天）。\n- 扣除对应贝壳\n- 70% 租金实时注入公共贝壳池全员分红","operationId":"publish_community_ad_endpoint_api_v1_community_ads_publish_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdPublishRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/community/shell-pool":{"get":{"tags":["community"],"summary":"Get Shell Pool","description":"获取社区公共贝壳池实时看板数据与下次周日20:00分红倒计时（公开免登录接口）。","operationId":"get_shell_pool_api_v1_community_shell_pool_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/community/contacts/{candidate_id}/unlock":{"post":{"tags":["community"],"summary":"Unlock Contact Endpoint","description":"解锁某候选人的联系方式（消耗 5 贝壳）。\n\n规则：\n- 自己的联系方式在自己档案里免费可见（不能也不需要解锁自己）\n- 他人的联系方式默认不可见，需一次性花费 CONTACT_UNLOCK_SHELL_COST 个贝壳解锁\n- 同一对（解锁人, 候选人）只扣一次费，重复调用幂等返回已解锁状态\n- 余额不足返回 402，前端据此引导充值\n\n隐私边界：匿名求职（privacy_level=anonymous）或隐藏简历的候选人，\n即使付费也不下发联系方式——付费购买的是「查看权限」，不是突破隐私设置的权利。","operationId":"unlock_contact_endpoint_api_v1_community_contacts__candidate_id__unlock_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"candidate_id","in":"path","required":true,"schema":{"type":"string","title":"Candidate Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/contacts/unlock":{"get":{"tags":["community"],"summary":"Get Unlocked Contacts","description":"读取已解锁的联系方式（不扣费）。\n\n分两步设计的原因：解锁是花钱动作（POST，可能失败/余额不足），\n读取是幂等动作（GET）。已解锁用户每次打开名片弹窗都调 POST 会让\n「查看」和「购买」语义混淆，也容易在前端重试时造成误扣费的担忧。\n因此 POST 只负责买，GET 只负责读。","operationId":"get_unlocked_contacts_api_v1_community_contacts_unlock_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"candidate_id","in":"query","required":true,"schema":{"type":"string","description":"目标候选人 profile id","title":"Candidate Id"},"description":"目标候选人 profile id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/contacts/unlock-quote":{"get":{"tags":["community"],"summary":"Contact Unlock Quote","description":"解锁前的费用预告：本次要花多少贝壳、是否已解锁、余额是否够。\n\n前端在联系方式区域直接展示「解锁需 5 贝壳 / 已解锁 / 余额不足」，\n避免用户点了按钮才发现余额不够。","operationId":"contact_unlock_quote_api_v1_community_contacts_unlock_quote_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"candidate_id","in":"query","required":true,"schema":{"type":"string","description":"目标候选人 profile id","title":"Candidate Id"},"description":"目标候选人 profile id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community/wallet/transactions":{"get":{"tags":["community"],"summary":"Wallet Transactions","description":"我的账单流水（分页）。\n\n贝壳流水记录消耗与充值（首次上传简历免费不产生流水），\n贡献值流水记录治理所得（如举报违规查实 +1）。\n每条都带变动后余额，便于逐笔核对。","operationId":"wallet_transactions_api_v1_community_wallet_transactions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","pattern":"^(shell|contribution)$","description":"shell=贝壳流水；contribution=贡献值流水","default":"shell","title":"Kind"},"description":"shell=贝壳流水；contribution=贡献值流水"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health Check","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AdPublishRequest":{"properties":{"ad_title":{"type":"string","maxLength":100,"minLength":1,"title":"Ad Title","description":"广告大标题"},"ad_description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Ad Description","description":"宣传副标语"},"ad_link_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Ad Link Url","description":"点击跳转链接"},"ad_image_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Ad Image Url","description":"广告海报图片 URL"},"vouchers_count":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Vouchers Count","description":"使用广告券张数（10 贝壳/张，每张挂 3 天）","default":1}},"type":"object","required":["ad_title"],"title":"AdPublishRequest"},"AuthorCard":{"properties":{"share_token":{"type":"string","title":"Share Token"},"display_name":{"type":"string","title":"Display Name"},"avatar_url":{"type":"string","title":"Avatar Url","default":""},"headline":{"type":"string","title":"Headline","default":""},"signature":{"type":"string","title":"Signature","default":""},"skills":{"items":{"type":"string"},"type":"array","title":"Skills","default":[]},"experience_years":{"type":"number","title":"Experience Years","default":0},"industry":{"type":"string","title":"Industry","default":""}},"type":"object","required":["share_token","display_name"],"title":"AuthorCard","description":"帖子附带的作者名片卡（读时实时从档案生成，不写快照）"},"BanRequest":{"properties":{"user_id":{"type":"string","title":"User Id","description":"目标用户 ID"},"banned":{"type":"boolean","title":"Banned","default":true},"reason":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Reason"}},"type":"object","required":["user_id"],"title":"BanRequest"},"BasicInfoUpdate":{"properties":{"nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nickname"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature"}},"type":"object","title":"BasicInfoUpdate","description":"个人基础信息更新（昵称/头像/签名）。\n\n与 CandidateProfileUpdate 分开：这三项是展示层信息，不参与简历/匹配逻辑，\n独立接口便于前端只改展示信息而不触碰求职字段。\n三者均可选；传空字符串表示清空该项（清空后读取接口回落到兜底值）。"},"BatchParseResumesRequest":{"properties":{"resumes":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Resumes"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"}},"type":"object","required":["resumes"],"title":"BatchParseResumesRequest","description":"批量解析简历文本"},"Body_upload_avatar_api_v1_candidate_avatar_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_avatar_api_v1_candidate_avatar_upload_post"},"Body_upload_banner_image_api_v1_community_uploads_banner_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_banner_image_api_v1_community_uploads_banner_post"},"Body_upload_post_image_api_v1_community_uploads_image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_post_image_api_v1_community_uploads_image_post"},"Body_upload_resume_api_v1_candidate_resume_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_resume_api_v1_candidate_resume_upload_post"},"CandidateProfileResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nickname"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"wechat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wechat"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"min_salary":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Salary"},"max_salary":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Salary"},"salary_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary Currency","default":"CNY"},"work_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Mode"},"work_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Status"},"available_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Available Date"},"headline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headline"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"verified_level":{"type":"integer","title":"Verified Level"},"privacy_level":{"type":"string","title":"Privacy Level"},"resume_hidden":{"type":"boolean","title":"Resume Hidden"},"block_previous_companies":{"type":"boolean","title":"Block Previous Companies"},"experience_years":{"type":"number","title":"Experience Years"},"share_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Token"},"work_experiences":{"anyOf":[{"items":{"$ref":"#/components/schemas/WorkExperienceResponse"},"type":"array"},{"type":"null"}],"title":"Work Experiences","default":[]},"projects":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProjectExperienceResponse"},"type":"array"},{"type":"null"}],"title":"Projects","default":[]},"personal_works":{"anyOf":[{"items":{"$ref":"#/components/schemas/PersonalWorkResponse"},"type":"array"},{"type":"null"}],"title":"Personal Works","default":[]},"education":{"anyOf":[{"items":{"$ref":"#/components/schemas/EducationResponse"},"type":"array"},{"type":"null"}],"title":"Education","default":[]},"skills":{"anyOf":[{"items":{"$ref":"#/components/schemas/SkillResponse"},"type":"array"},{"type":"null"}],"title":"Skills","default":[]},"certificates":{"anyOf":[{"items":{"$ref":"#/components/schemas/CertificateResponse"},"type":"array"},{"type":"null"}],"title":"Certificates","default":[]},"languages":{"anyOf":[{"items":{"$ref":"#/components/schemas/LanguageResponse"},"type":"array"},{"type":"null"}],"title":"Languages","default":[]},"resume_upload_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resume Upload Used","default":0},"resume_upload_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resume Upload Limit","default":3}},"type":"object","required":["id","name","phone","location","min_salary","max_salary","work_mode","work_status","available_date","headline","summary","industry","verified_level","privacy_level","resume_hidden","block_previous_companies","experience_years"],"title":"CandidateProfileResponse"},"CandidateProfileUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nickname"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"wechat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wechat"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"experience_years":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Experience Years"},"min_salary":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Salary"},"max_salary":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Salary"},"salary_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary Currency","default":"CNY"},"work_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Mode"},"work_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Status"},"available_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Available Date"},"headline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headline"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"privacy_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privacy Level"},"resume_hidden":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Resume Hidden"},"block_previous_companies":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Block Previous Companies"}},"type":"object","title":"CandidateProfileUpdate"},"CandidateSearchResult":{"properties":{"rank":{"type":"integer","title":"Rank"},"final_score":{"type":"number","title":"Final Score"},"score_breakdown":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Score Breakdown"},"match_reasons":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Match Reasons"},"candidate":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Candidate"}},"type":"object","required":["rank","final_score"],"title":"CandidateSearchResult"},"CertificateCreate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"issuer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issuer"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"}},"type":"object","title":"CertificateCreate"},"CertificateResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"issuer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issuer"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"},"verified":{"type":"boolean","title":"Verified"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"}},"type":"object","required":["id","name","issuer","year","verified","confidence"],"title":"CertificateResponse"},"ContactRequestCreate":{"properties":{"candidate_id":{"type":"string","format":"uuid","title":"Candidate Id"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["candidate_id"],"title":"ContactRequestCreate"},"ContactRequestRespond":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"ContactRequestRespond"},"ContactRequestResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"employer_id":{"type":"string","format":"uuid","title":"Employer Id"},"candidate_id":{"type":"string","format":"uuid","title":"Candidate Id"},"status":{"type":"string","title":"Status"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","employer_id","candidate_id","status","message","created_at"],"title":"ContactRequestResponse"},"CreateCompanyRequest":{"properties":{"company_name":{"type":"string","maxLength":200,"minLength":1,"title":"Company Name","description":"公司/企业主体名称"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"公司简介或业务介绍","default":""},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default","description":"是否设为默认企业主体","default":false}},"type":"object","required":["company_name"],"title":"CreateCompanyRequest"},"CreateRechargeRequest":{"properties":{"amount_cny":{"type":"number","maximum":10000.0,"exclusiveMinimum":0.0,"title":"Amount Cny","description":"充值人民币金额（元，最低 1 元）"},"return_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return Url","description":"移动端支付完成后同步跳回的前端页面 URL"}},"type":"object","required":["amount_cny"],"title":"CreateRechargeRequest"},"EducationCreate":{"properties":{"school":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"School"},"degree":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Degree"},"major":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Major"},"start_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Start Year"},"end_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"End Year"},"gpa":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gpa"},"school_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"School Type"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order","default":0}},"type":"object","title":"EducationCreate"},"EducationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"school":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"School"},"degree":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Degree"},"major":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Major"},"start_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Start Year"},"end_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"End Year"},"gpa":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gpa"},"school_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"School Type"},"ai_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Summary"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","required":["id","school","degree","major","start_year","end_year","gpa","school_type","ai_summary","confidence","sort_order"],"title":"EducationResponse"},"EmployerProfileCreate":{"properties":{"company_name":{"type":"string","title":"Company Name"},"company_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Size"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default","default":false}},"type":"object","required":["company_name"],"title":"EmployerProfileCreate"},"EmployerProfileResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"company_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Size"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"verified":{"type":"boolean","title":"Verified"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default","default":true}},"type":"object","required":["id","company_name","company_size","industry","website","description","verified"],"title":"EmployerProfileResponse"},"EmployerProfileUpdate":{"properties":{"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"company_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Size"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"}},"type":"object","title":"EmployerProfileUpdate"},"FeedResponse":{"properties":{"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"results":{"items":{"$ref":"#/components/schemas/PostOut"},"type":"array","title":"Results"}},"type":"object","required":["total","page","page_size","results"],"title":"FeedResponse"},"FinancialSummary":{"properties":{"total_recharge_income":{"type":"number","title":"Total Recharge Income"},"total_shells_consumed":{"type":"number","title":"Total Shells Consumed"},"pool_balance":{"type":"number","title":"Pool Balance"},"pool_distributed":{"type":"number","title":"Pool Distributed"},"category_stats":{"additionalProperties":true,"type":"object","title":"Category Stats"}},"type":"object","required":["total_recharge_income","total_shells_consumed","pool_balance","pool_distributed","category_stats"],"title":"FinancialSummary"},"GroupMemberAssign":{"properties":{"user_id":{"type":"string","title":"User Id","description":"目标用户 ID"},"group_name":{"type":"string","title":"Group Name","description":"组名（默认运营组）","default":"运营组"}},"type":"object","required":["user_id"],"title":"GroupMemberAssign"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImportResumeRequest":{"properties":{"basic_info":{"additionalProperties":true,"type":"object","title":"Basic Info","description":"姓名/地点/头衔/简介等"},"work_experiences":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Work Experiences","description":"工作经历列表"},"projects":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Projects","description":"项目经历列表，可选"},"education":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Education","description":"教育经历列表"},"skills":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Skills","description":"技能列表"},"certificates":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Certificates","description":"证书列表"},"languages":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Languages","description":"语言列表"},"resume_file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resume File Name","description":"附件原始文件名，如 resume.pdf"},"resume_file_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resume File Type","description":"附件类型：pdf/doc/docx/jpg/jpeg/png"},"resume_file_base64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resume File Base64","description":"附件内容 base64 编码"}},"type":"object","title":"ImportResumeRequest","description":"Agent 解析好的结构化简历数据（由 Agent 调用 LLM 解析后传入）"},"JobMatchResponse":{"properties":{"total_matches":{"type":"integer","title":"Total Matches"},"results":{"items":{"$ref":"#/components/schemas/JobMatchResult"},"type":"array","title":"Results"},"has_resume":{"type":"boolean","title":"Has Resume","default":true}},"type":"object","required":["total_matches","results"],"title":"JobMatchResponse","description":"候选人视角：根据我的简历匹配到的岗位列表"},"JobMatchResult":{"properties":{"rank":{"type":"integer","title":"Rank"},"final_score":{"type":"number","title":"Final Score"},"score_breakdown":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Score Breakdown"},"match_reasons":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Match Reasons"},"job":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Job"}},"type":"object","required":["rank","final_score"],"title":"JobMatchResult","description":"候选人视角：单个岗位匹配结果"},"JobRequirementCounts":{"properties":{"total":{"type":"integer","title":"Total"},"active":{"type":"integer","title":"Active"},"closed":{"type":"integer","title":"Closed"}},"type":"object","required":["total","active","closed"],"title":"JobRequirementCounts"},"JobRequirementCreate":{"properties":{"title":{"type":"string","maxLength":200,"title":"Title"},"employer_profile_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Employer Profile Id"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"salary_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Salary Min"},"salary_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Salary Max"},"salary_unit":{"anyOf":[{"type":"string","enum":["monthly","yearly"]},{"type":"null"}],"title":"Salary Unit"},"salary_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary Currency","default":"CNY"},"benefits":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Benefits"},"required":{"anyOf":[{"items":{"$ref":"#/components/schemas/RequiredRule"},"type":"array"},{"type":"null"}],"title":"Required"},"preferred":{"anyOf":[{"$ref":"#/components/schemas/PreferredConditions"},{"type":"null"}]},"raw_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Text"}},"type":"object","required":["title"],"title":"JobRequirementCreate"},"JobRequirementListResponse":{"properties":{"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"results":{"items":{"$ref":"#/components/schemas/JobRequirementResponse"},"type":"array","title":"Results"},"counts":{"anyOf":[{"$ref":"#/components/schemas/JobRequirementCounts"},{"type":"null"}]}},"type":"object","required":["total","page","page_size","results"],"title":"JobRequirementListResponse"},"JobRequirementResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"job_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Code"},"employer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Employer Id"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"salary_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Salary Min"},"salary_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Salary Max"},"salary_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary Unit"},"salary_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary Currency","default":"CNY"},"benefits":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Benefits"},"requirements":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Requirements"},"raw_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Text"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","title","industry","requirements","raw_text","status","created_at","updated_at"],"title":"JobRequirementResponse"},"JobRequirementUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"salary_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Salary Min"},"salary_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Salary Max"},"salary_unit":{"anyOf":[{"type":"string","enum":["monthly","yearly"]},{"type":"null"}],"title":"Salary Unit"},"salary_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary Currency"},"benefits":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Benefits"},"required":{"anyOf":[{"items":{"$ref":"#/components/schemas/RequiredRule"},"type":"array"},{"type":"null"}],"title":"Required"},"preferred":{"anyOf":[{"$ref":"#/components/schemas/PreferredConditions"},{"type":"null"}]},"raw_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Text"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"JobRequirementUpdate"},"LanguageCreate":{"properties":{"language":{"type":"string","title":"Language"},"level":{"type":"string","title":"Level"}},"type":"object","required":["language","level"],"title":"LanguageCreate"},"LanguageResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Level"}},"type":"object","required":["id","language","level"],"title":"LanguageResponse"},"MallBuyRequest":{"properties":{"item_key":{"type":"string","title":"Item Key","description":"道具标识"},"quantity":{"type":"integer","maximum":999.0,"minimum":1.0,"title":"Quantity","description":"购买数量","default":1}},"type":"object","required":["item_key"],"title":"MallBuyRequest"},"MarketAnalysisRequest":{"properties":{"keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyword"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"}},"type":"object","title":"MarketAnalysisRequest","description":"市场分析请求"},"MatchCandidatesRequest":{"properties":{"query_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query Text"},"required":{"anyOf":[{"items":{"$ref":"#/components/schemas/RequiredRule"},"type":"array"},{"type":"null"}],"title":"Required"},"preferred":{"anyOf":[{"$ref":"#/components/schemas/PreferredConditions"},{"type":"null"}]},"max_results":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Results","default":10}},"type":"object","title":"MatchCandidatesRequest","description":"结构化条件直接匹配（Agent 一步到位）"},"MuteRequest":{"properties":{"user_id":{"type":"string","title":"User Id","description":"目标用户 ID"},"level":{"type":"string","title":"Level","description":"1h / 1d / 1w / permanent"},"reason":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Reason"}},"type":"object","required":["user_id","level"],"title":"MuteRequest"},"OAuthExchangeRequest":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"client_id":{"type":"string","maxLength":200,"minLength":1,"title":"Client Id"},"role":{"type":"string","pattern":"^(candidate|employer)$","title":"Role"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"}},"type":"object","required":["user_id","client_id","role"],"title":"OAuthExchangeRequest"},"OAuthRefreshRequest":{"properties":{"refresh_token":{"type":"string","minLength":1,"title":"Refresh Token"},"client_id":{"type":"string","maxLength":200,"minLength":1,"title":"Client Id"}},"type":"object","required":["refresh_token","client_id"],"title":"OAuthRefreshRequest"},"ParseJobRequest":{"properties":{"raw_text":{"type":"string","title":"Raw Text","default":""},"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title"},"required":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Required"},"preferred":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Preferred"},"salary_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Salary Min"},"salary_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Salary Max"},"salary_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary Unit"},"salary_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary Currency","default":"CNY"},"benefits":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Benefits"}},"type":"object","title":"ParseJobRequest","description":"自然语言岗位描述 → 结构化条件"},"ParseJobResponse":{"properties":{"code":{"type":"string","title":"Code","default":"ok"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"required":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Required"},"preferred":{"additionalProperties":true,"type":"object","title":"Preferred"},"salary_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Salary Min"},"salary_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Salary Max"},"salary_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary Unit"},"salary_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary Currency","default":"CNY"}},"type":"object","required":["location","required","preferred","salary_min","salary_max","salary_unit"],"title":"ParseJobResponse"},"PersonalWorkCreate":{"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title"},"url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"role":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Role"},"tech_stack":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tech Stack"}},"type":"object","required":["title"],"title":"PersonalWorkCreate"},"PersonalWorkResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"tech_stack":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tech Stack"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order","default":0},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","title"],"title":"PersonalWorkResponse"},"PostCreate":{"properties":{"content":{"type":"string","maxLength":3000,"minLength":1,"title":"Content"},"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"},"images":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Images"},"include_card":{"type":"boolean","title":"Include Card","default":true},"task_title":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Task Title"},"bounty_per_winner":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bounty Per Winner","description":"悬赏贝壳数量，最低 1 贝壳，最大不限，支持 8 位小数"},"max_winners":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Max Winners","description":"最大获奖名额，默认 1 人","default":1},"completion_guide":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Completion Guide","description":"完成说明/交付标准"},"completion_guide_images":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Completion Guide Images","description":"完成说明参考配图"}},"type":"object","required":["content"],"title":"PostCreate"},"PostOut":{"properties":{"id":{"type":"string","title":"Id"},"author":{"additionalProperties":true,"type":"object","title":"Author"},"content":{"type":"string","title":"Content"},"content_segments":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Content Segments","default":[]},"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"},"images":{"items":{"type":"string"},"type":"array","title":"Images"},"card":{"anyOf":[{"$ref":"#/components/schemas/AuthorCard"},{"type":"null"}]},"is_task":{"type":"boolean","title":"Is Task","default":false},"task":{"anyOf":[{"$ref":"#/components/schemas/TaskInfoOut"},{"type":"null"}]},"is_pinned":{"type":"boolean","title":"Is Pinned","default":false},"pinned_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pinned Expires At"},"like_count":{"type":"integer","title":"Like Count"},"reply_count":{"type":"integer","title":"Reply Count"},"tips_summary":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Tips Summary","default":[]},"created_at":{"type":"string","title":"Created At"},"liked_by_me":{"type":"boolean","title":"Liked By Me","default":false}},"type":"object","required":["id","author","content","topic","images","card","like_count","reply_count","created_at"],"title":"PostOut"},"PreferredConditions":{"properties":{"semantic_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Semantic Query"},"skills":{"anyOf":[{"items":{"$ref":"#/components/schemas/PreferredSkill"},"type":"array"},{"type":"null"}],"title":"Skills"},"keywords":{"anyOf":[{"items":{"$ref":"#/components/schemas/PreferredKeyword"},"type":"array"},{"type":"null"}],"title":"Keywords"},"industry_extensions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Industry Extensions"}},"type":"object","title":"PreferredConditions"},"PreferredKeyword":{"properties":{"text":{"type":"string","title":"Text"},"weight":{"type":"number","title":"Weight","default":1.0},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","required":["text"],"title":"PreferredKeyword"},"PreferredSkill":{"properties":{"name":{"type":"string","title":"Name"},"min_level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Level"},"min_years":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Years"},"weight":{"type":"number","title":"Weight","default":1.0},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","required":["name"],"title":"PreferredSkill"},"ProjectExperienceCreate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"responsibilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Responsibilities"},"achievements":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Achievements"},"tech_stack":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tech Stack"},"project_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Url"},"ai_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Summary"}},"type":"object","title":"ProjectExperienceCreate"},"ProjectExperienceResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"responsibilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Responsibilities"},"achievements":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Achievements"},"tech_stack":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tech Stack"},"project_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Url"},"ai_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Summary"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","required":["id","name","role","start_date","end_date","description","responsibilities","achievements","tech_stack","project_url","ai_summary","confidence","sort_order"],"title":"ProjectExperienceResponse"},"RedeemCardRequest":{"properties":{"item_key":{"type":"string","title":"Item Key","description":"卡券标识（如 jd_card_70, phone_bill_35）"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone","description":"充值手机号（话费类必填）"}},"type":"object","required":["item_key"],"title":"RedeemCardRequest"},"RegisterOrLoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"code":{"type":"string","title":"Code"},"role":{"type":"string","pattern":"^(candidate|employer)$","title":"Role","default":"candidate"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"referral_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Code"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"source_entity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Entity"}},"type":"object","required":["email","code"],"title":"RegisterOrLoginRequest"},"RegisterOrLoginResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"email_verified":{"type":"boolean","title":"Email Verified"},"is_new_user":{"type":"boolean","title":"Is New User"},"message":{"type":"string","title":"Message"},"role_change_ticket":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Change Ticket"}},"type":"object","required":["user_id","email","role","email_verified","is_new_user","message"],"title":"RegisterOrLoginResponse"},"RepliesResponse":{"properties":{"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"results":{"items":{"$ref":"#/components/schemas/ReplyOut"},"type":"array","title":"Results"}},"type":"object","required":["total","page","page_size","results"],"title":"RepliesResponse"},"ReplyCreate":{"properties":{"content":{"type":"string","maxLength":1000,"minLength":1,"title":"Content"},"reply_to_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reply To Id"},"submission_images":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Submission Images","description":"任务交付截图成果（最多 9 张）"}},"type":"object","required":["content"],"title":"ReplyCreate"},"ReplyOut":{"properties":{"id":{"type":"string","title":"Id"},"post_id":{"type":"string","title":"Post Id"},"author":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Author"},"content":{"type":"string","title":"Content"},"is_deleted":{"type":"boolean","title":"Is Deleted","default":false},"reply_to_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reply To Id"},"reply_to":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Reply To"},"is_task_submission":{"type":"boolean","title":"Is Task Submission","default":false},"submission_images":{"items":{"type":"string"},"type":"array","title":"Submission Images","default":[]},"review_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review Status"},"reject_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reject Reason"},"auto_adopt_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auto Adopt At"},"reviewed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed At"},"tips_summary":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Tips Summary","default":[]},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","post_id","content","created_at"],"title":"ReplyOut"},"ReportCreate":{"properties":{"reason":{"type":"string","maxLength":30,"minLength":1,"title":"Reason"},"detail":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Detail"}},"type":"object","required":["reason"],"title":"ReportCreate"},"ReportHandle":{"properties":{"action":{"type":"string","pattern":"^(verified|rejected)$","title":"Action"},"note":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Note"}},"type":"object","required":["action"],"title":"ReportHandle"},"RequiredRule":{"properties":{"field":{"type":"string","title":"Field"},"operator":{"type":"string","title":"Operator"},"value":{"title":"Value"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","required":["field","operator","value"],"title":"RequiredRule"},"ResumeUploadResponse":{"properties":{"file_id":{"type":"string","title":"File Id"},"file_name":{"type":"string","title":"File Name"},"parse_status":{"type":"string","title":"Parse Status"},"message":{"type":"string","title":"Message"}},"type":"object","required":["file_id","file_name","parse_status","message"],"title":"ResumeUploadResponse"},"RoleAssign":{"properties":{"user_id":{"type":"string","title":"User Id","description":"目标用户 ID"},"role":{"type":"string","title":"Role","description":"member / moderator / admin"}},"type":"object","required":["user_id","role"],"title":"RoleAssign"},"SearchRequest":{"properties":{"query":{"type":"string","title":"Query"},"max_results":{"type":"integer","title":"Max Results","default":20},"min_match_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Match Score","default":0.0}},"type":"object","required":["query"],"title":"SearchRequest"},"SearchResponse":{"properties":{"query_id":{"type":"string","title":"Query Id"},"query_summary":{"type":"string","title":"Query Summary"},"total_hard_filtered":{"type":"integer","title":"Total Hard Filtered"},"results":{"items":{"$ref":"#/components/schemas/CandidateSearchResult"},"type":"array","title":"Results"},"ai_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Summary"},"degraded":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Degraded"},"degraded_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Degraded Reason"}},"type":"object","required":["query_id","query_summary","total_hard_filtered","results"],"title":"SearchResponse"},"SendCodeRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"SendCodeRequest"},"SendTipRequest":{"properties":{"item_key":{"type":"string","title":"Item Key","description":"消耗的道具标识"},"quantity":{"type":"integer","maximum":999.0,"minimum":1.0,"title":"Quantity","description":"赠送数量","default":1},"post_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Id","description":"打赏给帖子"},"reply_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reply Id","description":"打赏给楼层回复"}},"type":"object","required":["item_key"],"title":"SendTipRequest"},"SetDefaultCompanyRequest":{"properties":{"company_id":{"type":"string","format":"uuid","title":"Company Id","description":"要设为默认的企业主体ID"}},"type":"object","required":["company_id"],"title":"SetDefaultCompanyRequest"},"ShellTransferCreate":{"properties":{"recipient_user_id":{"type":"string","title":"Recipient User Id","description":"接收人用户 ID"},"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount","description":"转账贝壳数量（最低 0.00000001，支持8位小数）"},"note":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Note","description":"转账附言/备注"}},"type":"object","required":["recipient_user_id","amount"],"title":"ShellTransferCreate"},"SkillCreate":{"properties":{"name":{"type":"string","title":"Name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"level":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Level"},"years":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Years"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence","default":1.0},"evidence":{"anyOf":[{"items":{"$ref":"#/components/schemas/SkillEvidenceCreate"},"type":"array"},{"type":"null"}],"title":"Evidence"}},"type":"object","required":["name"],"title":"SkillCreate"},"SkillEvidenceCreate":{"properties":{"evidence_type":{"type":"string","title":"Evidence Type"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["evidence_type"],"title":"SkillEvidenceCreate"},"SkillEvidenceResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"evidence_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Type"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"verified":{"type":"boolean","title":"Verified"}},"type":"object","required":["id","evidence_type","url","description","verified"],"title":"SkillEvidenceResponse"},"SkillResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Level"},"years":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Years"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"evidence":{"anyOf":[{"items":{"$ref":"#/components/schemas/SkillEvidenceResponse"},"type":"array"},{"type":"null"}],"title":"Evidence","default":[]}},"type":"object","required":["id","name","category","level","years","context","confidence"],"title":"SkillResponse"},"SsoTicketBody":{"properties":{"ticket":{"type":"string","minLength":1,"title":"Ticket"}},"type":"object","required":["ticket"],"title":"SsoTicketBody"},"SsoTicketResponse":{"properties":{"ticket":{"type":"string","title":"Ticket"},"expires_in":{"type":"integer","title":"Expires In"}},"type":"object","required":["ticket","expires_in"],"title":"SsoTicketResponse"},"SsoValidateResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"role":{"type":"string","title":"Role"},"jti":{"type":"string","title":"Jti"}},"type":"object","required":["user_id","role","jti"],"title":"SsoValidateResponse"},"StructuredSearchRequest":{"properties":{"required":{"anyOf":[{"items":{"$ref":"#/components/schemas/RequiredRule"},"type":"array"},{"type":"null"}],"title":"Required"},"preferred":{"anyOf":[{"$ref":"#/components/schemas/PreferredConditions"},{"type":"null"}]},"max_results":{"type":"integer","title":"Max Results","default":20},"scoring_required":{"anyOf":[{"items":{"$ref":"#/components/schemas/RequiredRule"},"type":"array"},{"type":"null"}],"title":"Scoring Required"}},"type":"object","title":"StructuredSearchRequest"},"TaskInfoOut":{"properties":{"task_title":{"type":"string","title":"Task Title"},"bounty_per_winner":{"type":"number","title":"Bounty Per Winner"},"max_winners":{"type":"integer","title":"Max Winners"},"adopted_count":{"type":"integer","title":"Adopted Count"},"community_fee":{"type":"number","title":"Community Fee"},"total_deposit":{"type":"number","title":"Total Deposit"},"completion_guide":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completion Guide"},"completion_guide_images":{"items":{"type":"string"},"type":"array","title":"Completion Guide Images","default":[]},"task_status":{"type":"string","title":"Task Status"}},"type":"object","required":["task_title","bounty_per_winner","max_winners","adopted_count","community_fee","total_deposit","task_status"],"title":"TaskInfoOut"},"TaskReviewAction":{"properties":{"reject_reason":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Reject Reason","description":"拒绝理由（拒绝时必填）"}},"type":"object","title":"TaskReviewAction"},"UpdateRoleRequest":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"role":{"type":"string","pattern":"^(candidate|employer)$","title":"Role"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"ticket":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticket"}},"type":"object","required":["user_id","role"],"title":"UpdateRoleRequest"},"UploadResumeAttachmentRequest":{"properties":{"file_name":{"type":"string","title":"File Name","description":"附件原始文件名，如 my_resume.docx"},"file_base64":{"type":"string","title":"File Base64","description":"附件内容 base64 编码"},"file_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Type","description":"附件类型：pdf/doc/docx/jpg/jpeg/png"}},"type":"object","required":["file_name","file_base64"],"title":"UploadResumeAttachmentRequest"},"UserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"email_verified":{"type":"boolean","title":"Email Verified"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","email","role","email_verified","created_at"],"title":"UserResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WorkExperienceCreate":{"properties":{"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"duration_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Months"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"responsibilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Responsibilities"},"achievements":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Achievements"},"tech_stack":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tech Stack"},"team_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Size"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order","default":0}},"type":"object","title":"WorkExperienceCreate"},"WorkExperienceResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"duration_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Months"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"responsibilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Responsibilities"},"achievements":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Achievements"},"tech_stack":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tech Stack"},"team_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Size"},"ai_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Summary"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","required":["id","company","role","start_date","end_date","duration_months","industry","responsibilities","achievements","tech_stack","team_size","ai_summary","confidence","sort_order"],"title":"WorkExperienceResponse"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/v1/auth/oauth/token"}}}}}}