tsk-57: Change schema of scheduled_message_events (#65)
Closes #57 Reviewed-on: phoenix/textsender-api#65 Co-authored-by: phoenix <kundeng00@pm.me> Co-committed-by: phoenix <kundeng00@pm.me>
This commit is contained in:
@@ -4,14 +4,14 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/message"
|
||||
"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 *message.MessageEventResponse) error
|
||||
GetWithUserId(ctx context.Context, userId uuid.UUID) ([]*message.MessageEventResponse, error)
|
||||
Create(ctx context.Context, mer *event.MessageEventResponse) error
|
||||
GetWithUserId(ctx context.Context, userId uuid.UUID) ([]*event.MessageEventResponse, error)
|
||||
}
|
||||
|
||||
type PGMessageEventResponseStore struct {
|
||||
@@ -22,7 +22,7 @@ func NewMessageEventResponseStore(db *pgxpool.Pool) *PGMessageEventResponseStore
|
||||
return &PGMessageEventResponseStore{db: db}
|
||||
}
|
||||
|
||||
func (m *PGMessageEventResponseStore) Create(ctx context.Context, mer *message.MessageEventResponse) error {
|
||||
func (m *PGMessageEventResponseStore) Create(ctx context.Context, mer *event.MessageEventResponse) error {
|
||||
var query string
|
||||
queryBase := "INSERT INTO message_event_responses"
|
||||
queryReturn := "RETURNING id"
|
||||
@@ -32,11 +32,11 @@ func (m *PGMessageEventResponseStore) Create(ctx context.Context, mer *message.M
|
||||
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)
|
||||
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) {
|
||||
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)
|
||||
if err != nil {
|
||||
@@ -44,10 +44,10 @@ func (m *PGMessageEventResponseStore) GetWithUserId(ctx context.Context, userId
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var sentMessages []*message.MessageEventResponse
|
||||
var sentMessages []*event.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 {
|
||||
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)
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/message"
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/message/event"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
@@ -15,20 +15,20 @@ type MessageEventResponseKey struct {
|
||||
UserId uuid.UUID
|
||||
}
|
||||
type MockMessageEventResponseStore struct {
|
||||
MessageEventResponses map[uuid.UUID]*message.MessageEventResponse
|
||||
MessageEventResponsesByKey map[MessageEventResponseKey]*message.MessageEventResponse
|
||||
MessageEventResponses map[uuid.UUID]*event.MessageEventResponse
|
||||
MessageEventResponsesByKey map[MessageEventResponseKey]*event.MessageEventResponse
|
||||
mu sync.RWMutex
|
||||
Error error
|
||||
}
|
||||
|
||||
func NewMockMessageEventResponseStore() *MockMessageEventResponseStore {
|
||||
return &MockMessageEventResponseStore{
|
||||
MessageEventResponses: make(map[uuid.UUID]*message.MessageEventResponse),
|
||||
MessageEventResponsesByKey: make(map[MessageEventResponseKey]*message.MessageEventResponse),
|
||||
MessageEventResponses: make(map[uuid.UUID]*event.MessageEventResponse),
|
||||
MessageEventResponsesByKey: make(map[MessageEventResponseKey]*event.MessageEventResponse),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MockMessageEventResponseStore) Create(ctx context.Context, mer *message.MessageEventResponse) error {
|
||||
func (m *MockMessageEventResponseStore) Create(ctx context.Context, mer *event.MessageEventResponse) error {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
|
||||
@@ -62,7 +62,7 @@ func (m *MockMessageEventResponseStore) Create(ctx context.Context, mer *message
|
||||
}
|
||||
|
||||
// TODO: Add code to get mock MessageEventResponse
|
||||
func (m *MockMessageEventResponseStore) GetWithUserId(ctx context.Context, userId uuid.UUID) ([]*message.MessageEventResponse, error) {
|
||||
func (m *MockMessageEventResponseStore) GetWithUserId(ctx context.Context, userId uuid.UUID) ([]*event.MessageEventResponse, error) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
|
||||
@@ -70,13 +70,12 @@ func (m *MockMessageEventResponseStore) GetWithUserId(ctx context.Context, userI
|
||||
return nil, m.Error
|
||||
}
|
||||
|
||||
var messages []*message.MessageEventResponse
|
||||
var messages []*event.MessageEventResponse
|
||||
for _, msg := range m.MessageEventResponses {
|
||||
if msg.UserId == userId {
|
||||
messages = append(messages, msg)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return messages, nil
|
||||
}
|
||||
|
||||
@@ -27,11 +27,11 @@ func NewScheduledMessageEventStore(db *pgxpool.Pool) *PGScheduledMessageEventSto
|
||||
}
|
||||
|
||||
func (s *PGScheduledMessageEventStore) Get(ctx context.Context, id uuid.UUID) (*scheduling.ScheduledMessageEvent, error) {
|
||||
query := `SELECT id, recipient_id, message_id, scheduled_message_id, created FROM scheduled_message_events WHERE id = $1`
|
||||
query := `SELECT id, contact_id, message_id, scheduled_message_id, created FROM scheduled_message_events WHERE id = $1`
|
||||
|
||||
var event scheduling.ScheduledMessageEvent
|
||||
err := s.db.QueryRow(ctx, query, id).Scan(
|
||||
&event.Id, &event.RecipientId, &event.MessageId, &event.ScheduledMessageId, &event.Created,
|
||||
&event.Id, &event.ContactId, &event.MessageId, &event.ScheduledMessageId, &event.Created,
|
||||
)
|
||||
|
||||
if err == pgx.ErrNoRows {
|
||||
@@ -45,7 +45,7 @@ func (s *PGScheduledMessageEventStore) Get(ctx context.Context, id uuid.UUID) (*
|
||||
|
||||
func (s *PGScheduledMessageEventStore) GetWithScheduleMessageId(ctx context.Context, schMsgId uuid.UUID) ([]*scheduling.ScheduledMessageEvent, error) {
|
||||
var events []*scheduling.ScheduledMessageEvent
|
||||
query := `SELECT id, recipient_id, message_id, scheduled_message_id, created FROM scheduled_message_events WHERE scheduled_message_id = $1
|
||||
query := `SELECT id, contact_id, message_id, scheduled_message_id, created FROM scheduled_message_events WHERE scheduled_message_id = $1
|
||||
`
|
||||
|
||||
rows, err := s.db.Query(ctx, query, schMsgId)
|
||||
@@ -57,7 +57,7 @@ func (s *PGScheduledMessageEventStore) GetWithScheduleMessageId(ctx context.Cont
|
||||
for rows.Next() {
|
||||
var event scheduling.ScheduledMessageEvent
|
||||
|
||||
if err := rows.Scan(&event.Id, &event.RecipientId, &event.MessageId, &event.ScheduledMessageId, &event.Created); err != nil {
|
||||
if err := rows.Scan(&event.Id, &event.ContactId, &event.MessageId, &event.ScheduledMessageId, &event.Created); err != nil {
|
||||
return nil, fmt.Errorf("Error fetching data from row: %w", err)
|
||||
} else {
|
||||
events = append(events, &event)
|
||||
@@ -90,21 +90,21 @@ func (s *PGScheduledMessageEventStore) Delete(ctx context.Context, id uuid.UUID)
|
||||
|
||||
func (s *PGScheduledMessageEventStore) CreateScheduledMessageEvent(ctx context.Context, event *scheduling.ScheduledMessageEvent) error {
|
||||
query := `
|
||||
INSERT INTO scheduled_message_events (recipient_id, message_id, scheduled_message_id)
|
||||
INSERT INTO scheduled_message_events (contact_id, message_id, scheduled_message_id)
|
||||
VALUES ($1, $2, $3)
|
||||
RETURNING id, created
|
||||
`
|
||||
|
||||
return s.db.QueryRow(ctx, query, event.RecipientId, event.MessageId, event.ScheduledMessageId).Scan(
|
||||
return s.db.QueryRow(ctx, query, event.ContactId, event.MessageId, event.ScheduledMessageId).Scan(
|
||||
&event.Id, &event.Created,
|
||||
)
|
||||
}
|
||||
|
||||
func (s *PGScheduledMessageEventStore) Exists(ctx context.Context, event *scheduling.ScheduledMessageEvent) (bool, error) {
|
||||
query := `SELECT EXISTS(SELECT 1 FROM scheduled_message_events WHERE scheduled_message_id = $1 AND recipient_id = $2)`
|
||||
query := `SELECT EXISTS(SELECT 1 FROM scheduled_message_events WHERE scheduled_message_id = $1 AND contact_id = $2)`
|
||||
|
||||
var exists bool
|
||||
err := s.db.QueryRow(ctx, query, event.ScheduledMessageId, event.RecipientId).Scan(&exists)
|
||||
err := s.db.QueryRow(ctx, query, event.ScheduledMessageId, event.ContactId).Scan(&exists)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("Scheduled message event does not exist: %w", err)
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user