package http import ( "context" _ "donat-widget/api/http" "donat-widget/infrastructure/pg" widgetHandler "donat-widget/internal/api/http/handlers/widget" "donat-widget/internal/config" "donat-widget/pkg/validator" "github.com/labstack/echo/v4" "github.com/swaggo/echo-swagger" "log/slog" "os" ) import ( widgetService "donat-widget/internal/service/widget" ) type App struct { Config *config.Config } func NewApp() *echo.Echo { app := &App{} cfg := app.InitConfig() pool := app.initDB(cfg) log := app.InitLogger() server := InitHTTPServer() InitHandlers(server, pool, log) return server } func Run(server *echo.Echo) { server.Logger.Fatal(server.Start(":8002")) } func InitHTTPServer() *echo.Echo { server := echo.New() server.Validator = validator.NewValidator() return server } func (a *App) InitConfig() *config.Config { cfg := config.Init() return cfg } func (a *App) initDB(cfg *config.Config) *pg.Postgres { pool := pg.NewPgPool( context.Background(), cfg.Database.Username, cfg.Database.Password, cfg.Database.Host, cfg.Database.Port, cfg.Database.DBName, ) return pool } func InitHandlers(server *echo.Echo, pool *pg.Postgres, log *slog.Logger) { PREFIX := "/api/widget" server.GET("/api/docs/*", echoSwagger.WrapHandler) widgetSvc := widgetService.New(pool) server.GET(PREFIX+"/create", widgetHandler.Create(widgetSvc, log)) } func (a *App) InitLogger() *slog.Logger { logger := slog.New(slog.NewJSONHandler(os.Stdout, nil)) return logger }