from fastapi import APIRouter, Cookie, HTTPException from app.db import chat_assistant_db from app.services.chat_assistant import answer_chat from app.web.shared import ChatSendRequest, ChatSessionRequest, require_api_user_with_subscription router = APIRouter() @router.get("/api/chat/bootstrap") async def api_chat_bootstrap(altcoin_session: str = Cookie(default="")): user = require_api_user_with_subscription(altcoin_session) return chat_assistant_db.bootstrap_chat(user["id"]) @router.get("/api/chat/sessions") async def api_chat_sessions(limit: int = 20, offset: int = 0, altcoin_session: str = Cookie(default="")): user = require_api_user_with_subscription(altcoin_session) return chat_assistant_db.list_chat_sessions(user["id"], limit=limit, offset=offset) @router.post("/api/chat/sessions") async def api_chat_create_session(req: ChatSessionRequest, altcoin_session: str = Cookie(default="")): user = require_api_user_with_subscription(altcoin_session) return {"ok": True, "session": chat_assistant_db.create_chat_session(user["id"], title=req.title)} @router.get("/api/chat/sessions/{session_id}") async def api_chat_session_detail(session_id: int, altcoin_session: str = Cookie(default="")): user = require_api_user_with_subscription(altcoin_session) session = chat_assistant_db.get_chat_session(session_id, user["id"]) if not session: raise HTTPException(status_code=404, detail="对话不存在") messages = chat_assistant_db.list_chat_messages(session_id, user["id"], limit=200) return {"ok": True, "session": session, "messages": messages} @router.delete("/api/chat/sessions/{session_id}") async def api_chat_archive_session(session_id: int, altcoin_session: str = Cookie(default="")): user = require_api_user_with_subscription(altcoin_session) session = chat_assistant_db.update_chat_session(session_id, user["id"], archived_at="now") if not session: raise HTTPException(status_code=404, detail="对话不存在") return {"ok": True} @router.post("/api/chat/send") async def api_chat_send(req: ChatSendRequest, altcoin_session: str = Cookie(default="")): user = require_api_user_with_subscription(altcoin_session) try: return answer_chat(user["id"], req.message, session_id=req.session_id) except ValueError as exc: raise HTTPException(status_code=400, detail=str(exc))