hulai-admin-api/app/routers/customize.py
刘涛 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

105 行
3.4 KiB
Python

from __future__ import annotations
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from app.database import get_db
from app.auth import get_current_user
from app.models.customize_submission import CustomizeSubmission
from app.models.customize_config import CustomizeConfig
from app.schemas.customize_submission import (
CustomizeSubmissionResponse,
CustomizeSubmissionListResponse,
CustomizeStatusUpdate,
)
from app.schemas.customize_config import CustomizeConfigSchema
router = APIRouter(
prefix="/api/customize",
tags=["定制表单"],
dependencies=[Depends(get_current_user)],
)
@router.get("/submissions", response_model=CustomizeSubmissionListResponse)
def list_submissions(
page: int = Query(1, ge=1),
page_size: int = Query(20, ge=1, le=100),
keyword: str = Query("", description="搜索姓名/电话/微信"),
status: str = Query("", description="状态筛选: pending/processed"),
db: Session = Depends(get_db),
):
query = db.query(CustomizeSubmission)
if keyword:
query = query.filter(
CustomizeSubmission.name.contains(keyword)
| CustomizeSubmission.phone.contains(keyword)
| CustomizeSubmission.wechat.contains(keyword)
)
if status in ("pending", "processed"):
query = query.filter(CustomizeSubmission.status == status)
total = query.count()
items = (
query.order_by(CustomizeSubmission.id.desc())
.offset((page - 1) * page_size)
.limit(page_size)
.all()
)
return CustomizeSubmissionListResponse(
items=[CustomizeSubmissionResponse.model_validate(i) for i in items],
total=total,
)
@router.get("/submissions/{submission_id}", response_model=CustomizeSubmissionResponse)
def get_submission(submission_id: int, db: Session = Depends(get_db)):
item = db.query(CustomizeSubmission).get(submission_id)
if not item:
raise HTTPException(status_code=404, detail="记录不存在")
return CustomizeSubmissionResponse.model_validate(item)
@router.put("/submissions/{submission_id}/status")
def update_status(
submission_id: int,
req: CustomizeStatusUpdate,
db: Session = Depends(get_db),
):
item = db.query(CustomizeSubmission).get(submission_id)
if not item:
raise HTTPException(status_code=404, detail="记录不存在")
item.status = req.status
db.commit()
return {"message": "状态更新成功"}
# --- Customize Config ---
@router.get("/config", response_model=CustomizeConfigSchema)
def get_config(db: Session = Depends(get_db)):
cfg = db.query(CustomizeConfig).first()
if not cfg:
return CustomizeConfigSchema()
return CustomizeConfigSchema(
trust_stats=cfg.trust_stats or [],
durations=cfg.durations or [],
activities=cfg.activities or [],
budgets=cfg.budgets or [],
process=cfg.process or [],
contact=cfg.contact or {},
)
@router.put("/config")
def update_config(req: CustomizeConfigSchema, db: Session = Depends(get_db)):
cfg = db.query(CustomizeConfig).first()
if not cfg:
cfg = CustomizeConfig()
db.add(cfg)
cfg.trust_stats = req.trust_stats
cfg.durations = req.durations
cfg.activities = req.activities
cfg.budgets = req.budgets
cfg.process = req.process
cfg.contact = req.contact
db.commit()
return {"message": "更新成功"}