feat: 完成源晶权限与经验系统并优化 me/admin 交互
这个提交包含在:
@@ -6,10 +6,35 @@
|
||||
|
||||
## 通用约定
|
||||
|
||||
- 鉴权头:`Authorization: Bearer <token>`
|
||||
- 鉴权头(二选一):
|
||||
- `Authorization: Bearer <token>`(推荐)
|
||||
- `Authorization: Basic <base64(username:password)>`(第三方直连更方便)
|
||||
- 成功响应:`{ "ok": true, "data": ... }`(Auth 接口除外)
|
||||
- 失败响应:`{ "ok": false, "error": "..." }`
|
||||
|
||||
### 第三方接入快速示例
|
||||
|
||||
1) 登录拿 token(Bearer 方式)
|
||||
```bash
|
||||
curl -X POST 'https://csp.hao.work/admin139/api/v1/auth/login' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"username":"alice","password":"password123"}'
|
||||
```
|
||||
|
||||
2) Bearer 调用
|
||||
```bash
|
||||
curl 'https://csp.hao.work/admin139/api/v1/me' \
|
||||
-H 'Authorization: Bearer <token>'
|
||||
```
|
||||
|
||||
3) Basic 直接调用
|
||||
```bash
|
||||
curl 'https://csp.hao.work/admin139/api/v1/me' \
|
||||
-H 'Authorization: Basic YWxpY2U6cGFzc3dvcmQxMjM='
|
||||
```
|
||||
|
||||
> `YWxpY2U6cGFzc3dvcmQxMjM=` 是 `alice:password123` 的 Base64。
|
||||
|
||||
---
|
||||
|
||||
## 1) Auth
|
||||
@@ -65,7 +90,7 @@
|
||||
```
|
||||
- `contest_id` 可选;若提交到比赛,需已报名且比赛进行中。
|
||||
|
||||
### `GET /submissions?user_id=&problem_id=&contest_id=&page=&page_size=`
|
||||
### `GET /submissions?user_id=&problem_id=&contest_id=&created_from=&created_to=&page=&page_size=`
|
||||
返回提交列表。
|
||||
|
||||
### `GET /submissions/:id`
|
||||
@@ -120,6 +145,24 @@
|
||||
### `GET /kb/articles/:slug`
|
||||
返回文章详情与关联题目。
|
||||
|
||||
### `GET /kb/articles/:slug/claims`(需鉴权)
|
||||
返回当前用户在该文章下已领取知识点和累计积分。
|
||||
|
||||
### `POST /kb/articles/:slug/claim`(需鉴权)
|
||||
请求:
|
||||
```json
|
||||
{ "knowledge_key": "cpp14-io-01" }
|
||||
```
|
||||
说明:
|
||||
- 有前置依赖的知识点,若前置未完成会返回 400。
|
||||
- 同一知识点不可重复领取积分。
|
||||
|
||||
### `GET /kb/weekly-plan`(需鉴权)
|
||||
返回本周自动生成的学习任务(含完成度、奖励汇总)。
|
||||
|
||||
### `POST /kb/weekly-bonus/claim`(需鉴权)
|
||||
领取本周任务 100% 完成奖励;未达 100% 返回 400。
|
||||
|
||||
---
|
||||
|
||||
## 8) 题库导入任务(PDF + LLM)
|
||||
@@ -157,3 +200,53 @@
|
||||
|
||||
### `GET /backend/logs?limit=100`
|
||||
返回最近题解生成任务日志(按任务 ID 倒序),并包含当前排队任务数 `pending_jobs`。
|
||||
|
||||
### `GET /backend/db-lock-guard/status`(需管理员鉴权)
|
||||
返回 SQLite 锁守护运行状态,字段包含:
|
||||
- `enabled` / `started`:守护是否启用、是否已启动
|
||||
- `interval_sec` / `probe_busy_timeout_ms`:探测间隔与超时
|
||||
- `busy_streak` / `busy_streak_trigger`:当前连续锁冲突计数与触发阈值
|
||||
- `last_probe_at` / `last_probe_rc` / `last_probe_error`:最近探测结果
|
||||
- `last_repair_at` / `repair_count`:最近一次自愈时间与累计自愈次数
|
||||
|
||||
---
|
||||
|
||||
## 10) 网站爬虫列表(管理员)
|
||||
|
||||
### `GET /admin/crawlers?status=&limit=`
|
||||
返回爬虫目标列表(按最新倒序)。
|
||||
|
||||
### `POST /admin/crawlers`
|
||||
手动新增爬虫目标。请求体示例:
|
||||
```json
|
||||
{ "url": "https://example.com" }
|
||||
```
|
||||
|
||||
### `POST /admin/crawlers/:id/queue`
|
||||
将目标重新入队,触发“规则生成 -> 自动测试 -> 自动运行”流程。
|
||||
|
||||
### `GET /admin/crawlers/:id/runs?limit=20`
|
||||
查看指定目标的运行记录。
|
||||
|
||||
### `GET /backend/crawler-guard/status`(需管理员鉴权)
|
||||
返回爬虫守护进程状态(是否启用、是否运行、处理统计、最近错误等)。
|
||||
- `active_requeue_interval_sec` 表示活跃目标的周期重跑间隔(秒,默认 43200 即 12 小时)。
|
||||
|
||||
> 飞书群内 `@机器人` 文本如果包含 URL,也会自动写入爬虫目标列表并触发守护流程。
|
||||
|
||||
---
|
||||
|
||||
## 11) Lark 机器人事件回调
|
||||
|
||||
### `POST /lark/events`
|
||||
用于飞书(Lark)事件订阅回调,支持:
|
||||
- URL 验证:请求体带 `challenge` 时回传 `{ "challenge": "..." }`
|
||||
- 消息事件:处理 `im.message.receive_v1` 文本消息并异步回复
|
||||
|
||||
环境变量(后端):
|
||||
- `CSP_LARK_BOT_ENABLED=true`:是否启用机器人
|
||||
- `CSP_LARK_VERIFICATION_TOKEN=...`:事件回调 token(可选,建议配置)
|
||||
- `CSP_LARK_APP_ID=...` / `CSP_LARK_APP_SECRET=...`:飞书应用凭据
|
||||
- `CSP_LARK_OPEN_BASE_URL=https://open.feishu.cn`:飞书 OpenAPI 域名
|
||||
- `CSP_LARK_LLM_API_URL=...` / `CSP_LARK_LLM_API_KEY=...` / `CSP_LARK_LLM_MODEL=...`:对话模型配置
|
||||
- 可选:`CSP_LARK_LLM_SYSTEM_PROMPT`、`CSP_LARK_MEMORY_TURNS`、`CSP_LARK_MAX_REPLY_CHARS`
|
||||
|
||||
在新工单中引用
屏蔽一个用户