74 lines
1.5 KiB
Go
74 lines
1.5 KiB
Go
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
|
|
}
|