105 行
3.4 KiB
Python
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": "更新成功"}
|