func main()

in cmd/seeder/main.go [22:72]


func main() {
	var opts options
	if _, err := flags.Parse(&opts); err != nil {
		os.Exit(1)
	}

	log.Println("Starting seeding service")
	log.Println("Bucket ID:", opts.BucketId)
	log.Println("Database URL:", opts.DatabaseUrl)

	// Connect database
	ctx := context.Background()
	db := repo.NewDatabase(opts.DatabaseUrl, maxDbConnections)

	if err := db.Connect(ctx); err != nil {
		log.Fatalf("Error connecting to database: %v\n", err)
	}
	defer db.Close()

	if err := db.Setup(); err != nil {
		log.Fatalf("Error configuring database: %v\n", err)
	}

	if err := db.CreateTables(); err != nil {
		log.Fatalf("Error creating tables: %v\n", err)
	}

	// Connect to storage client
	client, err := storage.NewClient(ctx)
	if err != nil {
		log.Fatalf("Error creating storage client: %v\n", err)
	}

	// Instantiate repositories
	directoryRepo := repo.NewDirectoryRepository(db)
	metadataRepo := repo.NewMetadataRepository(db)

	seedService := seeder.NewSeedService(client, opts.BucketId, directoryRepo, metadataRepo)

	// Begin seeding
	start := time.Now()

	if err := seedService.Start(ctx); err != nil {
		log.Fatalf("Error while seeding: %v\n", err)
	}

	if err := db.CreateIndexes(); err != nil {
		log.Fatalf("Error creating indexes: %v\n", err)
	}
	log.Printf("Seeding completed. Duration: %v\n", time.Since(start))
}