package main import ( "fmt" "sort" "strconv" "github.com/animenotifier/arn" "github.com/fatih/color" ) func main() { color.Yellow("Generating character IDs") defer color.Green("Finished") defer arn.Node.Close() allCharacters := arn.FilterCharacters(func(character *arn.Character) bool { return len(character.ID) < len("hw5heOmiR") }) sort.Slice(allCharacters, func(i, j int) bool { aID, _ := strconv.Atoi(allCharacters[i].ID) bID, _ := strconv.Atoi(allCharacters[j].ID) return aID < bID }) // Create map of old IDs to new IDs idMap := map[string]string{} for counter, character := range allCharacters { newID := arn.GenerateID("Character") if character.GetMapping("myanimelist/character") == "" { fmt.Printf("[%d / %d] Old [%s] New [%s] %s\n", counter+1, len(allCharacters), color.YellowString(character.ID), color.GreenString(newID), character) } idMap[character.ID] = newID character.ID = newID character.Save() } // Update quotes for quote := range arn.StreamQuotes() { newID, exists := idMap[quote.CharacterID] if exists { quote.CharacterID = newID quote.Save() } } // Update log for entry := range arn.StreamEditLogEntries() { if entry.ObjectType != "Character" { continue } newID, exists := idMap[entry.ObjectID] if exists { entry.ObjectID = newID entry.Save() } } // Update anime characters for list := range arn.StreamAnimeCharacters() { modified := false for _, animeCharacter := range list.Items { newID, exists := idMap[animeCharacter.CharacterID] if exists { animeCharacter.CharacterID = newID modified = true } } if modified { list.Save() } } }