veza/veza-backend-api/cmd/tools/seed/seed_live.go
senke 87f9f6e045 refactor(backend): split seed tool into domain-specific modules
Extract monolithic seed main.go into separate files per domain:
users, tracks, playlists, chat, analytics, marketplace, social,
content, live, moderation, notifications, and misc. Add config,
fake data helpers, and utility modules. Update Makefile targets.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 23:35:07 +01:00

91 lines
3.1 KiB
Go

package main
import (
"database/sql"
"fmt"
"time"
)
// SeedLive creates live_streams and co_listening_sessions.
func SeedLive(db *sql.DB, cfg Config, users []SeededUser, tracks []SeededTrack) error {
fmt.Println("\n═══ LIVE STREAMS ═══")
artists := GetArtists(users)
if len(artists) == 0 {
return nil
}
// ── 1. Past live streams ─────────────────────────────────────────────────
p := NewProgress("live_streams (past)", cfg.PastLiveStreams)
liveRows := make([][]interface{}, 0, cfg.PastLiveStreams+cfg.LiveStreams)
for i := 0; i < cfg.PastLiveStreams; i++ {
artist := artists[rng.Intn(len(artists))]
title := pick(liveStreamTitles)
desc := fmt.Sprintf("Live session by %s", artist.DisplayName)
category := pick([]string{"dj-set", "production", "performance", "tutorial", "q&a"})
startTime := RandomTimeAfter(artist.CreatedAt)
viewerCount := PowerLaw(1, 500, 1.5)
liveRows = append(liveRows, []interface{}{
newUUID(), artist.ID, title, desc, category,
artist.DisplayName, false, viewerCount,
"[]", // tags (jsonb)
startTime, startTime, startTime,
})
}
p.Update(cfg.PastLiveStreams)
p.Done()
// ── 2. Current live streams ──────────────────────────────────────────────
p = NewProgress("live_streams (active)", cfg.LiveStreams)
for i := 0; i < cfg.LiveStreams && i < len(artists); i++ {
artist := artists[i]
title := pick(liveStreamTitles)
desc := fmt.Sprintf("LIVE NOW: %s", artist.DisplayName)
category := pick([]string{"dj-set", "production", "performance"})
startTime := time.Now().Add(-time.Duration(randInt(5, 90)) * time.Minute)
viewerCount := randInt(5, 150)
liveRows = append(liveRows, []interface{}{
newUUID(), artist.ID, title, desc, category,
artist.DisplayName, true, viewerCount,
"[]",
startTime, startTime, startTime,
})
}
p.Update(cfg.LiveStreams)
p.Done()
_, err := BulkInsert(db, "live_streams",
"id, user_id, title, description, category, streamer_name, is_live, viewer_count, tags, scheduled_at, created_at, updated_at",
liveRows)
if err != nil {
return fmt.Errorf("insert live_streams: %w", err)
}
// ── 3. Co-listening sessions ─────────────────────────────────────────────
coCount := cfg.PastLiveStreams / 10
if coCount < 5 {
coCount = 5
}
p = NewProgress("co_listening_sessions", coCount)
coRows := make([][]interface{}, 0, coCount)
for i := 0; i < coCount && len(tracks) > 0; i++ {
host := users[rng.Intn(len(users))]
track := tracks[rng.Intn(len(tracks))]
createdAt := RandomTimeAfter(host.CreatedAt)
expiresAt := createdAt.Add(4 * time.Hour)
coRows = append(coRows, []interface{}{
newUUID(), host.ID, track.ID, createdAt, expiresAt,
})
}
_, _ = BulkInsert(db, "co_listening_sessions",
"id, host_id, track_id, created_at, expires_at",
coRows)
p.Update(coCount)
p.Done()
return nil
}