from sqlalchemy import ( Column, Integer, String, Text, Numeric, Boolean, Date, JSON, ) from sqlalchemy.orm import DeclarativeBase class Base(DeclarativeBase): pass class Program(Base): __tablename__ = "programs" id = Column(Integer, primary_key=True, autoincrement=True) day_of_week = Column(Integer, nullable=False) # 1=Mon … 7=Sun day_label = Column(String(10), nullable=False) # "Monday", … time = Column(String(10), nullable=False) # "6:00 AM" title = Column(String(200), nullable=False) host = Column(String(100), nullable=False) genre = Column(String(80), nullable=False) class Event(Base): __tablename__ = "events" id = Column(Integer, primary_key=True, autoincrement=True) date = Column(Date, nullable=False) title = Column(String(200), nullable=False) description = Column(Text, nullable=False) location = Column(String(200), nullable=False) icon = Column(String(10), nullable=False) rsvp_url = Column(String(500), nullable=True) active = Column(Boolean, default=True) class DonationTier(Base): __tablename__ = "donation_tiers" id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(50), unique=True, nullable=False) amount = Column(Numeric(10, 2), nullable=False) icon = Column(String(10), nullable=False) benefits = Column(JSON, nullable=False) display_order = Column(Integer, nullable=False) class StationConfig(Base): __tablename__ = "station_config" id = Column(Integer, primary_key=True, autoincrement=True) key = Column(String(20), unique=True, nullable=False, default="default") # Identity callsign = Column(String(10), nullable=False, default="KMTN") name_primary = Column(String(100), nullable=False, default="KMountain") name_secondary = Column(String(100), nullable=False, default="Flower Radio") tagline = Column(String(200), nullable=False, default="Community Radio — Est. 1987") frequency = Column(String(10), nullable=False, default="98.7 FM") founded_year = Column(Integer, nullable=False, default=1987) # Nonprofit nonprofit_type = Column(String(10), nullable=False, default="501(c)(3)") ein = Column(String(20), nullable=False, default="84-XXXXXXX") # Images (URL strings relative to app root) logo_url = Column(String(500), nullable=False, default="svg/small-flower.svg") hero_background_url = Column(String(500), nullable=False, default="svg/mountain-landscape.svg") hero_icon_url = Column(String(500), nullable=False, default="svg/orange-flower.svg") hero_divider_url = Column(String(500), nullable=False, default="svg/mountain-divider.svg") # Contact address = Column(Text, nullable=False, default="42 Pine Street\nMountain View, CO 80424") phone = Column(String(30), nullable=False, default="(970) 555-0198") email = Column(String(100), nullable=False, default="hello@kmountainflower.org") website = Column(String(200), nullable=False, default="kmountainflower.org") class HistoryEntry(Base): __tablename__ = "history_entries" id = Column(Integer, primary_key=True, autoincrement=True) year = Column(Integer, nullable=False) title = Column(String(200), nullable=False) body = Column(Text, nullable=False) display_order = Column(Integer, nullable=False) active = Column(Boolean, default=True) class TeamMember(Base): __tablename__ = "team_members" id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(100), nullable=False) title = Column(String(150), nullable=False) bio = Column(Text, nullable=True) photo_url = Column(String(500), nullable=True) display_order = Column(Integer, nullable=False) active = Column(Boolean, default=True) class CommunityHighlight(Base): __tablename__ = "community_highlights" id = Column(Integer, primary_key=True, autoincrement=True) icon = Column(String(10), nullable=False) title = Column(String(200), nullable=False) description = Column(Text, nullable=False) display_order = Column(Integer, nullable=False) active = Column(Boolean, default=True)