A community based topic aggregation platform built on atproto
1package adminreport
2
3import (
4 "Coves/internal/api/xrpc"
5 "Coves/internal/core/adminreports"
6 "errors"
7 "log"
8 "net/http"
9)
10
11// writeError writes a JSON error response with the given status code
12func writeError(w http.ResponseWriter, statusCode int, errorType, message string) {
13 xrpc.WriteError(w, statusCode, errorType, message)
14}
15
16// handleServiceError maps service-layer errors to HTTP responses
17func handleServiceError(w http.ResponseWriter, err error) {
18 switch {
19 case adminreports.IsValidationError(err):
20 switch {
21 case errors.Is(err, adminreports.ErrInvalidReason):
22 writeError(w, http.StatusBadRequest, "InvalidReason",
23 "Invalid report reason. Must be one of: csam, doxing, harassment, spam, illegal, other")
24 case errors.Is(err, adminreports.ErrInvalidStatus):
25 writeError(w, http.StatusBadRequest, "InvalidStatus",
26 "Invalid report status. Must be one of: open, reviewing, resolved, dismissed")
27 case errors.Is(err, adminreports.ErrInvalidTarget):
28 writeError(w, http.StatusBadRequest, "InvalidTarget",
29 "Invalid target URI. Must be a valid AT Protocol URI starting with at://")
30 case errors.Is(err, adminreports.ErrExplanationTooLong):
31 writeError(w, http.StatusBadRequest, "ExplanationTooLong",
32 "Explanation exceeds maximum length of 1000 characters")
33 case errors.Is(err, adminreports.ErrReporterRequired):
34 writeError(w, http.StatusBadRequest, "ReporterRequired",
35 "Reporter DID is required")
36 case errors.Is(err, adminreports.ErrInvalidTargetType):
37 writeError(w, http.StatusBadRequest, "InvalidTargetType",
38 "Invalid target type. Must be one of: post, comment")
39 default:
40 log.Printf("Unhandled validation error in admin report handler: %v", err)
41 writeError(w, http.StatusBadRequest, "InvalidRequest",
42 "The request contains invalid data")
43 }
44
45 case adminreports.IsNotFound(err):
46 writeError(w, http.StatusNotFound, "NotFound", "Report not found")
47
48 default:
49 log.Printf("Unexpected error in admin report handler: %v", err)
50 writeError(w, http.StatusInternalServerError, "InternalServerError",
51 "An internal error occurred")
52 }
53}