Add Inquiry Management Functionality and Update API Documentation

- Introduced a new inquiry management feature, including CRUD operations for inquiries in both admin and public API endpoints.
- Implemented inquiry entity, service, repository, and handler layers following the clean architecture principles.
- Added new API routes for searching, retrieving, updating, and deleting inquiries, enhancing the overall functionality of the system.
- Updated Swagger documentation to include detailed descriptions and examples for the new inquiry endpoints, ensuring clarity for API consumers.
- Enhanced error handling for duplicate inquiries and validation, improving the robustness of the inquiry management process.
- Updated existing routes to integrate inquiry handling, ensuring a seamless user experience across the application.
This commit is contained in:
n.nakhostin
2025-09-07 14:36:16 +03:30
parent 34064e8b36
commit 857e911d40
11 changed files with 2255 additions and 5 deletions
+19 -2
View File
@@ -4,6 +4,7 @@ import (
"tm/internal/company"
"tm/internal/customer"
"tm/internal/feedback"
"tm/internal/inquiry"
"tm/internal/tender"
"tm/internal/tender_approval"
"tm/internal/user"
@@ -11,7 +12,7 @@ import (
"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) {
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) {
adminV1 := e.Group("/admin/v1")
// Admin Users Routes
@@ -107,9 +108,19 @@ func RegisterAdminRoutes(e *echo.Echo, userHandler *user.Handler, companyHandler
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)
}
}
func RegisterPublicRoutes(e *echo.Echo, customerHandler *customer.Handler, tenderHandler *tender.TenderHandler, feedbackHandler *feedback.Handler, tenderApprovalHandler *tender_approval.Handler, companyHandler *company.Handler) {
func RegisterPublicRoutes(e *echo.Echo, customerHandler *customer.Handler, tenderHandler *tender.TenderHandler, feedbackHandler *feedback.Handler, tenderApprovalHandler *tender_approval.Handler, companyHandler *company.Handler, inquiryHandler *inquiry.Handler) {
v1 := e.Group("/api/v1")
customerGP := v1.Group("/profile")
@@ -160,4 +171,10 @@ func RegisterPublicRoutes(e *echo.Echo, customerHandler *customer.Handler, tende
companiesGP.Use(customerHandler.AuthMiddleware())
companiesGP.GET("", companyHandler.MyCompany)
}
// Public Inquiry Routes
inquiryGP := v1.Group("/inquiries")
{
inquiryGP.POST("", inquiryHandler.CreateInquiry)
}
}