// @title Easywish client API // @version 1.0 // @description Easy and feature-rich wishlist. // @license.name GPL 3.0 // @BasePath /api/ // @Schemes http // @securityDefinitions.apikey JWT // @in header // @name Authorization package main import ( "time" "net/http" "context" "github.com/gin-gonic/gin" "go.uber.org/fx" "easywish/config" "easywish/internal/controllers" "easywish/internal/logger" "easywish/internal/routes" "easywish/internal/services" // swaggerfiles "github.com/swaggo/files" // ginSwagger "github.com/swaggo/gin-swagger" ) func main() { if _, err := config.Load(); err != nil { panic(err) } defer logger.Sync() fx.New( services.Module, fx.Provide( // func() *gin.Engine { // engine := gin.Default() // engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler)) // return engine // }, gin.Default, controllers.NewAuthController, controllers.NewServiceController, ), routes.Module, fx.Invoke(func(lc fx.Lifecycle, router *gin.Engine) { server := &http.Server{ Addr: ":8080", Handler: router, } lc.Append(fx.Hook{ OnStart: func(ctx context.Context) error { go func() { if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { } }() return nil }, OnStop: func(ctx context.Context) error { shutdownCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() return server.Shutdown(shutdownCtx) }, }) }), ).Run() }