From 99013ab88e59dc9b019c914968f14e81973c396a Mon Sep 17 00:00:00 2001 From: Habib Fatkhul Rohman Date: Fri, 21 Nov 2025 14:23:00 +0700 Subject: [PATCH] feat: enhance WarehouseController with user and role services for improved access control --- .../controller/warehouse_controller.go | 32 +++++++++++++++++-- providers/core.go | 7 ++-- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/modules/warehouse/controller/warehouse_controller.go b/modules/warehouse/controller/warehouse_controller.go index b8c4ea5..4b26960 100644 --- a/modules/warehouse/controller/warehouse_controller.go +++ b/modules/warehouse/controller/warehouse_controller.go @@ -3,6 +3,8 @@ package controller import ( "net/http" + roleservice "github.com/Caknoooo/go-gin-clean-starter/modules/role/service" + userservice "github.com/Caknoooo/go-gin-clean-starter/modules/user/service" "github.com/Caknoooo/go-gin-clean-starter/modules/warehouse/dto" "github.com/Caknoooo/go-gin-clean-starter/modules/warehouse/query" "github.com/Caknoooo/go-gin-clean-starter/modules/warehouse/service" @@ -22,7 +24,9 @@ type WarehouseController interface { } type warehouseController struct { + userService userservice.UserService warehouseService service.WarehouseService + roleService roleservice.RoleService db *gorm.DB } @@ -87,8 +91,30 @@ func (w *warehouseController) GetById(ctx *gin.Context) { } func (w *warehouseController) GetAll(ctx *gin.Context) { - clientId := ctx.Query("client_id") var filter query.WarehouseFilter + var clientId string + + userId := ctx.MustGet("user_id").(string) + user, err := w.userService.GetUserById(ctx, userId) + if err != nil { + res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_WAREHOUSE, err.Error(), nil) + ctx.JSON(http.StatusNotFound, res) + return + } + + if user.Name != constants.SUPERADMIN { + clientId = ctx.MustGet("client_id").(string) + } else { + clientId = ctx.Query("client_id") + } + // roleId := ctx.MustGet("role_id").(string) + // role, err := w.warehouseService.GetRoleById(ctx, roleId) + // if err != nil { + // res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_ROLE, err.Error(), nil) + // ctx.JSON(http.StatusNotFound, res) + // return + // } + filter.ClientID = clientId if err := ctx.ShouldBindQuery(&filter); err != nil { res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_WAREHOUSE, err.Error(), nil) @@ -125,10 +151,12 @@ func (w *warehouseController) GetAll(ctx *gin.Context) { ctx.JSON(http.StatusOK, res) } -func NewWarehouseController(i *do.Injector, warehouseService service.WarehouseService) WarehouseController { +func NewWarehouseController(i *do.Injector, warehouseService service.WarehouseService, roleService roleservice.RoleService, userService userservice.UserService) WarehouseController { db := do.MustInvokeNamed[*gorm.DB](i, constants.DB) return &warehouseController{ warehouseService: warehouseService, + roleService: roleService, + userService: userService, db: db, } } diff --git a/providers/core.go b/providers/core.go index 94a0045..3c042a3 100644 --- a/providers/core.go +++ b/providers/core.go @@ -96,7 +96,6 @@ import ( inventoryTransactionRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_transaction/repository" inventoryTransactionService "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_transaction/service" - "github.com/Caknoooo/go-gin-clean-starter/modules/user/controller" "github.com/Caknoooo/go-gin-clean-starter/modules/user/repository" userService "github.com/Caknoooo/go-gin-clean-starter/modules/user/service" @@ -164,7 +163,7 @@ func RegisterDependencies(injector *do.Injector) { // Service userServ := userService.NewUserService(userRepository, roleRepository, warehouseRepository, refreshTokenRepository, jwtService, db) productService := productService.NewProductService(productRepository, db) - roleService := roleService.NewRoleService(roleRepository, refreshTokenRepository, jwtService, userServ, db) + roleServ := roleService.NewRoleService(roleRepository, refreshTokenRepository, jwtService, userServ, db) menuSvc := menuService.NewMenuService(menuRepository, jwtService, db) maintenanceGroupServ := maintGroupService.NewMaintenanceGroupService(maintenanceGroupRepository, maintenanceGroupRoleRepository, maintenanceGroupRoleUserRepository, db) clientServ := clientService.NewClientService(clientRepository, db) @@ -202,7 +201,7 @@ func RegisterDependencies(injector *do.Injector) { ) do.Provide( injector, func(i *do.Injector) (roleController.RoleController, error) { - return roleController.NewRoleController(i, roleService), nil + return roleController.NewRoleController(i, roleServ), nil }, ) do.Provide( @@ -247,7 +246,7 @@ func RegisterDependencies(injector *do.Injector) { ) do.Provide( injector, func(i *do.Injector) (warehouseController.WarehouseController, error) { - return warehouseController.NewWarehouseController(i, warehouseServ), nil + return warehouseController.NewWarehouseController(i, warehouseServ, roleServ, userServ), nil }, ) do.Provide(