刘涛 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

60 行
2.2 KiB
Python

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": "品牌信息更新成功"}