package controller import ( "netidhub-saas-be/app/module/menu_modules/request" "netidhub-saas-be/app/module/menu_modules/service" "netidhub-saas-be/utils/paginator" "strconv" "github.com/gofiber/fiber/v2" utilRes "netidhub-saas-be/utils/response" utilVal "netidhub-saas-be/utils/validator" ) type menuModulesController struct { menuModulesService service.MenuModulesService } type MenuModulesController interface { All(c *fiber.Ctx) error GetByMenuId(c *fiber.Ctx) error GetByModuleId(c *fiber.Ctx) error Show(c *fiber.Ctx) error Save(c *fiber.Ctx) error SaveBatch(c *fiber.Ctx) error Update(c *fiber.Ctx) error Delete(c *fiber.Ctx) error } func NewMenuModulesController(menuModulesService service.MenuModulesService) MenuModulesController { return &menuModulesController{ menuModulesService: menuModulesService, } } // All MenuModules // @Summary Get all MenuModules // @Description API for getting all MenuModules // @Tags MenuModules // @Security Bearer // @Param menu_id query int false "Menu ID" // @Param module_id query int false "Module ID" // @Param req query paginator.Pagination false "pagination parameters" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError // @Failure 500 {object} response.InternalServerError // @Router /menu-modules [get] func (_i *menuModulesController) All(c *fiber.Ctx) error { paginate, err := paginator.Paginate(c) if err != nil { return err } req := request.MenuModulesQueryRequest{ Pagination: paginate, } if menuId := c.Query("menu_id"); menuId != "" { id, _ := strconv.ParseUint(menuId, 10, 0) menuIdUint := uint(id) req.MenuId = &menuIdUint } if moduleId := c.Query("module_id"); moduleId != "" { id, _ := strconv.ParseUint(moduleId, 10, 0) moduleIdUint := uint(id) req.ModuleId = &moduleIdUint } menuModulesData, paging, err := _i.menuModulesService.All(req) if err != nil { return err } return utilRes.Resp(c, utilRes.Response{ Success: true, Messages: utilRes.Messages{"MenuModules list successfully retrieved"}, Data: menuModulesData, Meta: paging, }) } // GetByMenuId get MenuModules by Menu ID // @Summary Get MenuModules by Menu ID // @Description API for getting MenuModules by Menu ID // @Tags MenuModules // @Security Bearer // @Param menu_id path int true "Menu ID" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError // @Failure 500 {object} response.InternalServerError // @Router /menu-modules/menu/{menu_id} [get] func (_i *menuModulesController) GetByMenuId(c *fiber.Ctx) error { menuId, err := strconv.ParseUint(c.Params("menu_id"), 10, 0) if err != nil { return err } menuModulesData, err := _i.menuModulesService.GetByMenuId(uint(menuId)) if err != nil { return err } return utilRes.Resp(c, utilRes.Response{ Success: true, Messages: utilRes.Messages{"MenuModules by menu successfully retrieved"}, Data: menuModulesData, }) } // GetByModuleId get MenuModules by Module ID // @Summary Get MenuModules by Module ID // @Description API for getting MenuModules by Module ID // @Tags MenuModules // @Security Bearer // @Param module_id path int true "Module ID" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError // @Failure 500 {object} response.InternalServerError // @Router /menu-modules/module/{module_id} [get] func (_i *menuModulesController) GetByModuleId(c *fiber.Ctx) error { moduleId, err := strconv.ParseUint(c.Params("module_id"), 10, 0) if err != nil { return err } menuModulesData, err := _i.menuModulesService.GetByModuleId(uint(moduleId)) if err != nil { return err } return utilRes.Resp(c, utilRes.Response{ Success: true, Messages: utilRes.Messages{"MenuModules by module successfully retrieved"}, Data: menuModulesData, }) } // Show get one MenuModule // @Summary Get one MenuModule // @Description API for getting one MenuModule // @Tags MenuModules // @Security Bearer // @Param id path int true "MenuModule ID" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError // @Failure 500 {object} response.InternalServerError // @Router /menu-modules/{id} [get] func (_i *menuModulesController) Show(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 0) if err != nil { return err } menuModuleData, err := _i.menuModulesService.Show(uint(id)) if err != nil { return err } return utilRes.Resp(c, utilRes.Response{ Success: true, Messages: utilRes.Messages{"MenuModule successfully retrieved"}, Data: menuModuleData, }) } // Save create MenuModule // @Summary Create MenuModule // @Description API for create MenuModule // @Tags MenuModules // @Security Bearer // @Param X-Csrf-Token header string false "Insert the X-Csrf-Token" // @Param payload body request.MenuModulesCreateRequest true "Required payload" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError // @Failure 500 {object} response.InternalServerError // @Router /menu-modules [post] func (_i *menuModulesController) Save(c *fiber.Ctx) error { req := new(request.MenuModulesCreateRequest) if err := utilVal.ParseAndValidate(c, req); err != nil { return err } err := _i.menuModulesService.Save(*req) if err != nil { return err } return utilRes.Resp(c, utilRes.Response{ Success: true, Messages: utilRes.Messages{"MenuModule successfully created"}, }) } // SaveBatch create multiple MenuModules at once // @Summary Create multiple MenuModules // @Description API for creating multiple MenuModules at once for a menu // @Tags MenuModules // @Security Bearer // @Param X-Csrf-Token header string false "Insert the X-Csrf-Token" // @Param payload body request.MenuModulesBatchCreateRequest true "Required payload" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError // @Failure 500 {object} response.InternalServerError // @Router /menu-modules/batch [post] func (_i *menuModulesController) SaveBatch(c *fiber.Ctx) error { req := new(request.MenuModulesBatchCreateRequest) if err := utilVal.ParseAndValidate(c, req); err != nil { return err } err := _i.menuModulesService.SaveBatch(*req) if err != nil { return err } return utilRes.Resp(c, utilRes.Response{ Success: true, Messages: utilRes.Messages{"MenuModules successfully created in batch"}, }) } // Update MenuModule // @Summary Update MenuModule // @Description API for update MenuModule // @Tags MenuModules // @Security Bearer // @Param X-Csrf-Token header string false "Insert the X-Csrf-Token" // @Param payload body request.MenuModulesUpdateRequest true "Required payload" // @Param id path int true "MenuModule ID" // @Success 200 {object} response.Response // @Failure 401 {object} response.Response // @Failure 404 {object} response.Response // @Failure 422 {object} response.Response // @Failure 500 {object} response.Response // @Router /menu-modules/{id} [put] func (_i *menuModulesController) Update(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 0) if err != nil { return err } req := new(request.MenuModulesUpdateRequest) if err := utilVal.ParseAndValidate(c, req); err != nil { return err } err = _i.menuModulesService.Update(uint(id), *req) if err != nil { return err } return utilRes.Resp(c, utilRes.Response{ Success: true, Messages: utilRes.Messages{"MenuModule successfully updated"}, }) } // Delete MenuModule // @Summary Delete MenuModule // @Description API for delete MenuModule (soft delete) // @Tags MenuModules // @Security Bearer // @Param X-Csrf-Token header string false "Insert the X-Csrf-Token" // @Param id path int true "MenuModule ID" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError // @Failure 500 {object} response.InternalServerError // @Router /menu-modules/{id} [delete] func (_i *menuModulesController) Delete(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 0) if err != nil { return err } err = _i.menuModulesService.Delete(uint(id)) if err != nil { return err } return utilRes.Resp(c, utilRes.Response{ Success: true, Messages: utilRes.Messages{"MenuModule successfully deleted"}, }) }