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

207 行
6.4 KiB
Python

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

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