Use month-day-count numbering system
All checks were successful
Build / build (push) Successful in 2m59s

This commit is contained in:
Sebastiaan de Schaetzen 2025-02-11 13:42:58 +01:00
parent 50ce126ed6
commit a99ff09e7d
3 changed files with 43 additions and 30 deletions

View File

@ -16,23 +16,29 @@ func CalculateEpisodeNumbers(db *sql.DB) error {
}
defer tx.Rollback()
// First find all years that still need episodes numbers
rows, err := tx.Query("select v.year, max((select max(episode) from videos where year = v.year)) from videos v where episode is null group by year")
// First find all days that still need episodes numbers
rows, err := tx.Query(`
select v.upload_date,
ifnull(
(select max(episode) from videos where upload_date = v.upload_date),
substr(upload_date, 6, 2) || substr(upload_date, 9, 2) || '00')
from videos v where episode is null group by upload_date`)
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)
var uploadDate string
var lastEpisode int
err = rows.Scan(&uploadDate, &lastEpisode)
log.Printf("Last episode for %s is %d", uploadDate, 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)
episodes, err := tx.Query("select id from videos where upload_date = ? and episode is null order by run, id desc", uploadDate)
if err != nil {
return fmt.Errorf("error retrieving episodes: %w", err)
}

View File

@ -11,7 +11,13 @@ func TestCalculateEpisodeNumbers(t *testing.T) {
t.Error(err)
}
_, err = db.Exec("insert into videos (title, url, year, episode, run) values ('Video A', 'a', 2025, 1, 1), ('Video B', 'b', 2025, null, 2), ('Old Video', 'c', 2020, 100, 1)")
_, err = db.Exec(`insert into videos (title, url, upload_date, year, episode, run) values
('Video A', 'a', '2025-01-04', 2025, 10401, 1),
('Video D', 'd', '2025-01-05', 2025, null, 2),
('Video C', 'c', '2025-01-04', 2025, null, 2),
('Video B', 'b', '2025-01-04', 2025, null, 2),
('Video E', 'e', '2025-10-01', 2025, null, 3),
('Old Video', 'z', '2020-12-31', 2020, 100, 1)`)
if err != nil {
t.Error(err)
}
@ -26,6 +32,18 @@ func TestCalculateEpisodeNumbers(t *testing.T) {
t.Error(err)
}
expectedList := []struct {
Title string
Episode int
}{
{"Video A", 10401},
{"Video D", 10501},
{"Video C", 10403},
{"Video B", 10402},
{"Video E", 100101},
}
for _, expected := range expectedList {
var title string
var episode int
rows.Next()
@ -34,23 +52,11 @@ func TestCalculateEpisodeNumbers(t *testing.T) {
t.Error(err)
}
if title != "Video A" {
t.Errorf("Title is %s, expected Video A", title)
if title != expected.Title {
t.Errorf("Title is %s, expected %s", title, expected.Title)
}
if episode != expected.Episode {
t.Errorf("Episode is %d, expected %d for video %s", episode, expected.Episode, title)
}
if episode != 1 {
t.Errorf("Episode is %d, expected 1", episode)
}
rows.Next()
err = rows.Scan(&title, &episode)
if err != nil {
t.Error(err)
}
if title != "Video B" {
t.Errorf("Title is %s, expected Video B", title)
}
if episode != 2 {
t.Errorf("Episode is %d, expected 2", episode)
}
}

View File

@ -0,0 +1 @@
UPDATE videos SET episode=NULL, state='pending', cast=NULL;