97 lines
1.9 KiB
Go
97 lines
1.9 KiB
Go
package mock
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"sync"
|
|
|
|
"git.kundeng.us/phoenix/textsender-models/tx0/message"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type MessageKey struct {
|
|
Content string
|
|
UserId uuid.UUID
|
|
}
|
|
|
|
type MockMessageStore struct {
|
|
Messages map[uuid.UUID]*message.Message
|
|
MessagesByKey map[MessageKey]*message.Message
|
|
mu sync.RWMutex
|
|
Error error // Optional: simulate errors
|
|
}
|
|
|
|
func NewMockMessageStore() *MockMessageStore {
|
|
return &MockMessageStore{
|
|
Messages: make(map[uuid.UUID]*message.Message),
|
|
MessagesByKey: make(map[MessageKey]*message.Message),
|
|
}
|
|
}
|
|
|
|
func (m *MockMessageStore) CreateMessage(ctx context.Context, msg *message.Message) error {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
|
|
if m.Error != nil {
|
|
return m.Error
|
|
}
|
|
|
|
var id uuid.UUID
|
|
if msg.Id != nil && *msg.Id == uuid.Nil {
|
|
id = uuid.New()
|
|
msg.Id = &id
|
|
}
|
|
|
|
key := MessageKey{Content: msg.Content, UserId: *msg.UserId}
|
|
if _, exists := m.MessagesByKey[key]; exists {
|
|
return errors.New("Message already exists")
|
|
}
|
|
|
|
m.Messages[*msg.Id] = msg
|
|
m.MessagesByKey[key] = msg
|
|
return nil
|
|
}
|
|
|
|
func (m *MockMessageStore) GetAllMessages(ctx context.Context) ([]*message.Message, error) {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
|
|
if m.Error != nil {
|
|
return nil, m.Error
|
|
}
|
|
|
|
var msgs []*message.Message
|
|
|
|
for _, msg := range m.Messages {
|
|
msgs = append(msgs, msg)
|
|
}
|
|
|
|
return msgs, nil
|
|
}
|
|
|
|
func (m *MockMessageStore) GetMessageByID(ctx context.Context, id uuid.UUID) (*message.Message, error) {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
|
|
if m.Error != nil {
|
|
return nil, m.Error
|
|
}
|
|
|
|
msg := m.Messages[id]
|
|
|
|
return msg, nil
|
|
}
|
|
|
|
func (m *MockMessageStore) MessageExists(ctx context.Context, msg *message.Message) (bool, error) {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
|
|
if m.Error != nil {
|
|
return false, m.Error
|
|
}
|
|
|
|
_, exists := m.MessagesByKey[MessageKey{Content: msg.Content, UserId: *msg.UserId}]
|
|
|
|
return exists, nil
|
|
}
|