package purchases import ( "fmt" "github.com/go-playground/validator/v10" "github.com/gofiber/fiber/v2" commonRepo "gitlab.com/mbugroup/lti-api.git/internal/common/repository" commonSvc "gitlab.com/mbugroup/lti-api.git/internal/common/service" rProductWarehouse "gitlab.com/mbugroup/lti-api.git/internal/modules/inventory/product-warehouses/repositories" rSupplier "gitlab.com/mbugroup/lti-api.git/internal/modules/master/suppliers/repositories" rWarehouse "gitlab.com/mbugroup/lti-api.git/internal/modules/master/warehouses/repositories" controller "gitlab.com/mbugroup/lti-api.git/internal/modules/purchases/controllers" rPurchase "gitlab.com/mbugroup/lti-api.git/internal/modules/purchases/repositories" service "gitlab.com/mbugroup/lti-api.git/internal/modules/purchases/services" rUser "gitlab.com/mbugroup/lti-api.git/internal/modules/users/repositories" sUser "gitlab.com/mbugroup/lti-api.git/internal/modules/users/services" utils "gitlab.com/mbugroup/lti-api.git/internal/utils" "gorm.io/gorm" ) func RegisterRoutes(router fiber.Router, db *gorm.DB, validate *validator.Validate) { group := router.Group("/purchases") purchaseRepo := rPurchase.NewPurchaseRepository(db) productWarehouseRepo := rProductWarehouse.NewProductWarehouseRepository(db) warehouseRepo := rWarehouse.NewWarehouseRepository(db) supplierRepo := rSupplier.NewSupplierRepository(db) userRepo := rUser.NewUserRepository(db) approvalRepo := commonRepo.NewApprovalRepository(db) approvalService := commonSvc.NewApprovalService(approvalRepo) if err := approvalService.RegisterWorkflowSteps(utils.ApprovalWorkflowPurchase, utils.PurchaseApprovalSteps); err != nil { panic(fmt.Sprintf("failed to register purchase approval workflow: %v", err)) } purchaseService := service.NewPurchaseService( validate, purchaseRepo, productWarehouseRepo, warehouseRepo, supplierRepo, approvalRepo, ) userService := sUser.NewUserService(userRepo, validate) PurchaseRoutes(group, userService, purchaseService) } func PurchaseRoutes(v1 fiber.Router, u sUser.UserService, s service.PurchaseService) { ctrl := controller.NewPurchaseController(s) route := v1.Group("/requisitions") // route.Post("/", m.Auth(u), ctrl.CreateOne) route.Post("/", ctrl.CreateOne) route.Post("/:id/approvals/staff", ctrl.ApproveStaffPurchase) }