3.6 KiB
3.6 KiB
API Reference
작성: AI / 수정: nkey
Base URL
- 로컬:
http://localhost:8000
Authentication
- Admin API 전용
- Header:
X-Admin-Password: <ADMIN_PASSWORD> ADMIN_PASSWORD미설정 시 admin API는 500으로 실패합니다.
- Header:
Endpoints (Top)
GET /
상태 확인(헬스체크).
curl -s http://localhost:8000/
GET /today
오늘의 추천 문제를 반환합니다. 기본은 solved.ac 검색(search) 모드이며, workbook 모드로도 동작합니다.
Query Parameters
source_mode(string):search|workbook(기본값:SOURCE_MODE_DEFAULT또는search)- workbook 모드:
workbook_id(int, optional): workbook id. 미지정 시WORKBOOK_ID_DEFAULT사용 시도workbook_pick(string):random|level_asc(기본:level_asc)
- search 모드(필터):
difficulty_mode(string):easy|hard|all(기본값:DIFFICULTY_MODE_DEFAULT또는easy)tag_mode(string):easy|hard|all(기본값:TAG_MODE_DEFAULT또는easy)difficulty(string, optional): 예6..10(지정 시difficulty_mode보다 우선)tags(string, optional): 예dp,graphs(지정 시tag_mode보다 우선)lang(string):ko | en | ko,en | all(기본값:LANG_DEFAULT또는all)
Examples
- 기본(search) 모드:
curl -s "http://localhost:8000/today" | cat
- 난이도/태그/언어 직접 지정:
curl -s "http://localhost:8000/today?difficulty=6..10&tags=dp,graphs&lang=ko,en" | cat
- workbook 모드:
curl -s "http://localhost:8000/today?source_mode=workbook&workbook_id=12345&workbook_pick=level_asc" | cat
Response (성공 예시 형태)
- 공통:
problemId,title,level,problemUrl,solvedUrl,discordPayload포함 - search 모드:
query,difficulty,tags,difficulty_mode,tag_mode,lang포함 - workbook 모드:
workbook_id포함
Errors
- workbook 모드에서
workbook_id를 확정할 수 없을 때: 400 - workbook 모드에서 더 이상 뽑을 문제가 없을 때: 409 (
no_more_problems_in_workbook) - search 모드에서 solved.ac 조회 실패: 503 (
failed_to_fetch_problem)
POST /admin/workbooks/{workbook_id}/enrich
workbook에 포함된 문제들의 메타(제목/레벨/태그)를 solved.ac problem/show로 채웁니다. (DB 필요)
Auth
X-Admin-Password필요
Query Parameters
only_missing(bool, defaulttrue):true면 NULL만 채움 /false면 덮어씀commit_every(int, default50, 1~500): 몇 개마다 commit할지sleep_sec(float, default0.12, 0.0~2.0): solved.ac 호출 사이 대기
Example
curl -s -X POST \
-H "X-Admin-Password: change-me" \
"http://localhost:8000/admin/workbooks/12345/enrich?only_missing=true&commit_every=50&sleep_sec=0.12" | cat
Response
status: okresult에target_count,updated,skipped,failed등 요약 포함
DELETE /admin/workbooks/{workbook_id}/reset
해당 workbook의 전송(픽) 기록을 초기화하여, 다시 문제를 뽑을 수 있게 합니다. (DB 필요)
Auth
X-Admin-Password필요
Example
curl -s -X DELETE \
-H "X-Admin-Password: change-me" \
"http://localhost:8000/admin/workbooks/12345/reset" | cat
Response
deleted_sends: 삭제된 기록 수
Data Models (참고)
discordPayload는 Discord Webhook/봇 메시지에 사용할 수 있는embeds구조를 포함합니다.- 실제 전송(Discord webhook 호출)은 이 서비스 밖(외부 스케줄러/워크플로우)에서 수행하는 것을 전제로 합니다.