Refactor Tender Approval Management and Update API Documentation

- Replaced the existing tender approval update and delete endpoints with a new toggle functionality, allowing for more streamlined management of tender approvals.
- Introduced the `ToggleTenderApproval` method in the service layer to handle both approval and rejection actions based on the current state of the tender approval.
- Updated the API documentation to reflect the new endpoint structure and response formats, including the `TenderApprovalWithTenderResponse`.
- Enhanced Swagger documentation to ensure accurate representation of the updated tender approval operations.
- Removed obsolete methods and routes to maintain a clean and efficient codebase, adhering to Clean Architecture principles.
This commit is contained in:
n.nakhostin
2025-08-19 11:01:49 +03:30
parent dd2573a308
commit 392b31626d
10 changed files with 298 additions and 532 deletions
+5 -79
View File
@@ -36,8 +36,8 @@ func NewHandler(service Service, logger logger.Logger) *Handler {
// @Failure 500 {object} response.APIResponse "Internal server error"
// @Security BearerAuth
// @Router /api/v1/tender-approvals [post]
func (h *Handler) CreateTenderApproval(c echo.Context) error {
form, err := response.Parse[CreateTenderApprovalForm](c)
func (h *Handler) ToggleTenderApproval(c echo.Context) error {
form, err := response.Parse[ToggleTenderApprovalForm](c)
if err != nil {
return response.ValidationError(c, "Invalid request data", err.Error())
}
@@ -48,7 +48,7 @@ func (h *Handler) CreateTenderApproval(c echo.Context) error {
return response.Unauthorized(c, "Unauthorized")
}
tenderApproval, err := h.service.CreateTenderApproval(c.Request().Context(), form, companyID)
tenderApproval, err := h.service.ToggleTenderApproval(c.Request().Context(), form, companyID)
if err != nil {
if err.Error() == "tender approval already exists for this tender and company" {
return response.Conflict(c, err.Error())
@@ -56,52 +56,7 @@ func (h *Handler) CreateTenderApproval(c echo.Context) error {
return response.InternalServerError(c, "Failed to create tender approval")
}
// Get the created approval with tender details
tenderApprovalWithTender, err := h.service.GetTenderApprovalByIDWithTender(c.Request().Context(), tenderApproval.GetID())
if err != nil {
return response.InternalServerError(c, "Failed to get tender approval details")
}
return response.Created(c, tenderApprovalWithTender, "Tender approval created successfully")
}
// UpdateTenderApproval updates a tender approval
// @Summary Update tender approval
// @Description Update tender approval information
// @Tags TenderApprovals
// @Accept json
// @Produce json
// @Param id path string true "Tender Approval ID"
// @Param tender_approval body UpdateTenderApprovalForm true "Tender approval update information"
// @Success 200 {object} response.APIResponse{data=TenderApprovalResponse} "Tender approval updated successfully"
// @Failure 400 {object} response.APIResponse "Bad request - Invalid input data"
// @Failure 404 {object} response.APIResponse "Not found - Tender approval not found"
// @Failure 422 {object} response.APIResponse "Validation error - Invalid request data"
// @Failure 500 {object} response.APIResponse "Internal server error"
// @Security BearerAuth
// @Router /api/v1/tender-approvals/{id} [put]
func (h *Handler) UpdateTenderApproval(c echo.Context) error {
id := c.Param("id")
form, err := response.Parse[UpdateTenderApprovalForm](c)
if err != nil {
return response.ValidationError(c, "Invalid request data", err.Error())
}
_, err = h.service.UpdateTenderApproval(c.Request().Context(), id, form)
if err != nil {
if err.Error() == "tender approval not found" {
return response.NotFound(c, "Tender approval not found")
}
return response.InternalServerError(c, "Failed to update tender approval")
}
// Get the updated approval with tender details
tenderApprovalWithTender, err := h.service.GetTenderApprovalByIDWithTender(c.Request().Context(), id)
if err != nil {
return response.InternalServerError(c, "Failed to get tender approval details")
}
return response.Success(c, tenderApprovalWithTender, "Tender approval updated successfully")
return response.Success(c, tenderApproval, "Tender approval updated successfully")
}
// GetTenderApproval retrieves a tender approval by ID
@@ -168,35 +123,6 @@ func (h *Handler) GetTenderApprovalByTenderAndCompany(c echo.Context) error {
return response.Success(c, tenderApprovalWithTender, "Tender approval retrieved successfully")
}
// DeleteTenderApproval deletes a tender approval
// @Summary Delete tender approval
// @Description Delete a tender approval
// @Tags TenderApprovals
// @Accept json
// @Produce json
// @Param id path string true "Tender Approval ID"
// @Success 200 {object} response.APIResponse "Tender approval deleted successfully"
// @Failure 400 {object} response.APIResponse "Bad request - Invalid tender approval ID"
// @Failure 404 {object} response.APIResponse "Not found - Tender approval not found"
// @Failure 500 {object} response.APIResponse "Internal server error"
// @Security BearerAuth
// @Router /api/v1/tender-approvals/{id} [delete]
func (h *Handler) DeleteTenderApproval(c echo.Context) error {
id := c.Param("id")
err := h.service.DeleteTenderApproval(c.Request().Context(), id)
if err != nil {
if err.Error() == "tender approval not found" {
return response.NotFound(c, "Tender approval not found")
}
return response.InternalServerError(c, "Failed to delete tender approval")
}
return response.Success(c, map[string]interface{}{
"message": "Tender approval deleted successfully",
}, "Tender approval deleted successfully")
}
// GetTenderApprovalsByCompanyID retrieves all tender approvals for a specific company
// @Summary Get tender approvals by company ID
// @Description Retrieve all tender approvals for a specific company with optional filtering
@@ -410,7 +336,7 @@ func (h *Handler) GetTenderApprovalsBySubmissionMode(c echo.Context) error {
// GetTenderApproval retrieves a tender approval by ID
// @Summary Get tender approval by ID
// @Description Retrieve detailed tender approval information by ID
// @Tags TenderApprovals
// @Tags Admin-TenderApprovals
// @Accept json
// @Produce json
// @Param id path string true "Tender Approval ID"