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": "更新成功"}