diff --git a/internal/db/db.go b/internal/db/db.go index 6f57f2c2c6c7c2854e93fa6246cad6dbfcfa569c..3c6de9d2391dc914fc968a18895b1382aab78ac8 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -60,6 +60,9 @@ func Prepare(ctx context.Context, db DBTX) (*Queries, error) { if q.getSessionByIDStmt, err = db.PrepareContext(ctx, getSessionByID); err != nil { return nil, fmt.Errorf("error preparing query GetSessionByID: %w", err) } + if q.listAllMessagesStmt, err = db.PrepareContext(ctx, listAllMessages); err != nil { + return nil, fmt.Errorf("error preparing query ListAllMessages: %w", err) + } if q.listFilesByPathStmt, err = db.PrepareContext(ctx, listFilesByPath); err != nil { return nil, fmt.Errorf("error preparing query ListFilesByPath: %w", err) } @@ -149,6 +152,11 @@ func (q *Queries) Close() error { err = fmt.Errorf("error closing getSessionByIDStmt: %w", cerr) } } + if q.listAllMessagesStmt != nil { + if cerr := q.listAllMessagesStmt.Close(); cerr != nil { + err = fmt.Errorf("error closing listAllMessagesStmt: %w", cerr) + } + } if q.listFilesByPathStmt != nil { if cerr := q.listFilesByPathStmt.Close(); cerr != nil { err = fmt.Errorf("error closing listFilesByPathStmt: %w", cerr) @@ -240,6 +248,7 @@ type Queries struct { getFileByPathAndSessionStmt *sql.Stmt getMessageStmt *sql.Stmt getSessionByIDStmt *sql.Stmt + listAllMessagesStmt *sql.Stmt listFilesByPathStmt *sql.Stmt listFilesBySessionStmt *sql.Stmt listLatestSessionFilesStmt *sql.Stmt @@ -266,6 +275,7 @@ func (q *Queries) WithTx(tx *sql.Tx) *Queries { getFileByPathAndSessionStmt: q.getFileByPathAndSessionStmt, getMessageStmt: q.getMessageStmt, getSessionByIDStmt: q.getSessionByIDStmt, + listAllMessagesStmt: q.listAllMessagesStmt, listFilesByPathStmt: q.listFilesByPathStmt, listFilesBySessionStmt: q.listFilesBySessionStmt, listLatestSessionFilesStmt: q.listLatestSessionFilesStmt, diff --git a/internal/db/messages.sql.go b/internal/db/messages.sql.go index f10b9d5e2c47ec90aec9dc0f206d4a157fa7f6b0..3a684d2681d18534eaaf94b1281cacd18578131f 100644 --- a/internal/db/messages.sql.go +++ b/internal/db/messages.sql.go @@ -107,6 +107,46 @@ func (q *Queries) GetMessage(ctx context.Context, id string) (Message, error) { return i, err } +const listAllMessages = `-- name: ListAllMessages :many +SELECT id, session_id, role, parts, model, created_at, updated_at, finished_at, provider, is_summary_message +FROM messages +ORDER BY created_at ASC +` + +func (q *Queries) ListAllMessages(ctx context.Context) ([]Message, error) { + rows, err := q.query(ctx, q.listAllMessagesStmt, listAllMessages) + if err != nil { + return nil, err + } + defer rows.Close() + items := []Message{} + for rows.Next() { + var i Message + if err := rows.Scan( + &i.ID, + &i.SessionID, + &i.Role, + &i.Parts, + &i.Model, + &i.CreatedAt, + &i.UpdatedAt, + &i.FinishedAt, + &i.Provider, + &i.IsSummaryMessage, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const listMessagesBySession = `-- name: ListMessagesBySession :many SELECT id, session_id, role, parts, model, created_at, updated_at, finished_at, provider, is_summary_message FROM messages diff --git a/internal/db/querier.go b/internal/db/querier.go index 0978eb2c6e4c7b1aa80888530bb5169a1d2bcec3..86857b345bec6c529af8b6b69b165241abee0105 100644 --- a/internal/db/querier.go +++ b/internal/db/querier.go @@ -21,6 +21,7 @@ type Querier interface { GetFileByPathAndSession(ctx context.Context, arg GetFileByPathAndSessionParams) (File, error) GetMessage(ctx context.Context, id string) (Message, error) GetSessionByID(ctx context.Context, id string) (Session, error) + ListAllMessages(ctx context.Context) ([]Message, error) ListFilesByPath(ctx context.Context, path string) ([]File, error) ListFilesBySession(ctx context.Context, sessionID string) ([]File, error) ListLatestSessionFiles(ctx context.Context, sessionID string) ([]File, error) diff --git a/internal/db/sql/messages.sql b/internal/db/sql/messages.sql index fc66b78c08b85c8fe1f7ec79985fb2edd4a03668..1e87d687ac5540cab5a8990242e41d4b56110ea4 100644 --- a/internal/db/sql/messages.sql +++ b/internal/db/sql/messages.sql @@ -9,6 +9,11 @@ FROM messages WHERE session_id = ? ORDER BY created_at ASC; +-- name: ListAllMessages :many +SELECT * +FROM messages +ORDER BY created_at ASC; + -- name: CreateMessage :one INSERT INTO messages ( id, diff --git a/internal/message/message.go b/internal/message/message.go index 4cdf89b54f8eaf831d53a5fc51fdb5c71b4b953c..37f69a89b9aef60698a90b6a94073106bf969ff2 100644 --- a/internal/message/message.go +++ b/internal/message/message.go @@ -26,6 +26,7 @@ type Service interface { Update(ctx context.Context, message Message) error Get(ctx context.Context, id string) (Message, error) List(ctx context.Context, sessionID string) ([]Message, error) + FullList(ctx context.Context) ([]Message, error) Delete(ctx context.Context, id string) error DeleteSessionMessages(ctx context.Context, sessionID string) error } @@ -151,6 +152,11 @@ func (s *service) List(ctx context.Context, sessionID string) ([]Message, error) return messages, nil } +func (s *service) FullList(ctx context.Context) ([]Message, error) { + dbMessages, err := s.q.ListAllMessages(ctx) + return nil, nil +} + func (s *service) fromDBItem(item db.Message) (Message, error) { parts, err := unmarshallParts([]byte(item.Parts)) if err != nil {