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

362 行
13 KiB
Python

from __future__ import annotations
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app.database import get_db
from app.auth import get_current_user
from app.models.about import (
AboutStory, AboutSubsidiary, AboutCertification, AboutTrademark,
AboutCopyright, AboutGuarantee, AboutXiaohongshu, AboutTeam,
AboutCulture, AboutCultureValue,
AboutFounderDetail, AboutFounder, AboutMilestone,
AboutServicePrinciple, AboutDifferentiation,
AboutServiceJourney, AboutServiceMoment, AboutStats,
)
from app.schemas.about import (
StorySchema, SubsidiarySchema, CertificationSchema, TrademarkSchema,
CopyrightSchema, GuaranteeSchema, XiaohongshuSchema, TeamSchema,
CultureSchema, FounderDetailSchema, FounderSchema, MilestoneSchema,
ServicePrincipleSchema, DifferentiationSchema,
ServiceJourneySchema, ServiceMomentSchema, AboutStatsSchema,
)
router = APIRouter(prefix="/api/about", tags=["关于我们"], dependencies=[Depends(get_current_user)])
# --- Story ---
@router.get("/story", response_model=StorySchema)
def get_story(db: Session = Depends(get_db)):
story = db.query(AboutStory).first()
if not story:
return StorySchema()
return StorySchema(
title=story.title, content=story.content, founding_moment=story.founding_moment,
totem_description=story.totem_description, totem_tagline=story.totem_tagline,
)
@router.put("/story")
def update_story(req: StorySchema, db: Session = Depends(get_db)):
story = db.query(AboutStory).first()
if not story:
story = AboutStory()
db.add(story)
story.title = req.title
story.content = req.content
story.founding_moment = req.founding_moment
story.totem_description = req.totem_description
story.totem_tagline = req.totem_tagline
db.commit()
return {"message": "更新成功"}
# --- Subsidiaries ---
@router.get("/subsidiaries", response_model=list[SubsidiarySchema])
def get_subsidiaries(db: Session = Depends(get_db)):
items = db.query(AboutSubsidiary).order_by(AboutSubsidiary.sort_order).all()
return [SubsidiarySchema(name=s.name, role=s.role, established=s.established) for s in items]
@router.put("/subsidiaries")
def update_subsidiaries(req: list[SubsidiarySchema], db: Session = Depends(get_db)):
db.query(AboutSubsidiary).delete()
for i, s in enumerate(req):
db.add(AboutSubsidiary(name=s.name, role=s.role, established=s.established, sort_order=i))
db.commit()
return {"message": "更新成功"}
# --- Certifications ---
@router.get("/certifications", response_model=list[CertificationSchema])
def get_certifications(db: Session = Depends(get_db)):
items = db.query(AboutCertification).order_by(AboutCertification.sort_order).all()
return [CertificationSchema(title=c.title, detail=c.detail) for c in items]
@router.put("/certifications")
def update_certifications(req: list[CertificationSchema], db: Session = Depends(get_db)):
db.query(AboutCertification).delete()
for i, c in enumerate(req):
db.add(AboutCertification(title=c.title, detail=c.detail, sort_order=i))
db.commit()
return {"message": "更新成功"}
# --- Trademark ---
@router.get("/trademark", response_model=TrademarkSchema)
def get_trademark(db: Session = Depends(get_db)):
tm = db.query(AboutTrademark).first()
if not tm:
return TrademarkSchema()
return TrademarkSchema(name=tm.name, scope=tm.scope, holder=tm.holder, description=tm.description)
@router.put("/trademark")
def update_trademark(req: TrademarkSchema, db: Session = Depends(get_db)):
tm = db.query(AboutTrademark).first()
if not tm:
tm = AboutTrademark()
db.add(tm)
tm.name = req.name
tm.scope = req.scope
tm.holder = req.holder
tm.description = req.description
db.commit()
return {"message": "更新成功"}
# --- Copyrights ---
@router.get("/copyrights", response_model=list[CopyrightSchema])
def get_copyrights(db: Session = Depends(get_db)):
items = db.query(AboutCopyright).order_by(AboutCopyright.sort_order).all()
return [CopyrightSchema(name=c.name, reg_no=c.reg_no, category=c.category, holder=c.holder, date=c.date, description=c.description) for c in items]
@router.put("/copyrights")
def update_copyrights(req: list[CopyrightSchema], db: Session = Depends(get_db)):
db.query(AboutCopyright).delete()
for i, c in enumerate(req):
db.add(AboutCopyright(name=c.name, reg_no=c.reg_no, category=c.category, holder=c.holder, date=c.date, description=c.description, sort_order=i))
db.commit()
return {"message": "更新成功"}
# --- Guarantees ---
@router.get("/guarantees", response_model=list[GuaranteeSchema])
def get_guarantees(db: Session = Depends(get_db)):
items = db.query(AboutGuarantee).order_by(AboutGuarantee.sort_order).all()
return [GuaranteeSchema(title=g.title, detail=g.detail) for g in items]
@router.put("/guarantees")
def update_guarantees(req: list[GuaranteeSchema], db: Session = Depends(get_db)):
db.query(AboutGuarantee).delete()
for i, g in enumerate(req):
db.add(AboutGuarantee(title=g.title, detail=g.detail, sort_order=i))
db.commit()
return {"message": "更新成功"}
# --- Xiaohongshu ---
@router.get("/xiaohongshu", response_model=XiaohongshuSchema)
def get_xiaohongshu(db: Session = Depends(get_db)):
xhs = db.query(AboutXiaohongshu).first()
if not xhs:
return XiaohongshuSchema()
return XiaohongshuSchema(
account=xhs.account, verified=xhs.verified, verified_type=xhs.verified_type,
followers=xhs.followers, likes=xhs.likes, awards=xhs.awards or [],
tagline=xhs.tagline, tags=xhs.tags or [], description=xhs.description,
)
@router.put("/xiaohongshu")
def update_xiaohongshu(req: XiaohongshuSchema, db: Session = Depends(get_db)):
xhs = db.query(AboutXiaohongshu).first()
if not xhs:
xhs = AboutXiaohongshu()
db.add(xhs)
for key, val in req.model_dump().items():
setattr(xhs, key, val)
db.commit()
return {"message": "更新成功"}
# --- Team ---
@router.get("/team", response_model=TeamSchema)
def get_team(db: Session = Depends(get_db)):
team = db.query(AboutTeam).first()
if not team:
return TeamSchema()
return TeamSchema(summary=team.summary)
@router.put("/team")
def update_team(req: TeamSchema, db: Session = Depends(get_db)):
team = db.query(AboutTeam).first()
if not team:
team = AboutTeam()
db.add(team)
team.summary = req.summary
db.commit()
return {"message": "更新成功"}
# --- Culture ---
@router.get("/culture", response_model=CultureSchema)
def get_culture(db: Session = Depends(get_db)):
culture = db.query(AboutCulture).first()
if not culture:
return CultureSchema()
return CultureSchema(
core=culture.core,
transparency=culture.transparency,
trust=culture.trust,
grief_award_name=culture.grief_award_name,
grief_award_description=culture.grief_award_description,
values=[{"name": v.name, "expression": v.expression} for v in culture.values],
)
@router.put("/culture")
def update_culture(req: CultureSchema, db: Session = Depends(get_db)):
culture = db.query(AboutCulture).first()
if not culture:
culture = AboutCulture()
db.add(culture)
db.flush()
culture.core = req.core
culture.transparency = req.transparency
culture.trust = req.trust
culture.grief_award_name = req.grief_award_name
culture.grief_award_description = req.grief_award_description
db.query(AboutCultureValue).filter_by(culture_id=culture.id).delete()
for i, v in enumerate(req.values):
db.add(AboutCultureValue(culture_id=culture.id, name=v.name, expression=v.expression, sort_order=i))
db.commit()
return {"message": "更新成功"}
# --- Founder Detail (单个创始人详细) ---
@router.get("/founder-detail", response_model=FounderDetailSchema)
def get_founder_detail(db: Session = Depends(get_db)):
fd = db.query(AboutFounderDetail).first()
if not fd:
return FounderDetailSchema()
return FounderDetailSchema(
name=fd.name, title=fd.title, brand_founded=fd.brand_founded,
years_in_hulunbuir=fd.years_in_hulunbuir, background=fd.background,
expertise=fd.expertise or [], media_presence=fd.media_presence or [],
)
@router.put("/founder-detail")
def update_founder_detail(req: FounderDetailSchema, db: Session = Depends(get_db)):
fd = db.query(AboutFounderDetail).first()
if not fd:
fd = AboutFounderDetail()
db.add(fd)
fd.name = req.name
fd.title = req.title
fd.brand_founded = req.brand_founded
fd.years_in_hulunbuir = req.years_in_hulunbuir
fd.background = req.background
fd.expertise = req.expertise
fd.media_presence = req.media_presence
db.commit()
return {"message": "更新成功"}
# --- Founders (三位创始人简介列表) ---
@router.get("/founders", response_model=list[FounderSchema])
def get_founders(db: Session = Depends(get_db)):
items = db.query(AboutFounder).order_by(AboutFounder.sort_order).all()
return [FounderSchema(name=f.name, title=f.title, story=f.story) for f in items]
@router.put("/founders")
def update_founders(req: list[FounderSchema], db: Session = Depends(get_db)):
db.query(AboutFounder).delete()
for i, f in enumerate(req):
db.add(AboutFounder(name=f.name, title=f.title, story=f.story, sort_order=i))
db.commit()
return {"message": "更新成功"}
# --- Milestones ---
@router.get("/milestones", response_model=list[MilestoneSchema])
def get_milestones(db: Session = Depends(get_db)):
items = db.query(AboutMilestone).order_by(AboutMilestone.sort_order).all()
return [MilestoneSchema(year=m.year, event=m.event) for m in items]
@router.put("/milestones")
def update_milestones(req: list[MilestoneSchema], db: Session = Depends(get_db)):
db.query(AboutMilestone).delete()
for i, m in enumerate(req):
db.add(AboutMilestone(year=m.year, event=m.event, sort_order=i))
db.commit()
return {"message": "更新成功"}
# --- Service Principles ---
@router.get("/service-principles", response_model=list[ServicePrincipleSchema])
def get_service_principles(db: Session = Depends(get_db)):
items = db.query(AboutServicePrinciple).order_by(AboutServicePrinciple.sort_order).all()
return [ServicePrincipleSchema(text=p.text) for p in items]
@router.put("/service-principles")
def update_service_principles(req: list[ServicePrincipleSchema], db: Session = Depends(get_db)):
db.query(AboutServicePrinciple).delete()
for i, p in enumerate(req):
db.add(AboutServicePrinciple(text=p.text, sort_order=i))
db.commit()
return {"message": "更新成功"}
# --- Differentiation ---
@router.get("/differentiation", response_model=list[DifferentiationSchema])
def get_differentiation(db: Session = Depends(get_db)):
items = db.query(AboutDifferentiation).order_by(AboutDifferentiation.sort_order).all()
return [DifferentiationSchema(name=d.name, detail=d.detail) for d in items]
@router.put("/differentiation")
def update_differentiation(req: list[DifferentiationSchema], db: Session = Depends(get_db)):
db.query(AboutDifferentiation).delete()
for i, d in enumerate(req):
db.add(AboutDifferentiation(name=d.name, detail=d.detail, sort_order=i))
db.commit()
return {"message": "更新成功"}
# --- Service Journey ---
@router.get("/service-journey", response_model=ServiceJourneySchema)
def get_service_journey(db: Session = Depends(get_db)):
sj = db.query(AboutServiceJourney).first()
if not sj:
return ServiceJourneySchema()
return ServiceJourneySchema(
title=sj.title,
subtitle=sj.subtitle,
moments=[ServiceMomentSchema(step=m.step, name=m.name, detail=m.detail) for m in sj.moments],
)
@router.put("/service-journey")
def update_service_journey(req: ServiceJourneySchema, db: Session = Depends(get_db)):
sj = db.query(AboutServiceJourney).first()
if not sj:
sj = AboutServiceJourney()
db.add(sj)
db.flush()
sj.title = req.title
sj.subtitle = req.subtitle
db.query(AboutServiceMoment).filter_by(journey_id=sj.id).delete()
for i, m in enumerate(req.moments):
db.add(AboutServiceMoment(journey_id=sj.id, step=m.step, name=m.name, detail=m.detail, sort_order=i))
db.commit()
return {"message": "更新成功"}
# --- Stats ---
@router.get("/stats", response_model=AboutStatsSchema)
def get_stats(db: Session = Depends(get_db)):
s = db.query(AboutStats).first()
if not s:
return AboutStatsSchema()
return AboutStatsSchema(data=s.data or {})
@router.put("/stats")
def update_stats(req: AboutStatsSchema, db: Session = Depends(get_db)):
s = db.query(AboutStats).first()
if not s:
s = AboutStats()
db.add(s)
s.data = req.data
db.commit()
return {"message": "更新成功"}