38 行
1.3 KiB
Python
38 行
1.3 KiB
Python
from __future__ import annotations
|
|
from sqlalchemy import Column, Integer, String, ForeignKey, JSON
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from app.database import Base
|
|
|
|
|
|
class NavHeader(Base):
|
|
__tablename__ = "nav_header"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
text = Column(String(100), nullable=False)
|
|
to_path = Column(String(255), nullable=False)
|
|
children = Column(JSON) # [{text, to, season}, ...] for dropdown menus
|
|
sort_order = Column(Integer, default=0)
|
|
|
|
|
|
class NavFooterGroup(Base):
|
|
__tablename__ = "nav_footer_groups"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
title = Column(String(100), nullable=False)
|
|
sort_order = Column(Integer, default=0)
|
|
|
|
links = relationship("NavFooterLink", back_populates="group", cascade="all, delete-orphan", order_by="NavFooterLink.sort_order")
|
|
|
|
|
|
class NavFooterLink(Base):
|
|
__tablename__ = "nav_footer_links"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
group_id = Column(Integer, ForeignKey("nav_footer_groups.id", ondelete="CASCADE"), nullable=False)
|
|
text = Column(String(100), nullable=False)
|
|
to_path = Column(String(255), nullable=False)
|
|
sort_order = Column(Integer, default=0)
|
|
|
|
group = relationship("NavFooterGroup", back_populates="links")
|