207 行
6.4 KiB
Python
207 行
6.4 KiB
Python
from __future__ import annotations
|
||
from sqlalchemy import Column, Integer, String, Text, Boolean, DateTime, ForeignKey, JSON
|
||
from sqlalchemy.orm import relationship
|
||
from sqlalchemy.sql import func
|
||
|
||
from app.database import Base
|
||
|
||
|
||
class AboutStory(Base):
|
||
__tablename__ = "about_story"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
title = Column(String(200))
|
||
content = Column(Text)
|
||
founding_moment = Column(String(500))
|
||
totem_description = Column(Text)
|
||
totem_tagline = Column(String(500))
|
||
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
|
||
|
||
|
||
class AboutSubsidiary(Base):
|
||
__tablename__ = "about_subsidiaries"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
name = Column(String(255), nullable=False)
|
||
role = Column(Text)
|
||
established = Column(String(20))
|
||
sort_order = Column(Integer, default=0)
|
||
|
||
|
||
class AboutCertification(Base):
|
||
__tablename__ = "about_certifications"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
title = Column(String(255), nullable=False)
|
||
detail = Column(String(500))
|
||
sort_order = Column(Integer, default=0)
|
||
|
||
|
||
class AboutTrademark(Base):
|
||
__tablename__ = "about_trademark"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
name = Column(String(100))
|
||
scope = Column(String(100))
|
||
holder = Column(String(255))
|
||
description = Column(Text)
|
||
|
||
|
||
class AboutCopyright(Base):
|
||
__tablename__ = "about_copyrights"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
name = Column(String(200), nullable=False)
|
||
reg_no = Column(String(100))
|
||
category = Column(String(100))
|
||
holder = Column(String(255))
|
||
date = Column(String(20))
|
||
description = Column(Text)
|
||
sort_order = Column(Integer, default=0)
|
||
|
||
|
||
class AboutGuarantee(Base):
|
||
__tablename__ = "about_guarantees"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
title = Column(String(255), nullable=False)
|
||
detail = Column(Text)
|
||
sort_order = Column(Integer, default=0)
|
||
|
||
|
||
class AboutXiaohongshu(Base):
|
||
__tablename__ = "about_xiaohongshu"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
account = Column(String(200))
|
||
verified = Column(Boolean, default=False)
|
||
verified_type = Column(String(200))
|
||
followers = Column(String(50))
|
||
likes = Column(String(50))
|
||
awards = Column(JSON)
|
||
tagline = Column(String(500))
|
||
tags = Column(JSON)
|
||
description = Column(Text)
|
||
|
||
|
||
class AboutTeam(Base):
|
||
__tablename__ = "about_team"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
summary = Column(Text)
|
||
|
||
|
||
class AboutCulture(Base):
|
||
__tablename__ = "about_culture"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
core = Column(String(200))
|
||
transparency = Column(Text)
|
||
trust = Column(String(500))
|
||
grief_award_name = Column(String(100))
|
||
grief_award_description = Column(Text)
|
||
|
||
values = relationship("AboutCultureValue", back_populates="culture", cascade="all, delete-orphan", order_by="AboutCultureValue.sort_order")
|
||
|
||
|
||
class AboutCultureValue(Base):
|
||
__tablename__ = "about_culture_values"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
culture_id = Column(Integer, ForeignKey("about_culture.id", ondelete="CASCADE"), nullable=False)
|
||
name = Column(String(50), nullable=False)
|
||
expression = Column(Text)
|
||
sort_order = Column(Integer, default=0)
|
||
|
||
culture = relationship("AboutCulture", back_populates="values")
|
||
|
||
|
||
class AboutFounderDetail(Base):
|
||
"""单个创始人详细介绍(刘涛)"""
|
||
__tablename__ = "about_founder_detail"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
name = Column(String(100))
|
||
title = Column(String(200))
|
||
brand_founded = Column(Integer)
|
||
years_in_hulunbuir = Column(String(50))
|
||
background = Column(Text)
|
||
expertise = Column(JSON) # list of strings
|
||
media_presence = Column(JSON) # list of strings
|
||
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
|
||
|
||
|
||
class AboutFounder(Base):
|
||
"""三位创始人简短介绍(列表)"""
|
||
__tablename__ = "about_founders"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
name = Column(String(100), nullable=False)
|
||
title = Column(String(200))
|
||
story = Column(Text)
|
||
sort_order = Column(Integer, default=0)
|
||
|
||
|
||
class AboutMilestone(Base):
|
||
"""品牌成长纪事"""
|
||
__tablename__ = "about_milestones"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
year = Column(Integer, nullable=False)
|
||
event = Column(Text, nullable=False)
|
||
sort_order = Column(Integer, default=0)
|
||
|
||
|
||
class AboutServicePrinciple(Base):
|
||
"""服务原则(列表字符串)"""
|
||
__tablename__ = "about_service_principles"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
text = Column(Text, nullable=False)
|
||
sort_order = Column(Integer, default=0)
|
||
|
||
|
||
class AboutDifferentiation(Base):
|
||
"""差异化竞争力"""
|
||
__tablename__ = "about_differentiation"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
name = Column(String(100), nullable=False)
|
||
detail = Column(Text)
|
||
sort_order = Column(Integer, default=0)
|
||
|
||
|
||
class AboutServiceJourney(Base):
|
||
"""服务旅程配置(标题+子标题)"""
|
||
__tablename__ = "about_service_journey"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
title = Column(String(200))
|
||
subtitle = Column(String(500))
|
||
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
|
||
|
||
moments = relationship("AboutServiceMoment", back_populates="journey", cascade="all, delete-orphan", order_by="AboutServiceMoment.sort_order")
|
||
|
||
|
||
class AboutServiceMoment(Base):
|
||
"""服务触点(8个时刻)"""
|
||
__tablename__ = "about_service_moments"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
journey_id = Column(Integer, ForeignKey("about_service_journey.id", ondelete="CASCADE"), nullable=False)
|
||
step = Column(Integer, nullable=False)
|
||
name = Column(String(100), nullable=False)
|
||
detail = Column(Text)
|
||
sort_order = Column(Integer, default=0)
|
||
|
||
journey = relationship("AboutServiceJourney", back_populates="moments")
|
||
|
||
|
||
class AboutStats(Base):
|
||
"""品牌统计数据(单行JSON)"""
|
||
__tablename__ = "about_stats"
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
data = Column(JSON) # flat key-value dict
|
||
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
|