tsk-12: Added endpoint to get message (#18)

Closes #12

Reviewed-on: phoenix/textsender-api#18
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
This commit is contained in:
phoenix
2025-11-06 20:42:24 +00:00
committed by phoenix
parent acf414c876
commit 607059e7ce
6 changed files with 193 additions and 0 deletions
+49
View File
@@ -4,13 +4,17 @@ 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"
)
type MessageStore interface {
GetMessageByID(ctx context.Context, id uuid.UUID) (*message.Message, error)
CreateMessage(ctx context.Context, msg *message.Message) error
GetAllMessages(ctx context.Context) ([]*message.Message, error)
MessageExists(ctx context.Context, msg *message.Message) (bool, error)
}
@@ -45,3 +49,48 @@ func (m *PGMessageStore) MessageExists(ctx context.Context, msg *message.Message
return exists, nil
}
}
func (m *PGMessageStore) GetAllMessages(ctx context.Context) ([]*message.Message, error) {
query := `SELECT id, content, user_id FROM messages`
rows, err := m.db.Query(ctx, query)
if err != nil {
return nil, fmt.Errorf("querying all messages: %w", err)
}
defer rows.Close()
var messages []*message.Message
for rows.Next() {
var msg message.Message
if err := rows.Scan(
&msg.Id, &msg.Content, &msg.UserId,
); err != nil {
return nil, fmt.Errorf("scanning message row: %w", err)
}
messages = append(messages, &msg)
}
if err := rows.Err(); err != nil {
return nil, fmt.Errorf("iterating message rows: %w", err)
}
return messages, nil
}
func (m *PGMessageStore) GetMessageByID(ctx context.Context, id uuid.UUID) (*message.Message, error) {
query := `SELECT id, content, user_id FROM messages WHERE id = $1`
var msg message.Message
err := m.db.QueryRow(ctx, query, id).Scan(
&msg.Id, &msg.Content, &msg.UserId,
)
if err == pgx.ErrNoRows {
return nil, nil
}
if err != nil {
return nil, fmt.Errorf("getting message by ID: %w", err)
}
return &msg, nil
}