wms-be/providers/core.go

242 lines
12 KiB
Go

package providers
import (
"github.com/Caknoooo/go-gin-clean-starter/config"
authRepo "github.com/Caknoooo/go-gin-clean-starter/modules/auth/repository"
"github.com/Caknoooo/go-gin-clean-starter/modules/auth/service"
clientController "github.com/Caknoooo/go-gin-clean-starter/modules/client/controller"
clientRepo "github.com/Caknoooo/go-gin-clean-starter/modules/client/repository"
clientService "github.com/Caknoooo/go-gin-clean-starter/modules/client/service"
"github.com/sirupsen/logrus"
logsController "github.com/Caknoooo/go-gin-clean-starter/modules/logs/controller"
menuController "github.com/Caknoooo/go-gin-clean-starter/modules/menu/controller"
menuRepo "github.com/Caknoooo/go-gin-clean-starter/modules/menu/repository"
menuService "github.com/Caknoooo/go-gin-clean-starter/modules/menu/service"
productController "github.com/Caknoooo/go-gin-clean-starter/modules/product/controller"
productRepo "github.com/Caknoooo/go-gin-clean-starter/modules/product/repository"
productService "github.com/Caknoooo/go-gin-clean-starter/modules/product/service"
roleController "github.com/Caknoooo/go-gin-clean-starter/modules/role/controller"
roleRepo "github.com/Caknoooo/go-gin-clean-starter/modules/role/repository"
roleService "github.com/Caknoooo/go-gin-clean-starter/modules/role/service"
permissionsController "github.com/Caknoooo/go-gin-clean-starter/modules/permissions/controller"
permissionsRepo "github.com/Caknoooo/go-gin-clean-starter/modules/permissions/repository"
permissionsService "github.com/Caknoooo/go-gin-clean-starter/modules/permissions/service"
maintGroupController "github.com/Caknoooo/go-gin-clean-starter/modules/maintenance_group/controller"
maintGroupRepo "github.com/Caknoooo/go-gin-clean-starter/modules/maintenance_group/repository"
maintGroupRepoRole "github.com/Caknoooo/go-gin-clean-starter/modules/maintenance_group/repository"
maintGroupRepoRoleUser "github.com/Caknoooo/go-gin-clean-starter/modules/maintenance_group/repository"
maintGroupService "github.com/Caknoooo/go-gin-clean-starter/modules/maintenance_group/service"
categoryController "github.com/Caknoooo/go-gin-clean-starter/modules/category/controller"
categoryRepo "github.com/Caknoooo/go-gin-clean-starter/modules/category/repository"
categoryService "github.com/Caknoooo/go-gin-clean-starter/modules/category/service"
uomController "github.com/Caknoooo/go-gin-clean-starter/modules/uom/controller"
uomRepo "github.com/Caknoooo/go-gin-clean-starter/modules/uom/repository"
uomService "github.com/Caknoooo/go-gin-clean-starter/modules/uom/service"
mvendorController "github.com/Caknoooo/go-gin-clean-starter/modules/mvendor/controller"
mvendorRepo "github.com/Caknoooo/go-gin-clean-starter/modules/mvendor/repository"
mvendorService "github.com/Caknoooo/go-gin-clean-starter/modules/mvendor/service"
warehouseController "github.com/Caknoooo/go-gin-clean-starter/modules/warehouse/controller"
warehouseRepo "github.com/Caknoooo/go-gin-clean-starter/modules/warehouse/repository"
warehouseService "github.com/Caknoooo/go-gin-clean-starter/modules/warehouse/service"
zonaController "github.com/Caknoooo/go-gin-clean-starter/modules/zona/controller"
zonaRepo "github.com/Caknoooo/go-gin-clean-starter/modules/zona/repository"
zonaService "github.com/Caknoooo/go-gin-clean-starter/modules/zona/service"
aisleController "github.com/Caknoooo/go-gin-clean-starter/modules/aisle/controller"
aisleRepo "github.com/Caknoooo/go-gin-clean-starter/modules/aisle/repository"
aisleService "github.com/Caknoooo/go-gin-clean-starter/modules/aisle/service"
inventoryReceiptController "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_receipt/controller"
inventoryReceiptLineRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_receipt/repository"
inventoryReceiptRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_receipt/repository"
inventoryReceiptService "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_receipt/service"
assignmentController "github.com/Caknoooo/go-gin-clean-starter/modules/assignment/controller"
assignmentRepo "github.com/Caknoooo/go-gin-clean-starter/modules/assignment/repository"
assignmentUserRepo "github.com/Caknoooo/go-gin-clean-starter/modules/assignment/repository"
assignmentService "github.com/Caknoooo/go-gin-clean-starter/modules/assignment/service"
inventoryRequestController "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_request/controller"
inventoryRequestLineRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_request/repository"
inventoryRequestRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_request/repository"
inventoryRequestService "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_request/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"
"github.com/Caknoooo/go-gin-clean-starter/pkg/constants"
"github.com/samber/do"
"gorm.io/gorm"
)
func InitDatabase(injector *do.Injector) {
do.ProvideNamed(injector, constants.DB, func(i *do.Injector) (*gorm.DB, error) {
return config.SetUpDatabaseConnection(), nil
})
}
func initLogger(injector *do.Injector) {
do.ProvideNamed(injector, constants.LOGGER, func(i *do.Injector) (*logrus.Logger, error) {
return config.SetupLoggerLogrus(), nil
})
}
func RegisterDependencies(injector *do.Injector) {
InitDatabase(injector)
initLogger(injector) // <-- tambahkan ini agar logger ter-register
do.ProvideNamed(injector, constants.JWTService, func(i *do.Injector) (service.JWTService, error) {
return service.NewJWTService(), nil
})
// Initialize
db := do.MustInvokeNamed[*gorm.DB](injector, constants.DB)
jwtService := do.MustInvokeNamed[service.JWTService](injector, constants.JWTService)
// Repository
userRepository := repository.NewUserRepository(db)
refreshTokenRepository := authRepo.NewRefreshTokenRepository(db)
productRepository := productRepo.NewProductRepository(db)
menuRepository := menuRepo.NewMenuRepository(db)
roleRepository := roleRepo.NewRoleRepository(db)
clientRepository := clientRepo.NewClientRepository(db)
maintenanceGroupRepository := maintGroupRepo.NewMaintGroupRepository(db)
maintenanceGroupRoleRepository := maintGroupRepoRole.NewMaintGroupRoleRepository(db)
maintenanceGroupRoleUserRepository := maintGroupRepoRoleUser.NewMaintGroupRoleUserRepository(db)
permissionsRepository := permissionsRepo.NewPermissionsRepository(db)
categoryRepository := categoryRepo.NewCategoryRepository(db)
uomRepository := uomRepo.NewUomRepository(db)
mvendorRepository := mvendorRepo.NewVendorRepository(db)
warehouseRepository := warehouseRepo.NewWarehouseRepository(db)
zonaRepository := zonaRepo.NewZonaRepository(db)
aisleRepository := aisleRepo.NewAisleRepository(db)
inventoryReceiptRepository := inventoryReceiptRepo.NewInventoryReceiptRepository(db)
inventoryReceiptLineRepository := inventoryReceiptLineRepo.NewInventoryReceiptLineRepository(db)
assignmentRepository := assignmentRepo.NewAssignmentRepository(db)
assignmentUserRepository := assignmentUserRepo.NewAssignmentUserRepository(db)
inventoryRequestRepository := inventoryRequestRepo.NewInventoryRequestRepository(db)
inventoryRequestLineRepository := inventoryRequestLineRepo.NewInventoryRequestLineRepository(db)
// Service
userServ := userService.NewUserService(userRepository, refreshTokenRepository, jwtService, db)
productService := productService.NewProductService(productRepository, db)
roleService := 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)
permissionsServ := permissionsService.NewPermissionsService(permissionsRepository, db)
categoryServ := categoryService.NewCategoryService(categoryRepository, db)
uomServ := uomService.NewUomService(uomRepository, db)
mvendorServ := mvendorService.NewVendorService(mvendorRepository, db)
warehouseServ := warehouseService.NewWarehouseService(warehouseRepository, db)
zonaServ := zonaService.NewZonaService(zonaRepository, db)
aisleServ := aisleService.NewAisleService(aisleRepository, db)
inventoryReceiptServ := inventoryReceiptService.NewInventoryReceiptService(db, inventoryReceiptRepository, inventoryReceiptLineRepository)
assignmentServ := assignmentService.NewAssignmentService(db, assignmentRepository, assignmentUserRepository)
inventoryRequestServ := inventoryRequestService.NewInventoryRequestService(db, inventoryRequestRepository, inventoryRequestLineRepository)
// Controller
do.Provide(
injector, func(i *do.Injector) (clientController.ClientController, error) {
return clientController.NewClientController(i, clientServ), nil
},
)
do.Provide(
injector, func(i *do.Injector) (controller.UserController, error) {
return controller.NewUserController(i, userServ), nil
},
)
do.Provide(
injector, func(i *do.Injector) (userService.UserService, error) {
return userServ, nil
},
)
do.Provide(
injector, func(i *do.Injector) (roleController.RoleController, error) {
return roleController.NewRoleController(i, roleService), nil
},
)
do.Provide(
injector, func(i *do.Injector) (menuController.MenuController, error) {
return menuController.NewMenuController(i, menuSvc), nil
},
)
do.Provide(
injector, func(i *do.Injector) (logsController.LogsController, error) {
return logsController.NewLogsController(i), nil
},
)
do.Provide(
injector, func(i *do.Injector) (maintGroupController.MaintenanceGroupController, error) {
return maintGroupController.NewMaintenanceGroupController(i, maintenanceGroupServ), nil
},
)
do.Provide(
injector, func(i *do.Injector) (permissionsController.PermissionsController, error) {
return permissionsController.NewPermissionsController(permissionsServ), nil
},
)
do.Provide(
injector, func(i *do.Injector) (productController.ProductController, error) {
return productController.NewProductController(i, productService), nil
},
)
do.Provide(
injector, func(i *do.Injector) (categoryController.CategoryController, error) {
return categoryController.NewCategoryController(i, categoryServ), nil
},
)
do.Provide(
injector, func(i *do.Injector) (uomController.UomController, error) {
return uomController.NewUomController(i, uomServ), nil
},
)
do.Provide(
injector, func(i *do.Injector) (mvendorController.VendorController, error) {
return mvendorController.NewVendorController(i, mvendorServ), nil
},
)
do.Provide(
injector, func(i *do.Injector) (warehouseController.WarehouseController, error) {
return warehouseController.NewWarehouseController(i, warehouseServ), nil
},
)
do.Provide(
injector, func(i *do.Injector) (zonaController.ZonaController, error) {
return zonaController.NewZonaController(i, zonaServ), nil
},
)
do.Provide(
injector, func(i *do.Injector) (aisleController.AisleController, error) {
return aisleController.NewAisleController(aisleServ), nil
},
)
do.Provide(
injector, func(i *do.Injector) (inventoryReceiptController.InventoryReceiptController, error) {
return inventoryReceiptController.NewInventoryReceiptController(i, inventoryReceiptServ), nil
},
)
do.Provide(
injector, func(i *do.Injector) (assignmentController.AssignmentController, error) {
return assignmentController.NewAssignmentController(i, assignmentServ), nil
},
)
do.Provide(
injector, func(i *do.Injector) (inventoryRequestController.InventoryRequestController, error) {
return inventoryRequestController.NewInventoryRequestController(i, inventoryRequestServ), nil
},
)
}