diff --git a/internal/handler/endpoint/endpoint.go b/internal/handler/endpoint/endpoint.go index 673c6e7..539381c 100644 --- a/internal/handler/endpoint/endpoint.go +++ b/internal/handler/endpoint/endpoint.go @@ -8,6 +8,6 @@ const ADD_CONTACT_ENDPOINT = "/api/v1/contact/new" const ScheduleMessageEndpoint = "/api/v1/schedule/message" const GetScheduledMessageEndpoint = "/api/v1/schedule/message" const AddEventToScheduledMessageEndpoint = "/api/v1/schedule/message/event" -const GetScheduledMessageEventEndpoint = "/api/v1/schedule/message/event/{id}" +const GetScheduledMessageEventEndpoint = "/api/v1/schedule/message/event" const DeleteScheduledMessageEventEndpoint = "/api/v1/schedule/message/event/{id}" const UpdateScheduledMessageStatusEndpoint = "/api/v1/schedule/message/status/update" diff --git a/internal/handler/scheduled_message_event.go b/internal/handler/scheduled_message_event.go index ee8984b..15f47de 100644 --- a/internal/handler/scheduled_message_event.go +++ b/internal/handler/scheduled_message_event.go @@ -109,26 +109,23 @@ func (s *ScheduledMessageEventHandler) GetScheduledMessageEvent(w http.ResponseW return } - id := chi.URLParam(r, "id") - if len(id) == 0 { - pathParts := strings.Split(r.URL.Path, "/") - if len(pathParts) < 7 { - http.Error(w, "Id not provided", http.StatusBadRequest) - return - } else { - id = pathParts[6] - } + var id, scheduledMessageId uuid.UUID + if idParam, err := ParseQueryParams(r, "id"); err == nil { + id, err = uuid.Parse(*idParam) + } + if scheduledMessageIdParam, err := ParseQueryParams(r, "scheduled_message_id"); err == nil { + scheduledMessageId, err = uuid.Parse(*scheduledMessageIdParam) } var statusCode int var resp GetScheduledMessageEventResponse + ctx := r.Context() - if parsedId, err := uuid.Parse(id); err != nil { - resp.Message = err.Error() + if id == uuid.Nil && scheduledMessageId == uuid.Nil { statusCode = http.StatusBadRequest - } else { - ctx := r.Context() - if event, err := s.ScheduledMessageEventStore.Get(ctx, parsedId); err != nil { + resp.Message = "Query parameters missing" + } else if id != uuid.Nil { + if event, err := s.ScheduledMessageEventStore.Get(ctx, id); err != nil { resp.Message = err.Error() statusCode = http.StatusInternalServerError } else { @@ -141,6 +138,17 @@ func (s *ScheduledMessageEventHandler) GetScheduledMessageEvent(w http.ResponseW resp.Message = "Scheduled message event not found" } } + } else { + if events, err := s.ScheduledMessageEventStore.GetWithScheduleMessageId(ctx, scheduledMessageId); err != nil { + statusCode = http.StatusInternalServerError + resp.Message = err.Error() + } else { + statusCode = http.StatusOK + resp.Message = "Successful" + for _, event := range events { + resp.Data = append(resp.Data, *event) + } + } } RespondWithJSON(w, statusCode, &resp) diff --git a/internal/handler/scheduled_message_event_test.go b/internal/handler/scheduled_message_event_test.go index 82fd742..579b419 100644 --- a/internal/handler/scheduled_message_event_test.go +++ b/internal/handler/scheduled_message_event_test.go @@ -2,6 +2,7 @@ package handler import ( "encoding/json" + "fmt" "net/http" "net/http/httptest" "strings" @@ -113,8 +114,9 @@ func TestGetScheduledMessageEventWithMock(t *testing.T) { assert.NoError(t, err, "Error creating scheduled message event: %v", err) } - endpointValue := strings.Replace(endpoint.GetScheduledMessageEventEndpoint, "{id}", event.Id.String(), 1) - req, _ := http.NewRequest("GET", endpointValue, nil) + url := fmt.Sprintf("%s?id=%s", endpoint.GetScheduledMessageEventEndpoint, event.Id.String()) + fmt.Println("Url:", url) + req, _ := http.NewRequest("GET", url, nil) rr := httptest.NewRecorder() handler.GetScheduledMessageEvent(rr, req)