api key auth added

This commit is contained in:
Ravi Prasad
2025-05-08 00:32:49 -05:00
parent 09d81c251a
commit 8c577b441c
17 changed files with 345 additions and 61 deletions
+65 -35
View File
@@ -1,36 +1,65 @@
package main
import (
"log"
"time"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/fiber/v2/middleware/adaptor"
"github.com/nprasad2077/NBA_Go/config"
"github.com/nprasad2077/NBA_Go/routes"
"context"
"errors"
"log"
"os"
"os/signal"
"syscall"
"time"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/adaptor"
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/nprasad2077/NBA_Go/config"
"github.com/nprasad2077/NBA_Go/services"
"github.com/nprasad2077/NBA_Go/utils/middleware"
_ "github.com/nprasad2077/NBA_Go/docs"
fiberswagger "github.com/swaggo/fiber-swagger"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/nprasad2077/NBA_Go/controllers"
"github.com/nprasad2077/NBA_Go/routes"
"github.com/nprasad2077/NBA_Go/utils/middleware"
_ "github.com/nprasad2077/NBA_Go/docs"
fiberswagger "github.com/swaggo/fiber-swagger"
"github.com/prometheus/client_golang/prometheus/promhttp"
"net/http"
)
func main() {
app := fiber.New()
// graceful shutdown context
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer stop()
// Add standard logger middleware
app.Use(logger.New())
// Add metrics middleware
app.Use(middleware.MetricsMiddleware())
app := fiber.New(fiber.Config{
ReadTimeout: 15 * time.Second,
WriteTimeout: 15 * time.Second,
ErrorHandler: func(c *fiber.Ctx, err error) error {
code := fiber.StatusInternalServerError
if e, ok := err.(*fiber.Error); ok {
code = e.Code
}
return c.Status(code).JSON(fiber.Map{"error": err.Error()})
},
})
// Initialize database
db := config.InitDB()
// middlewares
app.Use(logger.New())
app.Use(middleware.MetricsMiddleware())
// Original data fetching code, no environment variable check
go func() {
for season := 1993; season <= 2025; season++ {
// DB
db := config.InitDB()
/* ---------- PUBLIC ROUTES (no API key) ---------- */
app.Get("/metrics", adaptor.HTTPHandler(promhttp.Handler()))
app.Get("/swagger/*", fiberswagger.WrapHandler)
controllers.RegisterKeyAdminRoutes(app, db) // guarded only by XAdminSecret
/* ---------- PROTECTED ROUTES ---------- */
app.Use(middleware.APIKeyAuth(db))
routes.RegisterPlayerAdvancedRoutes(app, db)
routes.RegisterPlayerTotalRoutes(app, db)
/* ---------- Optional import job ---------- */
go func() {
for season := 2023; season <= 2025; season++ {
if err := services.FetchAndStorePlayerAdvancedStats(db, season); err != nil {
log.Printf("Fetch failed for player advanced season %d: %v\n", season, err)
} else {
@@ -42,7 +71,7 @@ func main() {
}()
go func() {
for season := 1993; season <= 2025; season++ {
for season := 2023; season <= 2025; season++ {
if err := services.FetchAndStorePlayerTotalStats(db, season); err != nil {
log.Printf("Fetch failed for player totals season %d: %v\n", season, err)
} else {
@@ -53,15 +82,16 @@ func main() {
log.Printf("player totals Import Success")
}()
// Add Prometheus metrics endpoint
app.Get("/metrics", adaptor.HTTPHandler(promhttp.Handler()))
/* ---------- START & SHUTDOWN ---------- */
go func() {
if err := app.Listen(":5000"); err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Fatalf("listen: %v", err)
}
}()
// Register routes
routes.RegisterPlayerAdvancedRoutes(app, db)
routes.RegisterPlayerTotalRoutes(app, db)
// Swagger endpoint
app.Get("/swagger/*", fiberswagger.WrapHandler)
app.Listen(":5000")
}
<-ctx.Done() // wait for SIGTERM/CTRLC
stop() // stop receiving more signals
log.Println("shutting down…")
_ = app.Shutdown() // stop accepting new conns
log.Println("bye")
}