A community based topic aggregation platform built on atproto
at main 1.2 kB view raw
1package discover 2 3import ( 4 "Coves/internal/core/discover" 5 "encoding/json" 6 "errors" 7 "log" 8 "net/http" 9) 10 11// XRPCError represents an XRPC error response 12type XRPCError 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, status int, errorType, message string) { 19 w.Header().Set("Content-Type", "application/json") 20 w.WriteHeader(status) 21 22 resp := XRPCError{ 23 Error: errorType, 24 Message: message, 25 } 26 27 if err := json.NewEncoder(w).Encode(resp); err != nil { 28 log.Printf("ERROR: Failed to encode error response: %v", err) 29 } 30} 31 32// handleServiceError maps service errors to HTTP responses 33func handleServiceError(w http.ResponseWriter, err error) { 34 switch { 35 case discover.IsValidationError(err): 36 writeError(w, http.StatusBadRequest, "InvalidRequest", err.Error()) 37 case errors.Is(err, discover.ErrInvalidCursor): 38 writeError(w, http.StatusBadRequest, "InvalidCursor", "The provided cursor is invalid") 39 default: 40 log.Printf("ERROR: Discover service error: %v", err) 41 writeError(w, http.StatusInternalServerError, "InternalServerError", "An error occurred while fetching discover feed") 42 } 43}