🐛 Deduplicate recipes

This commit is contained in:
Dan Jones 2025-05-02 18:22:16 -05:00
commit 24436ce28b

View file

@ -7,6 +7,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"os" "os"
"slices"
_ "github.com/glebarez/go-sqlite" _ "github.com/glebarez/go-sqlite"
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
@ -196,13 +197,35 @@ func (m *Merger) getRecipes(ctx context.Context, items []Item) (err error) {
if recs, found = rm[items[idx].Id]; found { if recs, found = rm[items[idx].Id]; found {
items[idx].Recipes = make([][]int32, 0, len(recs)) items[idx].Recipes = make([][]int32, 0, len(recs))
for _, rec := range recs { for _, rec := range recs {
items[idx].Recipes = append(items[idx].Recipes, rec) addRecs(&(items[idx].Recipes), rec)
} }
} }
} }
return return
} }
func addRecs(recs *[][]int32, rec []int32) {
slices.Sort(rec)
if !slices.ContainsFunc(*recs, recSorter(rec)) {
*recs = append(*recs, rec)
}
}
func recSorter(rec []int32) func([]int32) bool {
return func(v []int32) bool {
slices.Sort(v)
if !(len(v) == len(rec)) {
return false
}
for idx, i := range v {
if !(i == rec[idx]) {
return false
}
}
return true
}
}
func (m *Merger) Merge(ctx context.Context) (g Game, err error) { func (m *Merger) Merge(ctx context.Context) (g Game, err error) {
if err = m.getGameDetails(ctx, &g); err != nil { if err = m.getGameDetails(ctx, &g); err != nil {
return return