58 lines
1.4 KiB
Go

package main
// @title Watch Party Backend API
// @version 1.0
// @description Backend API for watch-party app.
// @BasePath /
// @schemes http https
// @host localhost:8082
import (
"context"
"log"
"net/http"
"time"
"watch-party-backend/internal/config"
"watch-party-backend/internal/db"
httpapi "watch-party-backend/internal/http"
"watch-party-backend/internal/repo"
"watch-party-backend/internal/service"
"github.com/gin-gonic/gin"
)
func main() {
// 1) config
cfg := config.Load()
gin.SetMode(cfg.GinMode)
// 2) DB pool
ctx := context.Background()
pool, err := db.NewPool(ctx, cfg.DB.DSN(), cfg.DB.MaxConns)
if err != nil {
log.Fatalf("db connect failed: %v", err)
}
defer pool.Close()
// 3) wiring
episodeRepo := repo.NewEpisodeRepo(pool)
episodeSvc := service.NewEpisodeService(episodeRepo)
router := httpapi.NewRouter(episodeSvc)
// 4) HTTP server with timeouts
s := &http.Server{
Addr: cfg.Addr,
Handler: router,
ReadTimeout: 10 * time.Second,
ReadHeaderTimeout: 5 * time.Second,
WriteTimeout: 30 * time.Second,
IdleTimeout: 60 * time.Second,
}
log.Printf("listening on %s (dsn: %s)", cfg.Addr, config.RedactDSN(cfg.DB.DSN()))
if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("server error: %v", err)
}
}