Files
techxcar/backend/cmd/server/main.go
T
Luciano Milani 5de37bb512 Inicial
2026-07-02 12:47:55 +01:00

79 lines
2.0 KiB
Go

package main
import (
"context"
"log"
"time"
"github.com/joho/godotenv"
"github.com/techxcar/backend/internal/auth"
"github.com/techxcar/backend/internal/config"
"github.com/techxcar/backend/internal/server"
"github.com/techxcar/backend/internal/tenant"
"github.com/techxcar/backend/pkg/database"
redispkg "github.com/techxcar/backend/pkg/redis"
)
func main() {
if err := godotenv.Load(); err != nil {
log.Println("No .env file found, reading from environment")
}
cfg, err := config.Load()
if err != nil {
log.Fatal("Config error:", err)
}
db, err := database.New(cfg.DatabaseURL)
if err != nil {
log.Fatal("Database error:", err)
}
defer db.Close()
if err := db.MigratePublic(cfg.DatabaseURL, "migrations/public"); err != nil {
log.Fatal("Migration error:", err)
}
if err := db.MigrateAllTenantSchemas(context.Background(), "migrations/tenant"); err != nil {
log.Fatal("Tenant migration error:", err)
}
rdb, err := redispkg.New(cfg.RedisURL)
if err != nil {
log.Fatal("Redis error:", err)
}
defer rdb.Close()
seedSuperAdmin(db, cfg)
app := server.New(server.Deps{Config: cfg, DB: db, Redis: rdb})
log.Printf("TechXCar API v0.2.0 listening on :%s (env: %s)", cfg.Port, cfg.AppEnv)
log.Fatal(app.Listen(":" + cfg.Port))
}
func seedSuperAdmin(db *database.DB, cfg *config.Config) {
if cfg.InitialAdminEmail == "" || cfg.InitialAdminPassword == "" {
return
}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
repo := tenant.NewRepository(db)
existing, err := repo.GetSuperAdminByEmail(ctx, cfg.InitialAdminEmail)
if err != nil || existing != nil {
return
}
hash, err := auth.HashPassword(cfg.InitialAdminPassword)
if err != nil {
log.Printf("Warning: could not hash initial admin password: %v", err)
return
}
if _, err := repo.CreateSuperAdmin(ctx, cfg.InitialAdminEmail, hash); err != nil {
log.Printf("Warning: could not create initial super admin: %v", err)
return
}
log.Printf("Initial super admin created: %s", cfg.InitialAdminEmail)
}