package store import ( "context" "fmt" "git.kundeng.us/phoenix/textsender-models/tx0/message/event" "github.com/google/uuid" "github.com/jackc/pgx/v5/pgxpool" ) type MessageEventResponseStore interface { Create(ctx context.Context, mer *event.MessageEventResponse) error GetWithUserId(ctx context.Context, userId uuid.UUID) ([]*event.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 *event.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) ([]*event.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, userId) if err != nil { return nil, fmt.Errorf("Error querying: %w", err) } defer rows.Close() var sentMessages []*event.MessageEventResponse for rows.Next() { var msg event.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 }