gohorsejobs/backend/cmd/api/main.go
2025-12-15 10:44:28 -03:00

47 lines
1.2 KiB
Go
Executable file

package main
import (
"log"
"net/http"
"os"
"github.com/joho/godotenv"
"github.com/rede5/gohorsejobs/backend/internal/database"
"github.com/rede5/gohorsejobs/backend/internal/router"
)
// @title GoHorseJobs API
// @version 1.0
// @description API for GoHorseJobs recruitment platform.
// @host localhost:8521
// @BasePath /
func main() {
// Load .env file
if err := godotenv.Load(); err != nil {
log.Println("No .env file found or error loading it")
}
// Validate JWT_SECRET strength (must be at least 32 characters / 256 bits)
jwtSecret := os.Getenv("JWT_SECRET")
if jwtSecret == "" || len(jwtSecret) < 32 {
log.Println("⚠️ WARNING: JWT_SECRET is empty or too short (< 32 chars). Use a strong secret in production!")
if os.Getenv("ENV") == "production" {
log.Fatal("FATAL: Cannot start in production without strong JWT_SECRET")
}
}
database.InitDB()
database.RunMigrations()
handler := router.NewRouter()
port := os.Getenv("PORT")
if port == "" {
port = "8521"
}
log.Println("Starting server on :" + port)
if err := http.ListenAndServe(":"+port, handler); err != nil {
log.Fatalf("Server failed to start: %v", err)
}
}