Closes #29 Reviewed-on: phoenix/textsender-api#30 Co-authored-by: phoenix <kundeng00@pm.me> Co-committed-by: phoenix <kundeng00@pm.me>
68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
package mock
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"sync"
|
|
|
|
"github.com/google/uuid"
|
|
|
|
"git.kundeng.us/phoenix/textsender-models/pkg/message/scheduling"
|
|
)
|
|
|
|
type ScheduledMessageKey struct {
|
|
UserId uuid.UUID
|
|
}
|
|
|
|
type MockScheduledMessageStore struct {
|
|
ScheduledMessages map[uuid.UUID]*scheduling.ScheduledMessage
|
|
ScheduledMessagesByKey map[ScheduledMessageKey]*scheduling.ScheduledMessage
|
|
mu sync.RWMutex
|
|
Error error // Optional: simulate errors
|
|
}
|
|
|
|
func NewMockScheduledMessageStore() *MockScheduledMessageStore {
|
|
return &MockScheduledMessageStore{
|
|
ScheduledMessages: make(map[uuid.UUID]*scheduling.ScheduledMessage),
|
|
ScheduledMessagesByKey: make(map[ScheduledMessageKey]*scheduling.ScheduledMessage),
|
|
}
|
|
}
|
|
|
|
func (m *MockScheduledMessageStore) Get(ctx context.Context, id uuid.UUID) (*scheduling.ScheduledMessage, 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")
|
|
} else {
|
|
if schMsg := m.ScheduledMessages[id]; schMsg != nil {
|
|
return schMsg, nil
|
|
} else {
|
|
return nil, fmt.Errorf("Scheduled message does not exist")
|
|
}
|
|
}
|
|
}
|
|
|
|
func (m *MockScheduledMessageStore) CreateScheduledMessage(ctx context.Context, schedMsg *scheduling.ScheduledMessage) error {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
|
|
if m.Error != nil {
|
|
return m.Error
|
|
}
|
|
|
|
if schedMsg.Id == uuid.Nil {
|
|
schedMsg.Id = uuid.New()
|
|
}
|
|
|
|
key := ScheduledMessageKey{UserId: schedMsg.UserId}
|
|
|
|
m.ScheduledMessages[schedMsg.Id] = schedMsg
|
|
m.ScheduledMessagesByKey[key] = schedMsg
|
|
return nil
|
|
}
|