package facade import ( "nearle/controllers" "nearle/repositories" "nearle/services" "gorm.io/gorm" ) type Facade struct { UserController *controllers.UserController ProductController *controllers.ProductController OrderController *controllers.OrderController DeliveriesController *controllers.DeliveriesController UtilsController *controllers.UtilsController TenantController *controllers.TenantController PartnerController *controllers.PartnerController CustomerController *controllers.CustomerController } func NewFacade(db *gorm.DB) *Facade { // User Module userRepo := repositories.NewUserRepository(db) userService := services.NewUserService(userRepo) userController := controllers.NewUserController(userService) // Product Module productRepo := repositories.NewProductRepository(db) productService := services.NewProductService(productRepo) productController := controllers.NewProductController(productService) // Order Module orderRepo := repositories.NewOrderRepository(db) orderService := services.NewOrderService(orderRepo) orderController := controllers.NewOrderController(orderService) // Deliveries Module deliveriesRepo := repositories.NewDeliveriesRepository(db) deliveriesService := services.NewDeliveriesService(deliveriesRepo) deliveriesController := controllers.NewDeliveriesController(deliveriesService) // Utils Module utilsRepo := repositories.NewUtilsRepository(db) utilsService := services.NewUtilsService(utilsRepo) utilsController := controllers.NewUtilsController(utilsService) //Tenant Module tenantRepo := repositories.NewTenantRepository(db) tenantService := services.NewTenantService(tenantRepo) tenantController := controllers.NewTenantController(tenantService) //Partner Module partnerRepo := repositories.NewPartnerRepository(db) partnerService := services.NewPartnerService(partnerRepo) partnerController := controllers.NewPartnerController(partnerService) //Customer Module customerRepo := repositories.NewCustomerRepository(db) customerService := services.NewCustomerService(customerRepo) customerController := controllers.NewCustomerController(customerService) return &Facade{ UserController: userController, ProductController: productController, OrderController: orderController, DeliveriesController: deliveriesController, UtilsController: utilsController, TenantController: tenantController, PartnerController: partnerController, CustomerController: customerController, } }