tsk-62: Modify how the Response from event.MessageEventResponse is handled (#63)

Closes #62

Reviewed-on: phoenix/textsender-api#63
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
This commit is contained in:
phoenix
2026-01-01 01:39:12 +00:00
committed by phoenix
parent 8860d6c801
commit 6641f384ab
4 changed files with 38 additions and 45 deletions
+2 -1
View File
@@ -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)
}
}
+17 -22
View File
@@ -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)
}
}
}
+2 -2
View File
@@ -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)
}
}
+17 -20
View File
@@ -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) {