tsk-26: Retrieve scheduled message event endpoint (#28)
Closes #26 Reviewed-on: phoenix/textsender-api#28 Co-authored-by: phoenix <kundeng00@pm.me> Co-committed-by: phoenix <kundeng00@pm.me>
This commit is contained in:
@@ -3,9 +3,7 @@ package mock
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
|
||||
@@ -240,62 +238,3 @@ func (m *MockScheduledMessageStore) CreateScheduledMessage(ctx context.Context,
|
||||
m.ScheduledMessagesByKey[key] = schedMsg
|
||||
return nil
|
||||
}
|
||||
|
||||
type ScheduledMessageEventKey struct {
|
||||
RecipientId uuid.UUID
|
||||
MessageId uuid.UUID
|
||||
ScheduledMessageId uuid.UUID
|
||||
}
|
||||
|
||||
type MockScheduledMessageEventStore struct {
|
||||
ScheduledMessageEvents map[uuid.UUID]*scheduling.ScheduledMessageEvent
|
||||
ScheduledMessageEventsByKey map[ScheduledMessageEventKey]*scheduling.ScheduledMessageEvent
|
||||
mu sync.RWMutex
|
||||
Error error // Optional: simulate errors
|
||||
}
|
||||
|
||||
func NewMockScheduledMessageEventStore() *MockScheduledMessageEventStore {
|
||||
return &MockScheduledMessageEventStore{
|
||||
ScheduledMessageEvents: make(map[uuid.UUID]*scheduling.ScheduledMessageEvent),
|
||||
ScheduledMessageEventsByKey: make(map[ScheduledMessageEventKey]*scheduling.ScheduledMessageEvent),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MockScheduledMessageEventStore) CreateScheduledMessageEvent(ctx context.Context, event *scheduling.ScheduledMessageEvent) error {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
|
||||
if m.Error != nil {
|
||||
return m.Error
|
||||
}
|
||||
|
||||
if event.Id == uuid.Nil {
|
||||
event.Id = uuid.New()
|
||||
}
|
||||
|
||||
key := ScheduledMessageEventKey{RecipientId: event.RecipientId, MessageId: event.MessageId, ScheduledMessageId: event.ScheduledMessageId}
|
||||
|
||||
if _, exists := m.ScheduledMessageEventsByKey[key]; exists {
|
||||
return fmt.Errorf("Already exists")
|
||||
} else {
|
||||
event.Created = time.Now()
|
||||
m.ScheduledMessageEvents[event.Id] = event
|
||||
m.ScheduledMessageEventsByKey[key] = event
|
||||
return nil
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (m *MockScheduledMessageEventStore) Exists(ctx context.Context, event *scheduling.ScheduledMessageEvent) (bool, error) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
|
||||
if m.Error != nil {
|
||||
return false, m.Error
|
||||
}
|
||||
|
||||
key := ScheduledMessageEventKey{RecipientId: event.RecipientId, MessageId: event.MessageId, ScheduledMessageId: event.ScheduledMessageId}
|
||||
_, exists := m.ScheduledMessageEventsByKey[key]
|
||||
|
||||
return exists, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
package mock
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/pkg/message/scheduling"
|
||||
)
|
||||
|
||||
type ScheduledMessageEventKey struct {
|
||||
RecipientId uuid.UUID
|
||||
MessageId uuid.UUID
|
||||
ScheduledMessageId uuid.UUID
|
||||
}
|
||||
|
||||
type MockScheduledMessageEventStore struct {
|
||||
ScheduledMessageEvents map[uuid.UUID]*scheduling.ScheduledMessageEvent
|
||||
ScheduledMessageEventsByKey map[ScheduledMessageEventKey]*scheduling.ScheduledMessageEvent
|
||||
mu sync.RWMutex
|
||||
Error error // Optional: simulate errors
|
||||
}
|
||||
|
||||
func NewMockScheduledMessageEventStore() *MockScheduledMessageEventStore {
|
||||
return &MockScheduledMessageEventStore{
|
||||
ScheduledMessageEvents: make(map[uuid.UUID]*scheduling.ScheduledMessageEvent),
|
||||
ScheduledMessageEventsByKey: make(map[ScheduledMessageEventKey]*scheduling.ScheduledMessageEvent),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MockScheduledMessageEventStore) Get(ctx context.Context, id uuid.UUID) (*scheduling.ScheduledMessageEvent, error) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
|
||||
if m.Error != nil {
|
||||
return nil, m.Error
|
||||
}
|
||||
|
||||
if id == uuid.Nil {
|
||||
return nil, fmt.Errorf("Id is nil")
|
||||
}
|
||||
|
||||
if _, exists := m.ScheduledMessageEvents[id]; exists {
|
||||
return m.ScheduledMessageEvents[id], nil
|
||||
} else {
|
||||
fmt.Println("Not found")
|
||||
return nil, fmt.Errorf("Not found")
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MockScheduledMessageEventStore) CreateScheduledMessageEvent(ctx context.Context, event *scheduling.ScheduledMessageEvent) error {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
|
||||
if m.Error != nil {
|
||||
return m.Error
|
||||
}
|
||||
|
||||
if event.Id == uuid.Nil {
|
||||
event.Id = uuid.New()
|
||||
}
|
||||
|
||||
key := ScheduledMessageEventKey{RecipientId: event.RecipientId, MessageId: event.MessageId, ScheduledMessageId: event.ScheduledMessageId}
|
||||
|
||||
if _, exists := m.ScheduledMessageEventsByKey[key]; exists {
|
||||
return fmt.Errorf("Already exists")
|
||||
} else {
|
||||
event.Created = time.Now()
|
||||
m.ScheduledMessageEvents[event.Id] = event
|
||||
m.ScheduledMessageEventsByKey[key] = event
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MockScheduledMessageEventStore) Exists(ctx context.Context, event *scheduling.ScheduledMessageEvent) (bool, error) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
|
||||
if m.Error != nil {
|
||||
return false, m.Error
|
||||
}
|
||||
|
||||
key := ScheduledMessageEventKey{RecipientId: event.RecipientId, MessageId: event.MessageId, ScheduledMessageId: event.ScheduledMessageId}
|
||||
_, exists := m.ScheduledMessageEventsByKey[key]
|
||||
|
||||
return exists, nil
|
||||
}
|
||||
@@ -4,12 +4,15 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/jackc/pgx/v5"
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/pkg/message/scheduling"
|
||||
)
|
||||
|
||||
type ScheduledMessageEventStore interface {
|
||||
Get(ctx context.Context, id uuid.UUID) (*scheduling.ScheduledMessageEvent, error)
|
||||
CreateScheduledMessageEvent(ctx context.Context, event *scheduling.ScheduledMessageEvent) error
|
||||
Exists(ctx context.Context, event *scheduling.ScheduledMessageEvent) (bool, error)
|
||||
}
|
||||
@@ -22,6 +25,24 @@ func NewScheduledMessageEventStore(db *pgxpool.Pool) *PGScheduledMessageEventSto
|
||||
return &PGScheduledMessageEventStore{db: db}
|
||||
}
|
||||
|
||||
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`
|
||||
|
||||
var event scheduling.ScheduledMessageEvent
|
||||
err := s.db.QueryRow(ctx, query, id).Scan(
|
||||
&event.Id, &event.RecipientId, &event.MessageId, &event.ScheduledMessageId, &event.Created,
|
||||
)
|
||||
|
||||
if err == pgx.ErrNoRows {
|
||||
return nil, nil
|
||||
}
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("getting scheduled message event by ID: %w", err)
|
||||
}
|
||||
|
||||
return &event, nil
|
||||
}
|
||||
|
||||
func (s *PGScheduledMessageEventStore) CreateScheduledMessageEvent(ctx context.Context, event *scheduling.ScheduledMessageEvent) error {
|
||||
query := `
|
||||
INSERT INTO scheduled_message_events (recipient_id, message_id, scheduled_message_id)
|
||||
|
||||
Reference in New Issue
Block a user