saveinmed/backend/cmd/geocode_sync/main.go
2026-03-09 09:27:32 -03:00

44 lines
1.4 KiB
Go

package main
import (
"context"
"fmt"
"log"
"github.com/jmoiron/sqlx"
_ "github.com/jackc/pgx/v5/stdlib"
"github.com/saveinmed/backend-go/internal/config"
"github.com/saveinmed/backend-go/internal/infrastructure/mapbox"
"github.com/saveinmed/backend-go/internal/infrastructure/notifications"
"github.com/saveinmed/backend-go/internal/repository/postgres"
"github.com/saveinmed/backend-go/internal/usecase"
)
func main() {
cfg, err := config.Load()
if err != nil {
log.Fatalf("failed to load config: %v", err)
}
db, err := sqlx.Open("pgx", cfg.DatabaseURL)
if err != nil {
log.Fatalf("failed to open db: %v", err)
}
repo := postgres.New(db)
mapboxClient := mapbox.New(cfg.MapboxAccessToken)
notifySvc := notifications.NewLoggerNotificationService()
// Ensure we cast repo to usecase.Repository interface explicitly if needed, but Go does this implicitly if methods match.
// NewService expects: Repository, PaymentGateway, *mapbox.Client, NotificationService, ...
var repoInterface usecase.Repository = repo
svc := usecase.NewService(repoInterface, nil, mapboxClient, notifySvc, 12.0, 0.06, cfg.JWTSecret, cfg.JWTExpiresIn, cfg.PasswordPepper)
fmt.Println("Starting retroactive geocode sync...")
count, err := svc.GeocodeAllAddresses(context.Background())
if err != nil {
log.Fatalf("failed to sync: %v", err)
}
fmt.Printf("Successfully updated %d addresses with coordinates.\n", count)
}