62 lines
2.3 KiB
Go
62 lines
2.3 KiB
Go
package store
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"git.kundeng.us/phoenix/textsender-models/tx0/message"
|
|
"github.com/google/uuid"
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
)
|
|
|
|
type MessageEventResponseStore interface {
|
|
Create(ctx context.Context, mer *message.MessageEventResponse) error
|
|
GetWithUserId(ctx context.Context, userId uuid.UUID) ([]*message.MessageEventResponse, error)
|
|
}
|
|
|
|
type PGMessageEventResponseStore struct {
|
|
db *pgxpool.Pool
|
|
}
|
|
|
|
func NewMessageEventResponseStore(db *pgxpool.Pool) *PGMessageEventResponseStore {
|
|
return &PGMessageEventResponseStore{db: db}
|
|
}
|
|
|
|
func (m *PGMessageEventResponseStore) Create(ctx context.Context, mer *message.MessageEventResponse) error {
|
|
var query string
|
|
queryBase := "INSERT INTO message_event_responses"
|
|
queryReturn := "RETURNING id"
|
|
|
|
if mer.ScheduledMessageEventId == uuid.Nil {
|
|
query = fmt.Sprintf("%s (response, user_id, sent, contact_id, message_id, status) VALUES ($1, $2, $3, $4, $5, $6) %s", queryBase, queryReturn)
|
|
return m.db.QueryRow(ctx, query, mer.Response, mer.UserId, mer.Sent, mer.ContactId, mer.MessageId, mer.Status).Scan(&mer.Id)
|
|
} else {
|
|
query = fmt.Sprintf("%s (scheduled_message_event_id, response, user_id, sent, contact_id, message_id, status) VALUES ($1, $2, $3, $4, $5, $6, $7) %s", queryBase, queryReturn)
|
|
return m.db.QueryRow(ctx, query, mer.ScheduledMessageEventId, mer.Response, mer.UserId, mer.Sent, mer.ContactId, mer.MessageId, mer.Status,).Scan(&mer.Id)
|
|
}
|
|
}
|
|
|
|
func (m *PGMessageEventResponseStore) GetWithUserId(ctx context.Context, userId uuid.UUID) ([]*message.MessageEventResponse, error) {
|
|
query := "SELECT id, scheduled_message_event_id, response, user_id, sent, contact_id, message_id, status FROM message_event_responses WHERE user_id = $1"
|
|
rows, err := m.db.Query(ctx, query)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Error querying: %w", err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
var sentMessages []*message.MessageEventResponse
|
|
for rows.Next() {
|
|
var msg message.MessageEventResponse
|
|
if err := rows.Scan(&msg.Id, &msg.ScheduledMessageEventId, &msg.Response, &msg.UserId, &msg.Sent, &msg.ContactId, &msg.MessageId, &msg.Status,); err != nil {
|
|
return nil, fmt.Errorf("Scanning row: %w", err)
|
|
}
|
|
sentMessages = append(sentMessages, &msg)
|
|
}
|
|
|
|
if err := rows.Err(); err != nil {
|
|
return nil, fmt.Errorf("Iterating message_event_responses: %w", err)
|
|
}
|
|
|
|
return sentMessages, nil
|
|
}
|