From d5dae37aef9ece6f4703e13b88ca5111778c01fd Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Nov 2025 17:39:53 -0500 Subject: [PATCH] Added type for handling json types --- tx0/message/message_event_response.go | 4 ++- tx0/types/jsonb.go | 42 +++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 tx0/types/jsonb.go diff --git a/tx0/message/message_event_response.go b/tx0/message/message_event_response.go index 2eb631d..142bb94 100644 --- a/tx0/message/message_event_response.go +++ b/tx0/message/message_event_response.go @@ -4,12 +4,14 @@ import ( "time" "github.com/google/uuid" + + "git.kundeng.us/phoenix/textsender-models/tx0/types" ) type MessageEventResponse struct { Id uuid.UUID `json:"id,omitempty"` ScheduledMessageEventId uuid.UUID `json:"scheduled_message_event_id,omitempty"` - Response []byte `json:"response"` + Response types.JSONB `json:"response"` UserId uuid.UUID `json:"user_id,omitempty"` Sent time.Time `json:"sent"` } diff --git a/tx0/types/jsonb.go b/tx0/types/jsonb.go new file mode 100644 index 0000000..1c45023 --- /dev/null +++ b/tx0/types/jsonb.go @@ -0,0 +1,42 @@ +package types + +import ( + "database/sql/driver" + "encoding/json" + "fmt" +) + + +type JSONB json.RawMessage + +// Scan implements sql.Scanner +func (j *JSONB) Scan(value interface{}) error { + if value == nil { + *j = nil + return nil + } + + var data []byte + switch v := value.(type) { + case []byte: + // pgx may pass data as []byte in binary format + data = v + case string: + // pgx may pass data as string in text format + data = []byte(v) + default: + return fmt.Errorf("unsupported type: %T", v) + } + + *j = JSONB(data) + return nil +} + +// Value implements driver.Valuer +func (j JSONB) Value() (driver.Value, error) { + if j == nil { + return nil, nil + } else { + return []byte(j), nil + } +}