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" inventoryIssueController "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_issue/controller" inventoryIssueLineRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_issue/repository" inventoryIssueRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_issue/repository" inventoryIssueService "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_issue/service" inventoryReturnController "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_return/controller" inventoryReturnLineRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_return/repository" inventoryReturnRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_return/repository" inventoryReturnService "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_return/service" inventoryMovementController "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_movement/controller" inventoryMovementLineRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_movement/repository" inventoryMovementRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_movement/repository" inventoryMovementService "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_movement/service" inventoryStorageController "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_storage/controller" inventoryStorageRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_storage/repository" inventoryStorageService "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_storage/service" inventoryTransactionController "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_transaction/controller" inventoryTransactionRepo "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_transaction/repository" inventoryTransactionService "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_transaction/service" quarantineController "github.com/Caknoooo/go-gin-clean-starter/modules/quarantine/controller" quarantineLineRepo "github.com/Caknoooo/go-gin-clean-starter/modules/quarantine/repository" quarantineRepo "github.com/Caknoooo/go-gin-clean-starter/modules/quarantine/repository" quarantineService "github.com/Caknoooo/go-gin-clean-starter/modules/quarantine/service" sequenceRepo "github.com/Caknoooo/go-gin-clean-starter/modules/sequence/repository" sequenceService "github.com/Caknoooo/go-gin-clean-starter/modules/sequence/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) log := do.MustInvokeNamed[*logrus.Logger](injector, constants.LOGGER) // 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) inventoryIssueRepository := inventoryIssueRepo.NewInventoryIssueRepository(db) inventoryIssueLineRepository := inventoryIssueLineRepo.NewInventoryIssueLineRepository(db) inventoryReturnRepository := inventoryReturnRepo.NewInventoryReturnRepository(db) inventoryReturnLineRepository := inventoryReturnLineRepo.NewInventoryReturnLineRepository(db) inventoryMovementRepository := inventoryMovementRepo.NewInventoryMovementRepository(db) inventoryMovementLineRepository := inventoryMovementLineRepo.NewInventoryMovementLineRepository(db) inventoryStorageRepository := inventoryStorageRepo.NewInventoryStorageRepository(db) inventoryTransactionRepository := inventoryTransactionRepo.NewInventoryTransactionRepository(db) quarantineRepository := quarantineRepo.NewQuarantineRepository(db) quarantineLineRepository := quarantineLineRepo.NewQuarantineLineRepository(db) sequenceRepository := sequenceRepo.NewSequenceRepository(db) // Service sequenceServ := sequenceService.NewSequenceService(sequenceRepository, db) userServ := userService.NewUserService(userRepository, roleRepository, warehouseRepository, clientRepository, refreshTokenRepository, jwtService, db) productService := productService.NewProductService(productRepository, db, inventoryTransactionRepository, inventoryStorageRepository, categoryRepository, sequenceServ) 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) permissionsServ := permissionsService.NewPermissionsService(permissionsRepository, db) categoryServ := categoryService.NewCategoryService(categoryRepository, db) uomServ := uomService.NewUomService(uomRepository, sequenceServ, db, log) mvendorServ := mvendorService.NewVendorService(mvendorRepository, sequenceServ, db) warehouseServ := warehouseService.NewWarehouseService(warehouseRepository, db) zonaServ := zonaService.NewZonaService(zonaRepository, db) aisleServ := aisleService.NewAisleService(aisleRepository, db) inventoryReceiptServ := inventoryReceiptService.NewInventoryReceiptService(db, inventoryReceiptRepository, inventoryReceiptLineRepository, productRepository, uomRepository, inventoryStorageRepository, sequenceServ) assignmentServ := assignmentService.NewAssignmentService(db, assignmentRepository, assignmentUserRepository) inventoryRequestServ := inventoryRequestService.NewInventoryRequestService(db, inventoryRequestRepository, inventoryRequestLineRepository, sequenceServ) inventoryIssueServ := inventoryIssueService.NewInventoryIssueService(db, inventoryIssueRepository, inventoryIssueLineRepository, sequenceServ) inventoryReturnServ := inventoryReturnService.NewInventoryReturnService(db, inventoryReturnRepository, inventoryReturnLineRepository, inventoryIssueLineRepository, productRepository, sequenceServ) inventoryMovementServ := inventoryMovementService.NewInventoryMovementService(db, inventoryMovementRepository, inventoryMovementLineRepository, sequenceServ) inventoryStorageService := inventoryStorageService.NewInventoryStorageService(db, inventoryStorageRepository) inventoryTransactionServ := inventoryTransactionService.NewInventoryTransactionService(db, inventoryTransactionRepository) quarantineServ := quarantineService.NewQuarantineService(db, quarantineRepository, quarantineLineRepository, productRepository, uomRepository, inventoryStorageRepository) // 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, roleServ), 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, roleServ, userServ), 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 }, ) do.Provide( injector, func(i *do.Injector) (inventoryIssueController.InventoryIssueController, error) { return inventoryIssueController.NewInventoryIssueController(i, inventoryIssueServ), nil }, ) do.Provide( injector, func(i *do.Injector) (inventoryReturnController.InventoryReturnController, error) { return inventoryReturnController.NewInventoryReturnController(i, inventoryReturnServ), nil }, ) do.Provide( injector, func(i *do.Injector) (inventoryMovementController.InventoryMovementController, error) { return inventoryMovementController.NewInventoryMovementController(i, inventoryMovementServ), nil }, ) do.Provide( injector, func(i *do.Injector) (inventoryStorageController.InventoryStorageController, error) { return inventoryStorageController.NewInventoryStorageController(i, inventoryStorageService), nil }, ) do.Provide( injector, func(i *do.Injector) (inventoryTransactionController.InventoryTransactionController, error) { return inventoryTransactionController.NewInventoryTransactionController(i, inventoryTransactionServ), nil }, ) do.Provide( injector, func(i *do.Injector) (quarantineController.QuarantineController, error) { return quarantineController.NewQuarantineController(i, quarantineServ), nil }, ) }