vivaplusdl/episodes.go
Sebastiaan de Schaetzen 73508021f5
All checks were successful
Build / build (push) Successful in 1m55s
Fix episodes being overwritten
2025-02-10 12:52:34 +01:00

65 lines
1.6 KiB
Go

package main
import (
"database/sql"
"fmt"
"log"
)
func CalculateEpisodeNumbers(db *sql.DB) error {
log.Printf("Calculating episode numbers")
// Start a transaction
tx, err := db.Begin()
if err != nil {
return fmt.Errorf("error starting transaction: %w", err)
}
defer tx.Rollback()
// First find all years that still need episodes numbers
rows, err := tx.Query("select year, max((select max(episode) from videos where year = year)) from videos where episode is null group by year")
if err != nil {
return fmt.Errorf("error retrieving rows: %w", err)
}
// Loop over each year and set the missing episode numbers
for rows.Next() {
var year, lastEpisode int
err = rows.Scan(&year, &lastEpisode)
log.Printf("Last episode is %d", lastEpisode)
if err != nil {
return fmt.Errorf("error getting row: %w", err)
}
// Find all episodes that need updating
episodes, err := tx.Query("select id from videos where year = ? and episode is null order by run, id desc", year)
if err != nil {
return fmt.Errorf("error retrieving episodes: %w", err)
}
// Update each episode
for episodes.Next() {
var episodeId int
err = episodes.Scan(&episodeId)
if err != nil {
return fmt.Errorf("error retrieving episode id: %w", err)
}
// Set the episode ID
lastEpisode++
_, err = tx.Exec("update videos set episode = ? where id = ?", &lastEpisode, &episodeId)
if err != nil {
return fmt.Errorf("error updating episode id: %w", err)
}
}
}
// Commit all changes
err = tx.Commit()
if err != nil {
return fmt.Errorf("error commiting changes: %w", err)
}
return nil
}