刘涛 8c0a5f489d Initial commit: hulai admin API backend
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 22:01:23 +08:00

91 行
3.3 KiB
Python

from __future__ import annotations
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from sqlalchemy import func as sqlfunc
from app.database import get_db
from app.auth import get_current_user
from app.models.faq import FaqCategory, FaqQuestion
from app.schemas.faq import FaqCategorySchema, FaqCategoryResponse, FaqQuestionSchema, FaqQuestionResponse
router = APIRouter(prefix="/api/faq", tags=["常见问答"], dependencies=[Depends(get_current_user)])
@router.get("/categories", response_model=list[FaqCategoryResponse])
def list_categories(db: Session = Depends(get_db)):
cats = db.query(FaqCategory).order_by(FaqCategory.sort_order).all()
return [FaqCategoryResponse.model_validate(c) for c in cats]
@router.post("/categories", response_model=FaqCategoryResponse, status_code=201)
def create_category(req: FaqCategorySchema, db: Session = Depends(get_db)):
max_order = db.query(sqlfunc.max(FaqCategory.sort_order)).scalar() or 0
cat = FaqCategory(category_id=req.category_id, name=req.name, sort_order=max_order + 1)
db.add(cat)
db.commit()
db.refresh(cat)
return FaqCategoryResponse.model_validate(cat)
@router.put("/categories/{cat_id}")
def update_category(cat_id: int, req: FaqCategorySchema, db: Session = Depends(get_db)):
cat = db.query(FaqCategory).get(cat_id)
if not cat:
raise HTTPException(status_code=404, detail="分类不存在")
cat.category_id = req.category_id
cat.name = req.name
db.commit()
return {"message": "更新成功"}
@router.delete("/categories/{cat_id}")
def delete_category(cat_id: int, db: Session = Depends(get_db)):
cat = db.query(FaqCategory).get(cat_id)
if not cat:
raise HTTPException(status_code=404, detail="分类不存在")
db.delete(cat)
db.commit()
return {"message": "删除成功"}
@router.post("/questions", response_model=FaqQuestionResponse, status_code=201)
def create_question(req: FaqQuestionSchema, category_id: int = None, db: Session = Depends(get_db)):
if not category_id:
raise HTTPException(status_code=400, detail="必须指定分类")
max_order = db.query(sqlfunc.max(FaqQuestion.sort_order)).filter(FaqQuestion.category_id == category_id).scalar() or 0
q = FaqQuestion(
category_id=category_id,
question_id=req.question_id,
question=req.question,
answer=req.answer,
related_links=[link.model_dump() for link in req.related_links],
sort_order=max_order + 1,
)
db.add(q)
db.commit()
db.refresh(q)
return FaqQuestionResponse.model_validate(q)
@router.put("/questions/{q_id}")
def update_question(q_id: int, req: FaqQuestionSchema, db: Session = Depends(get_db)):
q = db.query(FaqQuestion).get(q_id)
if not q:
raise HTTPException(status_code=404, detail="问题不存在")
q.question_id = req.question_id
q.question = req.question
q.answer = req.answer
q.related_links = [link.model_dump() for link in req.related_links]
db.commit()
return {"message": "更新成功"}
@router.delete("/questions/{q_id}")
def delete_question(q_id: int, db: Session = Depends(get_db)):
q = db.query(FaqQuestion).get(q_id)
if not q:
raise HTTPException(status_code=404, detail="问题不存在")
db.delete(q)
db.commit()
return {"message": "删除成功"}