60 行
2.2 KiB
Python
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": "品牌信息更新成功"}
|