diff --git a/internal/handler/helper.go b/internal/handler/helper.go index adb68b2..0b135d9 100644 --- a/internal/handler/helper.go +++ b/internal/handler/helper.go @@ -25,7 +25,8 @@ func InvalidJson(err error) string { func RespondWithJSON(w http.ResponseWriter, statusCode int, data interface{}) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(statusCode) - if err := json.NewEncoder(w).Encode(data); err != nil { + encoder := json.NewEncoder(w) + if err := encoder.Encode(data); err != nil { log.Printf("Error encoding JSON: %v", err) } } diff --git a/internal/handler/instant_message.go b/internal/handler/instant_message.go index 3160d4b..46ad663 100644 --- a/internal/handler/instant_message.go +++ b/internal/handler/instant_message.go @@ -2,7 +2,6 @@ package handler import ( "context" - "encoding/json" "fmt" "log" "net/http" @@ -12,6 +11,7 @@ import ( "git.kundeng.us/phoenix/swoosh/swoop/send" "git.kundeng.us/phoenix/textsender-models/tx0/contact" "git.kundeng.us/phoenix/textsender-models/tx0/message" + "git.kundeng.us/phoenix/textsender-models/tx0/message/event" "github.com/google/uuid" "git.kundeng.us/phoenix/textsender-api/internal/app" @@ -38,8 +38,8 @@ type SendInstantMessageRequest struct { } type SendInstantMessageResponse struct { - Message string `json:"message"` - Data []*message.MessageEventResponse `json:"data"` + Message string `json:"message"` + Data []*event.MessageEventResponse `json:"data"` } // Sent godoc @@ -93,34 +93,29 @@ func (s *SendInstantMessageHandler) Send(w http.ResponseWriter, r *http.Request) if s.App != nil { msgSender := send.MessageSender{Config: s.App.TwilioConfig} for _, c := range contacts { - if twilioResp, err := msgSender.Send(*msg, *c, nil); err != nil { + if twilioResp, twilioRespObject, err := msgSender.Send(*msg, *c, nil); err != nil { statusCode = http.StatusInternalServerError resp.Message = err.Error() } else { - if data, err := json.Marshal(twilioResp); err != nil { + dateStr := strings.TrimSpace(*twilioResp.DateUpdated) + if parsedTime, err := time.Parse(time.RFC1123Z, dateStr); err != nil { statusCode = http.StatusInternalServerError resp.Message = err.Error() } else { - dateStr := strings.TrimSpace(*twilioResp.DateUpdated) - if parsedTime, err := time.Parse(time.RFC1123Z, dateStr); err != nil { + mer := event.MessageEventResponse{} + mer.Response = twilioRespObject + mer.UserId = req.UserId + mer.Sent = parsedTime + mer.Status = event.Message_Event_Response_Status_Instant + mer.ContactId = c.Id + mer.MessageId = msg.Id + if err := s.MERStore.Create(ctx, &mer); err != nil { statusCode = http.StatusInternalServerError resp.Message = err.Error() } else { - mer := message.MessageEventResponse{} - mer.Response = data - mer.UserId = req.UserId - mer.Sent = parsedTime - mer.Status = message.Message_Event_Response_Status_Instant - mer.ContactId = c.Id - mer.MessageId = &msg.Id - if err := s.MERStore.Create(ctx, &mer); err != nil { - statusCode = http.StatusInternalServerError - resp.Message = err.Error() - } else { - statusCode = http.StatusOK - resp.Message = "Successful" - resp.Data = append(resp.Data, &mer) - } + statusCode = http.StatusOK + resp.Message = "Successful" + resp.Data = append(resp.Data, &mer) } } } diff --git a/internal/handler/message.go b/internal/handler/message.go index 07dfa4d..eed2b39 100644 --- a/internal/handler/message.go +++ b/internal/handler/message.go @@ -59,7 +59,7 @@ func (m *MessageHandler) AddMessage(w http.ResponseWriter, r *http.Request) { var statusCode int var resp AddMessageResponse - newMessage := message.Message{Content: req.Content, UserId: req.UserId} + newMessage := message.Message{Content: req.Content, UserId: &req.UserId} if isMessageValid(&newMessage) { ctx := r.Context() @@ -160,7 +160,7 @@ func (c *MessageHandler) GetMessage(w http.ResponseWriter, r *http.Request) { if messages, err := c.MessageStore.GetAllMessages(ctx); err == nil { log.Println("Amount of messages:", len(messages)) for _, msg := range messages { - if msg.UserId == userId { + if *msg.UserId == userId { resp.Data = append(resp.Data, *msg) } } diff --git a/internal/handler/message_event_response.go b/internal/handler/message_event_response.go index 5fc4fb4..9092602 100644 --- a/internal/handler/message_event_response.go +++ b/internal/handler/message_event_response.go @@ -1,13 +1,11 @@ package handler import ( - "fmt" "log" "net/http" "time" - "git.kundeng.us/phoenix/textsender-models/tx0/message" - "git.kundeng.us/phoenix/textsender-models/tx0/types" + "git.kundeng.us/phoenix/textsender-models/tx0/message/event" "github.com/google/uuid" "git.kundeng.us/phoenix/textsender-api/internal/app" @@ -24,18 +22,18 @@ func NewEventResponseHandler(apiApp *app.App, str store.MessageEventResponseStor } type RecordEventRequest struct { - ScheduledMessageEventId uuid.UUID `json:"scheduled_message_event_id"` - Response types.JSONB `json:"response"` - UserId uuid.UUID `json:"user_id"` - Sent *time.Time `json:"sent,omitempty"` - Status string `json:"status"` - ContactId *uuid.UUID `json:"contact_id"` - MessageId *uuid.UUID `json:"message_id"` + ScheduledMessageEventId uuid.UUID `json:"scheduled_message_event_id"` + Response map[string]any `json:"response"` + UserId uuid.UUID `json:"user_id"` + Sent *time.Time `json:"sent,omitempty"` + Status string `json:"status"` + ContactId *uuid.UUID `json:"contact_id"` + MessageId *uuid.UUID `json:"message_id"` } type RecordEventResponse struct { - Message string `json:"message"` - Data []*message.MessageEventResponse `json:"data"` + Message string `json:"message"` + Data []*event.MessageEventResponse `json:"data"` } func (e *EventResponseHandler) RecordResponse(w http.ResponseWriter, r *http.Request) { @@ -46,11 +44,9 @@ func (e *EventResponseHandler) RecordResponse(w http.ResponseWriter, r *http.Req defer r.Body.Close() var statusCode int - var rp message.MessageEventResponse + var rp event.MessageEventResponse var resp RecordEventResponse - defer RespondWithJSON(w, statusCode, &resp) - if req.Sent == nil { statusCode = http.StatusBadRequest resp.Message = "Sent time is empty" @@ -66,20 +62,19 @@ func (e *EventResponseHandler) RecordResponse(w http.ResponseWriter, r *http.Req } else { log.Println("Starting process to record Message Event Response") rp.ScheduledMessageEventId = req.ScheduledMessageEventId - fmt.Println(req.Response) rp.Response = req.Response rp.UserId = req.UserId rp.Sent = *req.Sent switch req.Status { - case message.Message_Event_Response_Status_Instant: + case event.Message_Event_Response_Status_Instant: { log.Println("Status:", req.Status) rp.Status = req.Status rp.MessageId = req.MessageId rp.ContactId = req.ContactId } - case message.Message_Event_Response_Status_Scheduled: + case event.Message_Event_Response_Status_Scheduled: { log.Println("Status:", req.Status) rp.Status = req.Status @@ -103,11 +98,13 @@ func (e *EventResponseHandler) RecordResponse(w http.ResponseWriter, r *http.Req resp.Data = append(resp.Data, &rp) } } + + RespondWithJSON(w, statusCode, &resp) } type GetMessageEventResponseFetchedResponse struct { - Message string `json:"message"` - Data []*message.MessageEventResponse `json:"data"` + Message string `json:"message"` + Data []*event.MessageEventResponse `json:"data"` } func (e *EventResponseHandler) Fetch(w http.ResponseWriter, r *http.Request) {