feat(api): 长语音 voice_clip 后端(model+migration+scraper+sync+endpoint)
- VoiceClip model (BigInteger PK voice_clip_id, structured cols + raw_json)
- Alembic migration a1b2c3d4e5f6 (chains from 8c4f1d2a9e6b)
- scrape_voice_clips(client, user_id, *, channel, page_size) per-employee scraper
over POST /wechatweb/call/list {pageNum, pageSize, userId}; channel stamped
locally (wechat/whatsapp), startTime/endTime ms-epoch string -> int
- upsert_voice_clip repo + start_time/end_time/mp3_duration int coercion
- sync_voice_clips orchestrator: iterates distinct user_id across
WechatAccount + WhatsappAccount, stamps channel per account table
- scheduler ENTITY_FUNCS['voice_clips'] + added to daily 'all' job
- GET /api/voice-clips (user_id exact beats user_real_name fuzzy; channel;
company_code; start/end window on end_time; ordered end_time desc)
- VoiceClipOut schema + router registered in main.py
- tests: scraper (5) + API (11) = 16 new; full suite 370 green
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,7 @@ Includes:
|
||||
(see :mod:`app.api.routers.groups`).
|
||||
* ``GET /api/calls`` (see :mod:`app.api.routers.calls`).
|
||||
* ``GET /api/sms`` (see :mod:`app.api.routers.sms`).
|
||||
* ``GET /api/voice-clips`` (see :mod:`app.api.routers.voice_clips`).
|
||||
* ``GET /api/sync/status`` (see :mod:`app.api.routers.sync`).
|
||||
* ``GET /api/search`` (see :mod:`app.api.routers.search`).
|
||||
* ``GET /api/export/chat-html`` (see :mod:`app.api.routers.export`).
|
||||
@@ -49,6 +50,7 @@ from app.api.routers import (
|
||||
sms,
|
||||
staff_chat_stats,
|
||||
sync,
|
||||
voice_clips,
|
||||
)
|
||||
|
||||
app = FastAPI(title="yunke data mirror", dependencies=[Depends(require_auth)])
|
||||
@@ -72,6 +74,7 @@ app.include_router(sync.router)
|
||||
app.include_router(search.router)
|
||||
app.include_router(sessions.router)
|
||||
app.include_router(export.router)
|
||||
app.include_router(voice_clips.router)
|
||||
|
||||
|
||||
@app.get("/api/health")
|
||||
|
||||
Reference in New Issue
Block a user