- Fork elmeg-demo codebase for multi-band support - Add data importer infrastructure with base class - Create band-specific importers: - phish.py: Phish.net API v5 - grateful_dead.py: Grateful Stats API - setlistfm.py: Dead & Company, Billy Strings (Setlist.fm) - Add spec-kit configuration for Gemini - Update README with supported bands and architecture
118 lines
3.8 KiB
Python
118 lines
3.8 KiB
Python
#!/usr/bin/env python3
|
|
"""Quick demo seeder - creates users and basic data"""
|
|
import sys
|
|
sys.path.insert(0, '/Users/ten/ANTIGRAVITY/elmeg-demo/backend')
|
|
|
|
from datetime import datetime, timedelta
|
|
from sqlmodel import Session
|
|
from passlib.context import CryptContext
|
|
from database import engine
|
|
from models import User, Vertical, Venue, Show, Song, Performance, UserPreferences
|
|
|
|
pwd_context = CryptContext(schemes=["argon2"], deprecated="auto")
|
|
|
|
print("Starting demo seed...")
|
|
|
|
with Session(engine) as session:
|
|
# Create Goose vertical
|
|
vertical = Vertical(name="Goose", slug="goose", description="Jam band from CT")
|
|
session.add(vertical)
|
|
session.commit()
|
|
session.refresh(vertical)
|
|
print(f"✓ Created vertical: {vertical.name}")
|
|
|
|
# Create 12 users
|
|
users_data = [
|
|
("archivist@demo.com", "TheArchivist", "user", True),
|
|
("statnerd@demo.com", "StatNerd420", "user", False),
|
|
("reviewer@demo.com", "CriticalListener", "user", False),
|
|
("casual@demo.com", "CasualFan", "user", False),
|
|
("groupleader@demo.com", "NortheastHonkers", "user", False),
|
|
("mod@demo.com", "ModGoose", "moderator", False),
|
|
("admin@demo.com", "AdminBird", "admin", False),
|
|
("newbie@demo.com", "NewToGoose", "user", False),
|
|
("taper@demo.com", "TaperTom", "user", False),
|
|
("tourfollower@demo.com", "RoadWarrior", "user", False),
|
|
("lurker@demo.com", "SilentHonker", "user", True),
|
|
("hype@demo.com", "HypeGoose", "user", False),
|
|
]
|
|
|
|
users = []
|
|
for email, username, role, wiki_mode in users_data:
|
|
user = User(
|
|
email=email,
|
|
hashed_password=pwd_context.hash("demo123"),
|
|
is_active=True,
|
|
is_superuser=(role == "admin"),
|
|
role=role
|
|
)
|
|
session.add(user)
|
|
session.commit()
|
|
session.refresh(user)
|
|
|
|
prefs = UserPreferences(
|
|
user_id=user.id,
|
|
wiki_mode=wiki_mode,
|
|
show_ratings=not wiki_mode,
|
|
show_comments=not wiki_mode
|
|
)
|
|
session.add(prefs)
|
|
users.append(user)
|
|
print(f"✓ Created user: {username}")
|
|
|
|
session.commit()
|
|
|
|
# Create venues
|
|
venues = [
|
|
Venue(name="Red Rocks", city="Morrison", state="CO", country="USA"),
|
|
Venue(name="Capitol Theatre", city="Port Chester", state="NY", country="USA"),
|
|
]
|
|
for v in venues:
|
|
session.add(v)
|
|
session.commit()
|
|
print(f"✓ Created {len(venues)} venues")
|
|
|
|
# Create songs
|
|
songs = [
|
|
Song(title="Hungersite", vertical_id=vertical.id),
|
|
Song(title="Arcadia", vertical_id=vertical.id),
|
|
Song(title="Hot Tea", vertical_id=vertical.id),
|
|
]
|
|
for s in songs:
|
|
session.add(s)
|
|
session.commit()
|
|
print(f"✓ Created {len(songs)} songs")
|
|
|
|
# Create shows
|
|
shows = []
|
|
for i in range(5):
|
|
show = Show(
|
|
date=datetime(2024, 1, 1) + timedelta(days=i*30),
|
|
vertical_id=vertical.id,
|
|
venue_id=venues[i % len(venues)].id
|
|
)
|
|
session.add(show)
|
|
shows.append(show)
|
|
session.commit()
|
|
print(f"✓ Created {len(shows)} shows")
|
|
|
|
# Create performances
|
|
for show in shows:
|
|
for pos, song in enumerate(songs, 1):
|
|
perf = Performance(
|
|
show_id=show.id,
|
|
song_id=song.id,
|
|
position=pos,
|
|
set_name="Set 1"
|
|
)
|
|
session.add(perf)
|
|
session.commit()
|
|
print(f"✓ Created performances")
|
|
|
|
print("\n" + "="*60)
|
|
print("✓ DEMO DATA SEEDED!")
|
|
print("="*60)
|
|
print("\nAll passwords: demo123")
|
|
print("\nStart demo server:")
|
|
print(" cd /Users/ten/ANTIGRAVITY/elmeg-demo/backend")
|
|
print(" DATABASE_URL='sqlite:///./elmeg-demo.db' uvicorn main:app --reload --port 8001")
|