package handler import ( "net/http" "github.com/google/uuid" "git.kundeng.us/phoenix/textsender-api/internal/store" "git.kundeng.us/phoenix/textsender-models/pkg/message/scheduling" ) type RequestAddScheduledMessageEvent struct { RecipientId uuid.UUID `json:"recipient_id"` MessageId uuid.UUID `json:"message_id"` ScheduledMessageId uuid.UUID `json:"scheduled_message_id"` } type AddScheduledMessageEventResponse struct { Message string `json:"message"` Data []scheduling.ScheduledMessageEvent `json:"data"` } type ScheduledMessageEventHandler struct { ScheduledMessageEventStore store.ScheduledMessageEventStore } func NewScheduledMessageEventHandler(str store.ScheduledMessageEventStore) *ScheduledMessageEventHandler { return &ScheduledMessageEventHandler{ScheduledMessageEventStore: str} } func (s *ScheduledMessageEventHandler) AddScheduledMessageEvent(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } var req RequestAddScheduledMessageEvent if err := ExtractFromRequest(r, &req); err != nil { http.Error(w, "Invalid JSON: "+err.Error(), http.StatusBadRequest) } defer r.Body.Close() event := scheduling.ScheduledMessageEvent{RecipientId: req.RecipientId, MessageId: req.MessageId, ScheduledMessageId: req.ScheduledMessageId} var statusCode int var resp AddScheduledMessageEventResponse if event.RecipientId == uuid.Nil { statusCode = http.StatusBadRequest resp.Message = "Recipient Id is nil" } else if event.MessageId == uuid.Nil { statusCode = http.StatusBadRequest resp.Message = "Message Id is nil" } else if event.ScheduledMessageId == uuid.Nil { statusCode = http.StatusBadRequest resp.Message = "Scheduled Message Id is nil" } else { ctx := r.Context() if exists, err := s.ScheduledMessageEventStore.Exists(ctx, &event); err == nil { if exists { statusCode = http.StatusBadRequest resp.Message = "Event already present" } else { if err = s.ScheduledMessageEventStore.CreateScheduledMessageEvent(ctx, &event); err == nil { statusCode = http.StatusCreated resp.Message = "Successful" resp.Data = append(resp.Data, event) } else { statusCode = http.StatusInternalServerError resp.Message = err.Error() } } } else { statusCode = http.StatusInternalServerError resp.Message = err.Error() } } RespondWithJSON(w, statusCode, &resp) }