119 lines
5.0 KiB
Python
119 lines
5.0 KiB
Python
"""
|
|
Seed script: populates the database with station data.
|
|
|
|
Usage:
|
|
DATABASE_URL=postgresql://... python -m app.seed
|
|
(or from the repo root: cd backend && python seed.py)
|
|
"""
|
|
|
|
import asyncio
|
|
from datetime import date
|
|
|
|
from app.database import async_session
|
|
from app.models import Program, Event, DonationTier
|
|
|
|
# ── Seed data ──────────────────────────────────────────────
|
|
|
|
PROGRAMS: list[dict] = [
|
|
{"day_of_week": 1, "day_label": "Monday", "time": "6:00 AM", "title": "Morning Mountain Mist", "host": "Diana Walsh", "genre": "Ambient / Nature"},
|
|
{"day_of_week": 1, "day_label": "Monday", "time": "8:00 AM", "title": "Community Roundup", "host": "Tom Breen", "genre": "News / Talk"},
|
|
{"day_of_week": 1, "day_label": "Monday", "time": "10:00 AM", "title": "Bluegrass Trails", "host": "Sarah Lynn", "genre": "Bluegrass"},
|
|
{"day_of_week": 1, "day_label": "Monday", "time": "12:00 PM", "title": "Lunchtime Jazz", "host": "Mike Darrow", "genre": "Jazz"},
|
|
{"day_of_week": 1, "day_label": "Monday", "time": "2:00 PM", "title": "Folk Roots Hour", "host": "Nadia Cole", "genre": "Folk"},
|
|
{"day_of_week": 1, "day_label": "Monday", "time": "4:00 PM", "title": "Afternoon Acoustics", "host": "Jen Reeves", "genre": "Acoustic"},
|
|
{"day_of_week": 1, "day_label": "Monday", "time": "6:00 PM", "title": "Evening Echoes", "host": "Carlos Mendez", "genre": "Indie / Alternative"},
|
|
{"day_of_week": 1, "day_label": "Monday", "time": "8:00 PM", "title": "Classical Mountains", "host": "Elena Cross", "genre": "Classical"},
|
|
{"day_of_week": 1, "day_label": "Monday", "time": "10:00 PM", "title": "Night Owl Session", "host": "DJ Kofi", "genre": "Electronic"},
|
|
{"day_of_week": 1, "day_label": "Monday", "time": "12:00 AM", "title": "Late Night Jazz", "host": "Mike Darrow", "genre": "Jazz"},
|
|
]
|
|
|
|
EVENTS: list[dict] = [
|
|
{
|
|
"date": date(2026, 7, 12),
|
|
"title": "Summer Sounds Festival",
|
|
"description": "A full day of live local music, community booths, and station meet-and-greet at the foothills park. Free admission — donations welcome.",
|
|
"location": "Foothills Community Park",
|
|
"icon": "🎵",
|
|
},
|
|
{
|
|
"date": date(2026, 8, 5),
|
|
"title": "Annual Fundraiser Gala",
|
|
"description": "Our biggest fundraiser of the year! Enjoy dinner, silent auction, and performances from past guest artists.",
|
|
"location": "Mountain View Ballroom",
|
|
"icon": "🎙️",
|
|
},
|
|
{
|
|
"date": date(2026, 9, 18),
|
|
"title": "Volunteer Open House",
|
|
"description": "Tour the studio, meet the team, and learn how you can help keep our free stream alive. New volunteers always welcome!",
|
|
"location": "KMTN Studio — 42 Pine St",
|
|
"icon": "🤝",
|
|
},
|
|
{
|
|
"date": date(2026, 10, 30),
|
|
"title": "Harvest Moon Broadcast",
|
|
"description": "Special live broadcast from the harvest moon gathering. Featuring folk, bluegrass, and indigenous music.",
|
|
"location": "Ridgefield Amphitheater",
|
|
"icon": "🌙",
|
|
},
|
|
]
|
|
|
|
TIERS: list[dict] = [
|
|
{
|
|
"name": "Seed",
|
|
"amount": 5.00,
|
|
"icon": "🌱",
|
|
"benefits": ["Digital thank-you card", "Name listed on our website", "Quarterly newsletter"],
|
|
"display_order": 1,
|
|
},
|
|
{
|
|
"name": "Stream",
|
|
"amount": 15.00,
|
|
"icon": "🎵",
|
|
"benefits": ["All Seed benefits", "KMountain Flower pin", "Priority show-request line", "Annual station update call"],
|
|
"display_order": 2,
|
|
},
|
|
{
|
|
"name": "Ridge",
|
|
"amount": 30.00,
|
|
"icon": "🏔️",
|
|
"benefits": ["All Stream benefits", "Official member patch", "Exclusive show invitations", "Annual station tour"],
|
|
"display_order": 3,
|
|
},
|
|
{
|
|
"name": "Summit",
|
|
"amount": 60.00,
|
|
"icon": "⭐",
|
|
"benefits": ["All Ridge benefits", "Featured on the Summit Wall", "Name on-air during anniversary special", "Lifetime patron recognition"],
|
|
"display_order": 4,
|
|
},
|
|
]
|
|
|
|
|
|
# ── Main ──────────────────────────────────────────────────
|
|
|
|
async def seed():
|
|
async with async_session() as session:
|
|
# Programs
|
|
for data in PROGRAMS:
|
|
session.add(Program(**data))
|
|
await session.commit()
|
|
print(f" ✓ Seeded {len(PROGRAMS)} programs")
|
|
|
|
# Events
|
|
for data in EVENTS:
|
|
event = Event(**data, active=True)
|
|
session.add(event)
|
|
await session.commit()
|
|
print(f" ✓ Seeded {len(EVENTS)} events")
|
|
|
|
# Tiers
|
|
for data in TIERS:
|
|
session.add(DonationTier(**data))
|
|
await session.commit()
|
|
print(f" ✓ Seeded {len(TIERS)} donation tiers")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(seed())
|