Inicial
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user