mirror of
https://github.com/SamyRai/turash.git
synced 2025-12-26 23:01:33 +00:00
3.3 KiB
3.3 KiB
Handler Refactoring Analysis
Duplicated Code Patterns Identified
1. Error Handling (High Duplication)
Pattern: Repeated error handling with JSON responses
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})- 15+ occurrencesc.JSON(http.StatusNotFound, gin.H{"error": "Organization not found"})- 8+ occurrencesc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})- 5+ occurrences
Solution: Create helper methods for common error responses
2. Limit Parsing (Medium Duplication)
Pattern: Parsing limit from query params with validation
GetSectorStats- lines 276-280Search- lines 350-358SearchSuggestions- lines 387-395GetSimilarOrganizations- lines 579-584
Solution: Create parseLimitQuery() helper function
3. Subtype String Conversion (Low Duplication)
Pattern: Converting []OrganizationSubtype to []string
GetAllSubtypes- lines 296-299GetSubtypesBySector- lines 316-319
Solution: Create subtypesToStrings() helper function
4. Organization Not Found Pattern (Medium Duplication)
Pattern: Get org by ID, check error, return 404
Update- lines 209-213UploadLogo- lines 447-451UploadGalleryImage- lines 490-494DeleteGalleryImage- lines 536-540GetSimilarOrganizations- lines 586-590- And more...
Solution: Create getOrgByIDOrError() helper method
5. Service Availability Check (Low Duplication)
Pattern: Check if service is nil, return 503
GetOrganizationProposals- lines 687-690GetOrganizationProducts- lines 719-722GetOrganizationServices- lines 769-772
Solution: Create checkServiceAvailable() helper
6. GetOrganizationProducts/GetOrganizationServices (High Duplication)
Pattern: Nearly identical code structure
- Both convert products/services to DiscoveryMatch format
- Both have same error handling
- Both have same service availability check
Solution: Extract common logic to helper method
Recommended Refactoring
Helper Methods to Add:
-
Error Response Helpers:
func (h *OrganizationHandler) errorResponse(c *gin.Context, status int, message string) func (h *OrganizationHandler) internalError(c *gin.Context, err error) func (h *OrganizationHandler) notFound(c *gin.Context, resource string) func (h *OrganizationHandler) badRequest(c *gin.Context, err error) -
Utility Helpers:
func (h *OrganizationHandler) parseLimitQuery(c *gin.Context, defaultLimit, maxLimit int) int func (h *OrganizationHandler) getOrgByIDOrError(c *gin.Context, id string) (*domain.Organization, bool) func subtypesToStrings(subtypes []domain.OrganizationSubtype) []string func (h *OrganizationHandler) checkServiceAvailable(c *gin.Context, service interface{}, serviceName string) bool -
Product/Service Helpers:
func (h *OrganizationHandler) convertToDiscoveryMatches(products []*domain.Product, services []*domain.Service, matchType string) []*matching.DiscoveryMatch
Estimated Impact
- Lines of code reduction: ~150-200 lines
- Maintainability: Significantly improved
- Consistency: All error responses will be consistent
- Testability: Helper methods can be unit tested
Routes Analysis
Routes look clean and well-organized. No duplication found.