package http import ( "github.com/gofiber/fiber/v2" "github.com/google/wire" "leafdev.top/Leaf/leaf-library-3/internal/api/http/controller" "leafdev.top/Leaf/leaf-library-3/internal/api/http/middleware" "leafdev.top/Leaf/leaf-library-3/internal/base/conf" "leafdev.top/Leaf/leaf-library-3/internal/base/logger" "leafdev.top/Leaf/leaf-library-3/internal/services/auth" ) type IMiddleware interface { Handler() fiber.Handler } type Middleware struct { Logger IMiddleware Auth IMiddleware JSONResponse IMiddleware RBAC *middleware.RBAC } type Handlers struct { // User *v1.UserController Workspace *controller.WorkspaceController Collection *controller.CollectionController Document *controller.DocumentController } func NewHandler( workspace *controller.WorkspaceController, collection *controller.CollectionController, document *controller.DocumentController, ) *Handlers { return &Handlers{ Workspace: workspace, Collection: collection, Document: document, } } func NewMiddleware(config *conf.Config, logger *logger.Logger, authService *auth.Service) *Middleware { return &Middleware{ Logger: middleware.NewLogger(logger.Logger), Auth: middleware.NewAuth(config, authService), JSONResponse: middleware.NewJSONResponse(), RBAC: middleware.NewRBAC(authService, config), } } var ProviderSet = wire.NewSet( // Init Middleware middleware.NewAuth, middleware.NewLogger, middleware.NewJSONResponse, middleware.NewRBAC, NewMiddleware, // Init Controller // controller.NewUserController, controller.NewWorkspaceController, controller.NewCollectionController, controller.NewDocumentController, // Init Handler NewHandler, )