result_handler.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package handlers
  2. import (
  3. "net/http"
  4. "strconv"
  5. "cmr-backend/internal/apperr"
  6. "cmr-backend/internal/httpapi/middleware"
  7. "cmr-backend/internal/httpx"
  8. "cmr-backend/internal/service"
  9. )
  10. type ResultHandler struct {
  11. resultService *service.ResultService
  12. }
  13. func NewResultHandler(resultService *service.ResultService) *ResultHandler {
  14. return &ResultHandler{resultService: resultService}
  15. }
  16. func (h *ResultHandler) GetSessionResult(w http.ResponseWriter, r *http.Request) {
  17. auth := middleware.GetAuthContext(r.Context())
  18. if auth == nil {
  19. httpx.WriteError(w, apperr.New(http.StatusUnauthorized, "unauthorized", "missing auth context"))
  20. return
  21. }
  22. result, err := h.resultService.GetSessionResult(r.Context(), r.PathValue("sessionPublicID"), auth.UserID)
  23. if err != nil {
  24. httpx.WriteError(w, err)
  25. return
  26. }
  27. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  28. }
  29. func (h *ResultHandler) ListMine(w http.ResponseWriter, r *http.Request) {
  30. auth := middleware.GetAuthContext(r.Context())
  31. if auth == nil {
  32. httpx.WriteError(w, apperr.New(http.StatusUnauthorized, "unauthorized", "missing auth context"))
  33. return
  34. }
  35. limit := 20
  36. if raw := r.URL.Query().Get("limit"); raw != "" {
  37. if parsed, err := strconv.Atoi(raw); err == nil {
  38. limit = parsed
  39. }
  40. }
  41. result, err := h.resultService.ListMyResults(r.Context(), auth.UserID, limit)
  42. if err != nil {
  43. httpx.WriteError(w, err)
  44. return
  45. }
  46. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  47. }