| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- """试题篮路由"""
- from fastapi import APIRouter, Request, HTTPException, Depends
- from app.database import (
- get_connection, get_carts, create_cart, delete_cart, get_cart,
- add_cart_item, remove_cart_item,
- )
- from app.routers.auth import verify_token
- router = APIRouter()
- @router.get("/carts")
- def list_carts(request: Request, _=Depends(verify_token)):
- """篮子列表"""
- config = request.app.state.config
- conn = get_connection(config.db_path)
- try:
- return {"carts": get_carts(conn)}
- finally:
- conn.close()
- @router.post("/carts")
- def new_cart(request: Request, body: dict, _=Depends(verify_token)):
- """创建篮子"""
- name = body.get("name", "未命名")
- config = request.app.state.config
- conn = get_connection(config.db_path)
- try:
- cart = create_cart(conn, name)
- return cart
- finally:
- conn.close()
- @router.delete("/carts/{cart_id}")
- def remove_cart(request: Request, cart_id: int, _=Depends(verify_token)):
- """删除篮子"""
- config = request.app.state.config
- conn = get_connection(config.db_path)
- try:
- delete_cart(conn, cart_id)
- return {"ok": True}
- finally:
- conn.close()
- @router.get("/carts/{cart_id}")
- def cart_detail(request: Request, cart_id: int, _=Depends(verify_token)):
- """篮子详情(含题目列表)"""
- config = request.app.state.config
- conn = get_connection(config.db_path)
- try:
- cart = get_cart(conn, cart_id)
- if not cart:
- raise HTTPException(status_code=404, detail={
- "error": {"code": "not_found", "message": f"篮子 {cart_id} 不存在"}
- })
- return cart
- finally:
- conn.close()
- @router.post("/carts/{cart_id}/items")
- def add_item(request: Request, cart_id: int, body: dict, _=Depends(verify_token)):
- """添加题目到篮子"""
- problem_id = body.get("problem_id", "")
- config = request.app.state.config
- conn = get_connection(config.db_path)
- try:
- ok = add_cart_item(conn, cart_id, problem_id)
- if not ok:
- return {"ok": False, "message": "题目不存在或已存在于篮子中"}
- return {"ok": True}
- finally:
- conn.close()
- @router.delete("/carts/{cart_id}/items/{problem_id}")
- def remove_item(request: Request, cart_id: int, problem_id: str, _=Depends(verify_token)):
- """从篮子移除题目"""
- config = request.app.state.config
- conn = get_connection(config.db_path)
- try:
- remove_cart_item(conn, cart_id, problem_id)
- return {"ok": True}
- finally:
- conn.close()
- @router.post("/carts/{cart_id}/clear")
- def clear_cart(request: Request, cart_id: int, _=Depends(verify_token)):
- """清空篮子"""
- config = request.app.state.config
- conn = get_connection(config.db_path)
- try:
- conn.execute("DELETE FROM cart_items WHERE cart_id = ?", (cart_id,))
- conn.commit()
- return {"ok": True}
- finally:
- conn.close()
|