Description
Every API fetcher in the codebase repeats the same pattern: create request, set headers, Do(), check status, read body, decode JSON/XML, return error/result. This creates significant code duplication and inconsistency in error handling.
Affected Functions
fetchPlexStreams, fetchJellyfinStreams (streams)
fetchSonarrCalendar, fetchRadarrCalendar, fetchQueue (calendar)
searchMedia, getTVDetails, createRequest, getPendingRequests, approveRequest, declineRequest, fetchServiceInstances, fetchServiceDetails, checkUserPermissions, getRequestCount (requests)
fetchSonarrHistory, fetchRadarrHistory (feed)
Proposed Fix
Add shared helper functions to internal/http/client.go:
DoJSON(method, url, headers, &result) error
DoXML(method, url, headers, &result) error
- Or similar patterns to reduce ~15 lines of boilerplate per function to ~3
Priority
Medium — reduces ~200 lines of code, improves consistency and maintainability.
Description
Every API fetcher in the codebase repeats the same pattern: create request, set headers, Do(), check status, read body, decode JSON/XML, return error/result. This creates significant code duplication and inconsistency in error handling.
Affected Functions
fetchPlexStreams,fetchJellyfinStreams(streams)fetchSonarrCalendar,fetchRadarrCalendar,fetchQueue(calendar)searchMedia,getTVDetails,createRequest,getPendingRequests,approveRequest,declineRequest,fetchServiceInstances,fetchServiceDetails,checkUserPermissions,getRequestCount(requests)fetchSonarrHistory,fetchRadarrHistory(feed)Proposed Fix
Add shared helper functions to
internal/http/client.go:DoJSON(method, url, headers, &result) errorDoXML(method, url, headers, &result) errorPriority
Medium — reduces ~200 lines of code, improves consistency and maintainability.