package main import ( "context" "flag" "fmt" "os" "strconv" "tercul/internal/data/sql" "tercul/internal/enrichment" "tercul/internal/platform/config" "tercul/internal/platform/db" "tercul/internal/platform/log" ) func main() { // 1. Parse command-line arguments entityType := flag.String("type", "", "The type of entity to enrich (e.g., 'author')") entityIDStr := flag.String("id", "", "The ID of the entity to enrich") flag.Parse() if *entityType == "" || *entityIDStr == "" { fmt.Println("Usage: go run cmd/tools/enrich/main.go --type --id ") os.Exit(1) } entityID, err := strconv.ParseUint(*entityIDStr, 10, 64) if err != nil { fmt.Printf("Invalid entity ID: %v\n", err) os.Exit(1) } // 2. Initialize dependencies cfg, err := config.LoadConfig() if err != nil { log.Fatal(err, "Failed to load config") } log.Init("enrich-tool", "development") database, err := db.InitDB(cfg, nil) // No metrics needed for this tool if err != nil { log.Fatal(err, "Failed to initialize database") } defer db.Close(database) repos := sql.NewRepositories(database, cfg) enrichmentSvc := enrichment.NewService() // 3. Fetch, enrich, and save the entity ctx := context.Background() log.Info(fmt.Sprintf("Enriching %s with ID %d", *entityType, entityID)) switch *entityType { case "author": author, err := repos.Author.GetByID(ctx, uint(entityID)) if err != nil { log.Fatal(err, "Failed to get author") } if err := enrichmentSvc.EnrichAuthor(ctx, author); err != nil { log.Fatal(err, "Failed to enrich author") } if err := repos.Author.Update(ctx, author); err != nil { log.Fatal(err, "Failed to save enriched author") } log.Info("Successfully enriched and saved author") default: log.Fatal(fmt.Errorf("unknown entity type: %s", *entityType), "Enrichment failed") } }