package http import ( "context" "donat-widget/internal/model/sql" "github.com/labstack/echo/v4" "github.com/swaggo/echo-swagger" "log/slog" ) import ( "donat-widget/internal/model" "donat-widget/pkg/validator" ) import ( . "donat-widget/internal/api/http/handlers/donat" . "donat-widget/internal/api/http/handlers/target" . "donat-widget/internal/api/http/handlers/widget" ) var PREFIX = "/api/widget" func NewApp( db model.Db, widgetService model.WidgetService, donatService model.DonatService, targetService model.TargetService, ) { server := echo.New() server.Validator = validator.NewValidator() server.GET(PREFIX+"/docs/*", echoSwagger.WrapHandler) server.GET(PREFIX+"/table/create", CreateTale(db)) server.GET(PREFIX+"/table/drop", DropTale(db)) IncludeWidgetHandlers(server, widgetService) IncludeDonatHandlers(server, donatService) IncludeTargetHandlers(server, targetService, donatService) server.Logger.Fatal(server.Start(":8002")) } func IncludeTargetHandlers( server *echo.Echo, targetService model.TargetService, donatService model.DonatService, ) { server.POST(PREFIX+"/target/create", CreateTarget(targetService)) server.GET(PREFIX+"/target/all", GetAllTarget(targetService)) server.POST(PREFIX+"/target/addAmount", AddAmountTarget(targetService, donatService)) } func IncludeDonatHandlers( server *echo.Echo, donatService model.DonatService, ) { server.POST(PREFIX+"/donat/create", CreateDonat(donatService)) server.POST(PREFIX+"/donat/view/:donatID", MarkDonatView(donatService)) server.POST(PREFIX+"/donat/paid", MarkDonatPaid(donatService)) } func IncludeWidgetHandlers( server *echo.Echo, widgetService model.WidgetService, ) { server.POST(PREFIX+"/create", CreateWidget(widgetService)) server.GET(PREFIX+"/html/:widgetID", GetWidgetHTML(widgetService)) server.GET(PREFIX+"/info/:widgetID", GetWidgetInfo(widgetService)) server.PATCH(PREFIX+"/duration/update", UpdateDuration(widgetService)) server.POST(PREFIX+"/media/:mediaType/upload", SetMediaFile(widgetService)) server.POST(PREFIX+"/media/:mediaType/set", SetMediaUrl(widgetService)) server.GET(PREFIX+"/media/:mediaType/get/:widgetID", GetMediaFile(widgetService)) } func CreateTale(db model.Db) echo.HandlerFunc { return func(request echo.Context) error { ctx := context.Background() err := db.CreateTable(ctx, sql.CreateTableQuery) if err != nil { slog.Error("db.CreateTable: ", err) return err } slog.Info("Create table ok") return request.String(200, "Create table ok") } } func DropTale(db model.Db) echo.HandlerFunc { return func(request echo.Context) error { ctx := context.Background() err := db.DropTable(ctx, sql.DropTableQuery) if err != nil { slog.Error("db.DropTable: ", err) return err } slog.Info("Dropped table ok") return request.String(200, "Dropped table ok") } }