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