admin_pipeline_handler.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package handlers
  2. import (
  3. "net/http"
  4. "strconv"
  5. "cmr-backend/internal/apperr"
  6. "cmr-backend/internal/httpx"
  7. "cmr-backend/internal/service"
  8. )
  9. type AdminPipelineHandler struct {
  10. service *service.AdminPipelineService
  11. }
  12. func NewAdminPipelineHandler(service *service.AdminPipelineService) *AdminPipelineHandler {
  13. return &AdminPipelineHandler{service: service}
  14. }
  15. func (h *AdminPipelineHandler) GetEventPipeline(w http.ResponseWriter, r *http.Request) {
  16. limit := 20
  17. if raw := r.URL.Query().Get("limit"); raw != "" {
  18. if parsed, err := strconv.Atoi(raw); err == nil {
  19. limit = parsed
  20. }
  21. }
  22. result, err := h.service.GetEventPipeline(r.Context(), r.PathValue("eventPublicID"), limit)
  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 *AdminPipelineHandler) BuildSource(w http.ResponseWriter, r *http.Request) {
  30. result, err := h.service.BuildSource(r.Context(), r.PathValue("sourceID"))
  31. if err != nil {
  32. httpx.WriteError(w, err)
  33. return
  34. }
  35. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  36. }
  37. func (h *AdminPipelineHandler) GetBuild(w http.ResponseWriter, r *http.Request) {
  38. result, err := h.service.GetBuild(r.Context(), r.PathValue("buildID"))
  39. if err != nil {
  40. httpx.WriteError(w, err)
  41. return
  42. }
  43. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  44. }
  45. func (h *AdminPipelineHandler) PublishBuild(w http.ResponseWriter, r *http.Request) {
  46. result, err := h.service.PublishBuild(r.Context(), r.PathValue("buildID"))
  47. if err != nil {
  48. httpx.WriteError(w, err)
  49. return
  50. }
  51. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  52. }
  53. func (h *AdminPipelineHandler) RollbackRelease(w http.ResponseWriter, r *http.Request) {
  54. var req service.AdminRollbackReleaseInput
  55. if err := httpx.DecodeJSON(r, &req); err != nil {
  56. httpx.WriteError(w, apperr.New(http.StatusBadRequest, "invalid_json", "invalid request body: "+err.Error()))
  57. return
  58. }
  59. result, err := h.service.RollbackRelease(r.Context(), r.PathValue("eventPublicID"), req)
  60. if err != nil {
  61. httpx.WriteError(w, err)
  62. return
  63. }
  64. httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result})
  65. }