package router import ( "tm/internal/assets" "tm/internal/company" "tm/internal/company_category" "tm/internal/customer" "tm/internal/feedback" "tm/internal/inquiry" "tm/internal/tender" "tm/internal/tender_approval" "tm/internal/user" "github.com/labstack/echo/v4" ) func RegisterAdminRoutes(e *echo.Echo, userHandler *user.Handler, companyHandler *company.Handler, customerHandler *customer.Handler, tenderHandler *tender.TenderHandler, feedbackHandler *feedback.Handler, tenderApprovalHandler *tender_approval.Handler, inquiryHandler *inquiry.Handler, categoryHandler *company_category.Handler, flagHandler *assets.Handler) { adminV1 := e.Group("/admin/v1") // Admin Users Routes adminUsersGP := adminV1.Group("/users") { adminUsersGP.Use(userHandler.AuthMiddleware()) adminUsersGP.POST("", userHandler.CreateUser) adminUsersGP.GET("", userHandler.ListUsers) adminUsersGP.GET("/:id", userHandler.GetUserByID) adminUsersGP.PUT("/:id", userHandler.UpdateUser) adminUsersGP.DELETE("/:id", userHandler.DeleteUser) adminUsersGP.PUT("/:id/status", userHandler.UpdateUserStatus) } // Admin user profile profileGP := adminV1.Group("/profile") { userAuthorizationGP := profileGP.Group("") userAuthorizationGP.POST("/login", userHandler.Login) userAuthorizationGP.POST("/refresh-token", userHandler.RefreshToken) userAuthorizationGP.POST("/reset-password", userHandler.ResetPassword) userProfileGP := profileGP.Group("") userProfileGP.Use(userHandler.AuthMiddleware()) userProfileGP.GET("", userHandler.GetProfile) userProfileGP.PUT("", userHandler.UpdateProfile) userProfileGP.PUT("/change-password", userHandler.ChangePassword) userProfileGP.DELETE("/logout", userHandler.Logout) } // Admin Companies Routes companiesGP := adminV1.Group("/companies") { companiesGP.Use(userHandler.AuthMiddleware()) companiesGP.POST("", companyHandler.Create) companiesGP.GET("", companyHandler.Search) companiesGP.GET("/:id", companyHandler.Get) companiesGP.PUT("/:id", companyHandler.Update) companiesGP.DELETE("/:id", companyHandler.Delete) companiesGP.PATCH("/:id/status", companyHandler.UpdateStatus) companiesGP.PATCH("/:id/verification", companyHandler.UpdateVerification) } // Admin Categories Routes categoriesGP := adminV1.Group("/company-categories") { categoriesGP.Use(userHandler.AuthMiddleware()) categoriesGP.POST("", categoryHandler.Create) categoriesGP.GET("", categoryHandler.Search) categoriesGP.GET("/:id", categoryHandler.Get) categoriesGP.PUT("/:id", categoryHandler.Update) categoriesGP.DELETE("/:id", categoryHandler.Delete) categoriesGP.PATCH("/:id/publish", categoryHandler.TogglePublish) } // Admin Customers Routes customersGP := adminV1.Group("/customers") { customersGP.Use(userHandler.AuthMiddleware()) customersGP.POST("", customerHandler.CreateCustomer) customersGP.GET("", customerHandler.Search) customersGP.GET("/:id", customerHandler.GetCustomerByID) customersGP.PUT("/:id", customerHandler.UpdateCustomer) customersGP.DELETE("/:id", customerHandler.DeleteCustomer) customersGP.PUT("/:id/status", customerHandler.UpdateStatus) customersGP.PATCH("/:id/role", customerHandler.AssignRole) } // Admin Tenders Routes tendersGP := adminV1.Group("/tenders") { tendersGP.Use(userHandler.AuthMiddleware()) tendersGP.GET("", tenderHandler.Search) tendersGP.GET("/:id", tenderHandler.Get) tendersGP.PUT("/:id", tenderHandler.Update) tendersGP.DELETE("/:id", tenderHandler.Delete) } // Admin Feedback Routes feedbackGP := adminV1.Group("/feedback") { feedbackGP.Use(userHandler.AuthMiddleware()) feedbackGP.GET("", feedbackHandler.ListFeedback) feedbackGP.GET("/:id", feedbackHandler.GetFeedback) feedbackGP.DELETE("/:id", feedbackHandler.DeleteFeedback) } // Admin Tender-Approvals Routes tenderApprovalGP := adminV1.Group("/tender-approvals") { tenderApprovalGP.Use(userHandler.AuthMiddleware()) tenderApprovalGP.GET("", tenderApprovalHandler.ListTenderApprovals) tenderApprovalGP.GET("/:id", tenderApprovalHandler.GetTenderApproval) tenderApprovalGP.GET("/stats", tenderApprovalHandler.GetTenderApprovalStats) tenderApprovalGP.GET("/submission-mode/:submission_mode", tenderApprovalHandler.GetTenderApprovalsBySubmissionMode) tenderApprovalGP.GET("/status/:status", tenderApprovalHandler.GetTenderApprovalsByStatus) } // Admin Inquiry Routes inquiryGP := adminV1.Group("/inquiries") { inquiryGP.Use(userHandler.AuthMiddleware()) inquiryGP.GET("", inquiryHandler.SearchInquiries) inquiryGP.GET("/:id", inquiryHandler.GetInquiryByID) inquiryGP.PUT("/:id/status", inquiryHandler.UpdateInquiryStatus) inquiryGP.DELETE("/:id", inquiryHandler.DeleteInquiry) } // Admin Flags Routes flagsGP := adminV1.Group("/flags") { flagsGP.GET("/:country_code", flagHandler.AdminGetFlagSVG) } } func RegisterPublicRoutes(e *echo.Echo, customerHandler *customer.Handler, tenderHandler *tender.TenderHandler, feedbackHandler *feedback.Handler, tenderApprovalHandler *tender_approval.Handler, companyHandler *company.Handler, inquiryHandler *inquiry.Handler, categoryHandler *company_category.Handler, flagHandler *assets.Handler) { v1 := e.Group("/api/v1") customerGP := v1.Group("/profile") { customerGP.POST("/login", customerHandler.Login) customerGP.POST("/refresh-token", customerHandler.RefreshToken) // Forgot password routes customerGP.POST("/forgot-password", customerHandler.RequestResetPassword) customerGP.POST("/verify-otp", customerHandler.VerifyOTP) customerGP.POST("/reset-password", customerHandler.ResetPassword) profileGP := customerGP.Group("") profileGP.Use(customerHandler.AuthMiddleware()) profileGP.GET("", customerHandler.GetProfile) profileGP.DELETE("/logout", customerHandler.Logout) } // Public Tenders Routes tendersGP := v1.Group("/tenders") tendersGP.Use(customerHandler.AuthMiddleware()) { tendersGP.GET("", tenderHandler.GetPublicTenders) tendersGP.GET("/recommend", tenderHandler.RecommendTenders) tendersGP.GET("/details/:id", tenderHandler.GetPublicTenderDetails) } // Public Feedback Routes feedbackGP := v1.Group("/feedback") { feedbackGP.Use(customerHandler.AuthMiddleware()) feedbackGP.POST("", feedbackHandler.ToggleFeedback) feedbackGP.GET("", feedbackHandler.PublicListFeedback) feedbackGP.GET("/tender/:tender_id", feedbackHandler.PublicGetFeedbackByTenderID) feedbackGP.GET("/:id", feedbackHandler.PublicGetFeedback) feedbackGP.GET("/stats/company", feedbackHandler.GetCompanyFeedbackStats) } // Public Tender Approvals Routes tenderApprovalGP := v1.Group("/tender-approvals") { tenderApprovalGP.Use(customerHandler.AuthMiddleware()) tenderApprovalGP.POST("", tenderApprovalHandler.ToggleTenderApproval) tenderApprovalGP.GET("", tenderApprovalHandler.PublicGetTenderApprovals) tenderApprovalGP.GET("/:id", tenderApprovalHandler.GetPublicTenderApproval) tenderApprovalGP.GET("/tender/:tender_id", tenderApprovalHandler.GetTenderApprovalByTenderAndCompany) tenderApprovalGP.GET("/stats", tenderApprovalHandler.GetCompanyTenderApprovalStats) } // Public Company Routes companiesGP := v1.Group("/companies") { companiesGP.Use(customerHandler.AuthMiddleware()) companiesGP.GET("", companyHandler.MyCompany) } // Public Inquiry Routes inquiryGP := v1.Group("/inquiries") { inquiryGP.POST("", inquiryHandler.CreateInquiry) } // Public Flags Routes flagsGP := v1.Group("/flags") { flagsGP.GET("/:country_code", flagHandler.GetFlagSVG) } }