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())