2024-10-21 10:31:25 +05:00

96 lines
2.3 KiB
Go

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/widget"
)
var PREFIX = "/api/widget"
func NewApp(
db model.Db,
widgetService model.WidgetService,
donatService model.DonatService,
) {
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)
server.Logger.Fatal(server.Start(":8002"))
}
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.POST(PREFIX+"/media/:mediaType/upload", SetMediaFile(widgetService))
server.POST(PREFIX+"/media/:mediaType/set", SetMediaUrl(widgetService))
server.GET(PREFIX+"/media/:mediaType/get/:widgetID", GetMediaFile(widgetService))
server.PATCH(PREFIX+"/duration/update", UpdateDuration(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")
}
}