Add Tender Approval Management Functionality and API Enhancements

- Introduced a new tender approval management system, including the creation of tender approval entities, services, and repositories.
- Implemented CRUD operations for tender approvals, allowing companies to approve or reject tenders.
- Developed administrative and public API endpoints for listing, retrieving, and updating tender approvals with comprehensive filtering options.
- Enhanced Swagger documentation to accurately reflect the new endpoints, including detailed descriptions, parameters, and response formats.
- Updated existing routes to include tender approval management, ensuring adherence to Clean Architecture principles and maintaining a clear separation of concerns in the handler layer.
This commit is contained in:
n.nakhostin
2025-08-18 19:00:41 +03:30
parent a8ef631e43
commit 94d0fbef38
14 changed files with 4615 additions and 16 deletions
+15 -7
View File
@@ -41,6 +41,9 @@ package main
// @tag.name Admin-Feedback
// @tag.description Administrative feedback management operations for web panel including CRUD operations, search, statistics, and comprehensive filtering with pagination
// @tag.name Admin-TenderApprovals
// @tag.description Administrative tender approval management operations for web panel including CRUD operations, search, statistics, and comprehensive filtering with pagination
// @tag.name Authorization
// @tag.description Customer authentication and authorization operations for mobile application including login, logout, token refresh, and profile access
@@ -50,6 +53,9 @@ package main
// @tag.name Feedback
// @tag.description Public feedback management operations for mobile application including like, dislike, and comment on tenders
// @tag.name TenderApprovals
// @tag.description Public tender approval management operations for mobile application including tender approval listing and detailed tender approval information
import (
"context"
"fmt"
@@ -59,6 +65,7 @@ import (
"tm/internal/customer"
"tm/internal/feedback"
"tm/internal/tender"
"tm/internal/tender_approval"
"tm/internal/user"
_ "tm/cmd/web/docs" // This is generated by swag
@@ -103,9 +110,9 @@ func main() {
companyRepository := company.NewCompanyRepository(mongoManager, logger)
tenderRepository := tender.NewTenderRepository(mongoManager, logger)
feedbackRepo := feedback.NewFeedbackRepository(mongoManager, logger)
tenderApprovalRepository := tender_approval.NewTenderApprovalRepository(mongoManager, logger)
logger.Info("Repositories initialized successfully", map[string]interface{}{
"repositories": []string{"customer", "user", "company", "tender", "feedback"},
"repositories": []string{"customer", "user", "company", "tender", "feedback", "tender_approval"},
})
// Initialize validation service
@@ -117,9 +124,9 @@ func main() {
customerService := customer.NewCustomerService(customerRepository, logger, customerAuthService, companyService)
tenderService := tender.NewTenderService(tenderRepository, companyService, logger)
feedbackService := feedback.NewFeedbackService(feedbackRepo, logger)
tenderApprovalService := tender_approval.NewTenderApprovalService(tenderApprovalRepository, logger)
logger.Info("Services initialized successfully", map[string]interface{}{
"services": []string{"customer", "user", "company", "tender", "feedback"},
"services": []string{"customer", "user", "company", "tender", "feedback", "tender_approval"},
})
// Initialize handlers with services
@@ -128,17 +135,18 @@ func main() {
companyHandler := company.NewHandler(companyService, userHandler, logger)
tenderHandler := tender.NewTenderHandler(tenderService, logger)
feedbackHandler := feedback.NewFeedbackHandler(feedbackService, userHandler, customerHandler, logger)
tenderApprovalHandler := tender_approval.NewHandler(tenderApprovalService, logger)
logger.Info("Handlers initialized successfully", map[string]interface{}{
"handlers": []string{"customer", "user", "company", "tender", "feedback"},
"handlers": []string{"customer", "user", "company", "tender", "feedback", "tender_approval"},
})
// Initialize HTTP server
e := initHTTPServer(conf, logger)
// Register routes
router.RegisterAdminRoutes(e, userHandler, companyHandler, customerHandler, tenderHandler, feedbackHandler)
router.RegisterPublicRoutes(e, customerHandler, tenderHandler, feedbackHandler)
router.RegisterAdminRoutes(e, userHandler, companyHandler, customerHandler, tenderHandler, feedbackHandler, tenderApprovalHandler)
router.RegisterPublicRoutes(e, customerHandler, tenderHandler, feedbackHandler, tenderApprovalHandler)
// Start server
serverAddr := fmt.Sprintf("%s:%d", conf.Server.Host, conf.Server.Port)