mirror of
https://github.com/SamyRai/turash.git
synced 2025-12-26 23:01:33 +00:00
92 lines
3.3 KiB
Markdown
92 lines
3.3 KiB
Markdown
# 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+ occurrences
|
|
- `c.JSON(http.StatusNotFound, gin.H{"error": "Organization not found"})` - 8+ occurrences
|
|
- `c.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-280
|
|
- `Search` - lines 350-358
|
|
- `SearchSuggestions` - lines 387-395
|
|
- `GetSimilarOrganizations` - lines 579-584
|
|
|
|
**Solution**: Create `parseLimitQuery()` helper function
|
|
|
|
### 3. Subtype String Conversion (Low Duplication)
|
|
**Pattern**: Converting `[]OrganizationSubtype` to `[]string`
|
|
- `GetAllSubtypes` - lines 296-299
|
|
- `GetSubtypesBySector` - 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-213
|
|
- `UploadLogo` - lines 447-451
|
|
- `UploadGalleryImage` - lines 490-494
|
|
- `DeleteGalleryImage` - lines 536-540
|
|
- `GetSimilarOrganizations` - 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-690
|
|
- `GetOrganizationProducts` - lines 719-722
|
|
- `GetOrganizationServices` - 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:
|
|
|
|
1. **Error Response Helpers**:
|
|
```go
|
|
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)
|
|
```
|
|
|
|
2. **Utility Helpers**:
|
|
```go
|
|
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
|
|
```
|
|
|
|
3. **Product/Service Helpers**:
|
|
```go
|
|
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.
|
|
|