A community based topic aggregation platform built on atproto
at main 1.4 kB view raw
1package communityFeed 2 3import ( 4 "Coves/internal/core/communityFeeds" 5 "encoding/json" 6 "errors" 7 "log" 8 "net/http" 9) 10 11// ErrorResponse represents an XRPC error response 12type ErrorResponse struct { 13 Error string `json:"error"` 14 Message string `json:"message"` 15} 16 17// writeError writes a JSON error response 18func writeError(w http.ResponseWriter, statusCode int, errorType, message string) { 19 w.Header().Set("Content-Type", "application/json") 20 w.WriteHeader(statusCode) 21 if err := json.NewEncoder(w).Encode(ErrorResponse{ 22 Error: errorType, 23 Message: message, 24 }); err != nil { 25 // Log encoding errors but can't send error response (headers already sent) 26 log.Printf("ERROR: Failed to encode error response: %v", err) 27 } 28} 29 30// handleServiceError maps service errors to HTTP responses 31func handleServiceError(w http.ResponseWriter, err error) { 32 switch { 33 case errors.Is(err, communityFeeds.ErrCommunityNotFound): 34 writeError(w, http.StatusNotFound, "CommunityNotFound", "Community not found") 35 36 case errors.Is(err, communityFeeds.ErrInvalidCursor): 37 writeError(w, http.StatusBadRequest, "InvalidCursor", "Invalid pagination cursor") 38 39 case communityFeeds.IsValidationError(err): 40 writeError(w, http.StatusBadRequest, "InvalidRequest", err.Error()) 41 42 default: 43 // Internal server error - don't leak details 44 writeError(w, http.StatusInternalServerError, "InternalServerError", "An internal error occurred") 45 } 46}