forked from baskbuddy/zhangshun
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.6 KiB
3.6 KiB
岗位搜索 API
接口列表
1. GET /api/v1/jobs/search
岗位高级搜索。仅返回 PUBLISHED 岗位,CLOSED 和 DRAFT 不出现在结果中。
公开访问,无需认证。
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| keyword | String | 否 | - | 搜索标题/描述/要求关键词 |
| city | String | 否 | - | 城市精确匹配 |
| employmentType | String | 否 | - | 用工类型精确匹配 |
| salaryMin | Integer | 否 | - | 最低薪资筛选(岗位 salaryMax >= salaryMin) |
| salaryMax | Integer | 否 | - | 最高薪资筛选(岗位 salaryMin <= salaryMax) |
| companyId | Long | 否 | - | 按公司筛选 |
| sort | String | 否 | latest | latest / salary / relevance |
| page | int | 否 | 0 | 页码,>= 0 |
| size | int | 否 | 20 | 每页条数,1-50 |
排序规则
| sort 值 | 排序 |
|---|---|
| latest(默认) | createdAt DESC, id DESC |
| salary | salaryMax DESC, id DESC |
| relevance | createdAt DESC, id DESC(本期按 latest 兜底) |
薪资筛选规则
- salaryMin:仅返回
job.salaryMax >= salaryMin的岗位 - salaryMax:仅返回
job.salaryMin <= salaryMax的岗位 - salaryMin > salaryMax 返回 400 (code=1001)
- 薪资字段为 NULL 的岗位不参与薪资范围筛选
错误码
| 场景 | HTTP | code |
|---|---|---|
| salaryMin > salaryMax | 400 | 1001 |
| sort 非法值 | 400 | 1001 |
| page < 0 | 400 | 1001 |
| size < 1 或 size > 50 | 400 | 1001 |
响应 200
{
"code": 200,
"message": "ok",
"data": {
"items": [
{
"id": 1,
"title": "Java开发工程师",
"description": "负责后端服务开发...",
"requirements": "3年以上Java经验...",
"city": "北京",
"employmentType": "FULL_TIME",
"salaryMin": 15000,
"salaryMax": 25000,
"status": "PUBLISHED",
"publishedAt": "2026-08-01T10:00:00",
"createdAt": "2026-08-01T09:00:00",
"company": {
"id": 1,
"name": "XX科技有限公司",
"logoUrl": "https://cdn.example.com/logo.png",
"verified": true
}
}
],
"total": 100,
"page": 0,
"size": 20,
"totalPages": 5
}
}
2. GET /api/v1/jobs/filters
岗位筛选选项。数据仅来自 PUBLISHED 岗位。
公开访问,无需认证。
响应 200
{
"code": 200,
"message": "ok",
"data": {
"cities": ["北京", "上海", "深圳"],
"employmentTypes": ["FULL_TIME", "INTERN", "PART_TIME"],
"salaryRange": {
"min": 5000,
"max": 50000
}
}
}
空数据
{
"cities": [],
"employmentTypes": [],
"salaryRange": {
"min": null,
"max": null
}
}
排序规则
- cities:按城市名自然排序(ASC),去重
- employmentTypes:按枚举值自然排序(ASC),去重
- salaryRange:min 取 MIN(salaryMin),max 取 MAX(salaryMax),排除 NULL
3. 兼容性说明
| 端点 | 行为 |
|---|---|
| GET /jobs | 完全不变。路径、参数、返回结构、状态码、权限语义均保持现有实现。 |
| GET /jobs/public/{jobId} | 完全不变。PUBLISHED 和 CLOSED 均可查看详情。 |
| GET /jobs/search | 新增。仅返回 PUBLISHED。 |
| GET /jobs/filters | 新增。仅基于 PUBLISHED。 |
公开 DTO 字段
搜索结果仅返回以下公开字段,不泄露:
ownerUserId(企业关联用户)- 企业联系方式(website、address)
- 企业内部时间戳(updatedAt)
- 审核信息(company_verifications.*)