from __future__ import annotations from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from app.database import get_db from app.auth import get_current_user from app.models.brand import Brand, BrandTrustStat, BrandDifferentiator from app.schemas.brand import BrandFullSchema, BrandUpdateRequest router = APIRouter(prefix="/api/brand", tags=["品牌"], dependencies=[Depends(get_current_user)]) @router.get("/", response_model=BrandFullSchema) def get_brand(db: Session = Depends(get_db)): brand = db.query(Brand).first() if not brand: raise HTTPException(status_code=404, detail="品牌信息未初始化") return BrandFullSchema( id=brand.id, name=brand.name, full_name=brand.full_name, domain=brand.domain, url=brand.url, slogan_emotional=brand.slogan_emotional, slogan_functional=brand.slogan_functional, icp_entity=brand.icp_entity, icp=brand.icp, icp_url=brand.icp_url, e_contract=brand.e_contract, trust_stats=[{"value": s.value, "unit": s.unit, "label": s.label} for s in brand.trust_stats], differentiators=[{"title": d.title, "description": d.description} for d in brand.differentiators], cta_buttons=brand.cta_buttons, conversion_path=brand.conversion_path, ) @router.put("/") def update_brand(req: BrandUpdateRequest, db: Session = Depends(get_db)): brand = db.query(Brand).first() if not brand: brand = Brand() db.add(brand) for key, val in req.brand.model_dump().items(): setattr(brand, key, val) db.flush() # Replace trust stats db.query(BrandTrustStat).filter(BrandTrustStat.brand_id == brand.id).delete() for i, stat in enumerate(req.trust_stats): db.add(BrandTrustStat(brand_id=brand.id, value=stat.value, unit=stat.unit, label=stat.label, sort_order=i)) # Replace differentiators db.query(BrandDifferentiator).filter(BrandDifferentiator.brand_id == brand.id).delete() for i, diff in enumerate(req.differentiators): db.add(BrandDifferentiator(brand_id=brand.id, title=diff.title, description=diff.description, sort_order=i)) db.commit() return {"message": "品牌信息更新成功"}