package store import ( "context" "fmt" "github.com/jackc/pgx/v5/pgxpool" "git.kundeng.us/phoenix/textsender-models/pkg/message/scheduling" ) type ScheduledMessageEventStore interface { CreateScheduledMessageEvent(ctx context.Context, event *scheduling.ScheduledMessageEvent) error Exists(ctx context.Context, event *scheduling.ScheduledMessageEvent) (bool, error) } type PGScheduledMessageEventStore struct { db *pgxpool.Pool } func NewScheduledMessageEventStore(db *pgxpool.Pool) *PGScheduledMessageEventStore { return &PGScheduledMessageEventStore{db: db} } func (s *PGScheduledMessageEventStore) CreateScheduledMessageEvent(ctx context.Context, event *scheduling.ScheduledMessageEvent) error { query := ` INSERT INTO scheduled_message_events (recipient_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( &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)` var exists bool err := s.db.QueryRow(ctx, query, event.ScheduledMessageId, event.RecipientId).Scan(&exists) if err != nil { return false, fmt.Errorf("Scheduled message event does not exist: %w", err) } else { return exists, nil } }