from datetime import datetime, timedelta import random from app.database import SessionLocal from app.models import Track, Artist, PlayHistory from app.services.stats_service import StatsService def seed_db(): db = SessionLocal() # 1. Create Artists artists = [] for i in range(10): a = Artist( id=f"artist_{i}", name=f"Artist {i}", genres=[random.choice(["pop", "rock", "jazz", "edm", "hip-hop"]) for _ in range(2)] ) db.merge(a) # merge handles insert/update artists.append(a) db.commit() print(f"Seeded {len(artists)} artists.") # 2. Create Tracks tracks = [] for i in range(50): # Random artist artist = random.choice(artists) t = Track( id=f"track_{i}", name=f"Track {i}", artist=artist.name, # Legacy album=f"Album {i % 10}", duration_ms=random.randint(180000, 300000), # 3-5 mins popularity=random.randint(10, 90), danceability=random.uniform(0.3, 0.9), energy=random.uniform(0.3, 0.9), valence=random.uniform(0.1, 0.9), tempo=random.uniform(80, 160), raw_data={"album": {"id": f"album_{i%10}", "release_date": f"{random.randint(2000, 2023)}-01-01"}} ) # Link artist t.artists.append(artist) db.merge(t) tracks.append(t) db.commit() print(f"Seeded {len(tracks)} tracks.") # 3. Create Play History (Last 30 days) plays = [] base_time = datetime.utcnow() - timedelta(days=25) for i in range(200): # Create sessions # 80% chance next play is soon (2-5 mins), 20% chance gap (30-600 mins) gap = random.randint(2, 6) if random.random() > 0.2 else random.randint(30, 600) base_time += timedelta(minutes=gap) if base_time > datetime.utcnow(): break track = random.choice(tracks) p = PlayHistory( track_id=track.id, played_at=base_time, context_uri="spotify:playlist:fake" ) db.add(p) db.commit() print(f"Seeded play history until {base_time}.") db.close() if __name__ == "__main__": seed_db()