tsk-44: Record when message was sent (#48)
Closes #44 Reviewed-on: phoenix/textsender-api#48 Co-authored-by: phoenix <kundeng00@pm.me> Co-committed-by: phoenix <kundeng00@pm.me>
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/message"
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
)
|
||||
|
||||
type MessageEventResponseStore interface {
|
||||
Create(ctx context.Context, mer *message.MessageEventResponse) error
|
||||
}
|
||||
|
||||
type PGMessageEventResponseStore struct {
|
||||
db *pgxpool.Pool
|
||||
}
|
||||
|
||||
func NewMessageEventResponseStore(db *pgxpool.Pool) *PGMessageEventResponseStore {
|
||||
return &PGMessageEventResponseStore{db: db}
|
||||
}
|
||||
|
||||
func (m *PGMessageEventResponseStore) Create(ctx context.Context, mer *message.MessageEventResponse) error {
|
||||
query := `
|
||||
INSERT INTO message_event_responses (scheduled_message_event_id, response, user_id, sent)
|
||||
VALUES ($1, $2, $3, $4)
|
||||
RETURNING id
|
||||
`
|
||||
|
||||
return m.db.QueryRow(ctx, query, mer.ScheduledMessageEventId, mer.Response, mer.UserId, mer.Sent).Scan(&mer.Id)
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package mock
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/message"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type MessageEventResponseKey struct {
|
||||
ScheduledMessageEventId uuid.UUID
|
||||
UserId uuid.UUID
|
||||
}
|
||||
type MockMessageEventResponseStore struct {
|
||||
MessageEventResponses map[uuid.UUID]*message.MessageEventResponse
|
||||
MessageEventResponsesByKey map[MessageEventResponseKey]*message.MessageEventResponse
|
||||
mu sync.RWMutex
|
||||
Error error
|
||||
}
|
||||
|
||||
func NewMockMessageEventResponseStore() *MockMessageEventResponseStore {
|
||||
return &MockMessageEventResponseStore{
|
||||
MessageEventResponses: make(map[uuid.UUID]*message.MessageEventResponse),
|
||||
MessageEventResponsesByKey: make(map[MessageEventResponseKey]*message.MessageEventResponse),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MockMessageEventResponseStore) Create(ctx context.Context, mer *message.MessageEventResponse) error {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
|
||||
if m.Error != nil {
|
||||
return m.Error
|
||||
}
|
||||
|
||||
if mer.Id == uuid.Nil {
|
||||
mer.Id = uuid.New()
|
||||
}
|
||||
|
||||
if len(mer.Response) == 0 {
|
||||
return fmt.Errorf("Response is empty")
|
||||
} else if mer.ScheduledMessageEventId == uuid.Nil {
|
||||
return fmt.Errorf("Scheduled message event Id is nil")
|
||||
} else if mer.UserId == uuid.Nil {
|
||||
return fmt.Errorf("User Id is nil")
|
||||
} else {
|
||||
key := MessageEventResponseKey{ScheduledMessageEventId: mer.ScheduledMessageEventId, UserId: mer.UserId}
|
||||
sent := time.Now()
|
||||
mer.Sent = sent
|
||||
|
||||
m.MessageEventResponses[mer.Id] = mer
|
||||
m.MessageEventResponsesByKey[key] = mer
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user