summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-05-29 15:41:13 -0500
committeradamdottv <[email protected]>2025-05-29 15:41:13 -0500
commit4818bc542611b3ab554824fece8a071b0ac6307b (patch)
treecddbdf77119ba15a86368a4027130baeb9ae333c
parent8a8c6b14afe8edd71f19d1d6054e0eac51d4a3ae (diff)
downloadopencode-4818bc542611b3ab554824fece8a071b0ac6307b.tar.gz
opencode-4818bc542611b3ab554824fece8a071b0ac6307b.zip
wip: refactoring tui
-rw-r--r--internal/db/connect.go68
-rw-r--r--internal/db/db.go328
-rw-r--r--internal/db/embed.go6
-rw-r--r--internal/db/files.sql.go317
-rw-r--r--internal/db/logs.sql.go137
-rw-r--r--internal/db/messages.sql.go199
-rw-r--r--internal/db/migrations/20250513000000_initial.sql125
-rw-r--r--internal/db/models.go56
-rw-r--r--internal/db/querier.go40
-rw-r--r--internal/db/sessions.sql.go203
-rw-r--r--internal/db/sql/files.sql69
-rw-r--r--internal/db/sql/logs.sql26
-rw-r--r--internal/db/sql/messages.sql45
-rw-r--r--internal/db/sql/sessions.sql50
14 files changed, 0 insertions, 1669 deletions
diff --git a/internal/db/connect.go b/internal/db/connect.go
deleted file mode 100644
index d90a57178..000000000
--- a/internal/db/connect.go
+++ /dev/null
@@ -1,68 +0,0 @@
-package db
-
-import (
- "database/sql"
- "fmt"
- "os"
- "path/filepath"
-
- _ "github.com/ncruces/go-sqlite3/driver"
- _ "github.com/ncruces/go-sqlite3/embed"
-
- "github.com/sst/opencode/internal/config"
- "log/slog"
-
- "github.com/pressly/goose/v3"
-)
-
-func Connect() (*sql.DB, error) {
- dataDir := config.Get().Data.Directory
- if dataDir == "" {
- return nil, fmt.Errorf("data.dir is not set")
- }
- if err := os.MkdirAll(dataDir, 0o700); err != nil {
- return nil, fmt.Errorf("failed to create data directory: %w", err)
- }
- dbPath := filepath.Join(dataDir, "opencode.db")
- // Open the SQLite database
- db, err := sql.Open("sqlite3", dbPath)
- if err != nil {
- return nil, fmt.Errorf("failed to open database: %w", err)
- }
-
- // Verify connection
- if err = db.Ping(); err != nil {
- db.Close()
- return nil, fmt.Errorf("failed to connect to database: %w", err)
- }
-
- // Set pragmas for better performance
- pragmas := []string{
- "PRAGMA foreign_keys = ON;",
- "PRAGMA journal_mode = WAL;",
- "PRAGMA page_size = 4096;",
- "PRAGMA cache_size = -8000;",
- "PRAGMA synchronous = NORMAL;",
- }
-
- for _, pragma := range pragmas {
- if _, err = db.Exec(pragma); err != nil {
- slog.Error("Failed to set pragma", pragma, err)
- } else {
- slog.Debug("Set pragma", "pragma", pragma)
- }
- }
-
- goose.SetBaseFS(FS)
-
- if err := goose.SetDialect("sqlite3"); err != nil {
- slog.Error("Failed to set dialect", "error", err)
- return nil, fmt.Errorf("failed to set dialect: %w", err)
- }
-
- if err := goose.Up(db, "migrations"); err != nil {
- slog.Error("Failed to apply migrations", "error", err)
- return nil, fmt.Errorf("failed to apply migrations: %w", err)
- }
- return db, nil
-}
diff --git a/internal/db/db.go b/internal/db/db.go
deleted file mode 100644
index dfd606cb5..000000000
--- a/internal/db/db.go
+++ /dev/null
@@ -1,328 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.29.0
-
-package db
-
-import (
- "context"
- "database/sql"
- "fmt"
-)
-
-type DBTX interface {
- ExecContext(context.Context, string, ...interface{}) (sql.Result, error)
- PrepareContext(context.Context, string) (*sql.Stmt, error)
- QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error)
- QueryRowContext(context.Context, string, ...interface{}) *sql.Row
-}
-
-func New(db DBTX) *Queries {
- return &Queries{db: db}
-}
-
-func Prepare(ctx context.Context, db DBTX) (*Queries, error) {
- q := Queries{db: db}
- var err error
- if q.createFileStmt, err = db.PrepareContext(ctx, createFile); err != nil {
- return nil, fmt.Errorf("error preparing query CreateFile: %w", err)
- }
- if q.createLogStmt, err = db.PrepareContext(ctx, createLog); err != nil {
- return nil, fmt.Errorf("error preparing query CreateLog: %w", err)
- }
- if q.createMessageStmt, err = db.PrepareContext(ctx, createMessage); err != nil {
- return nil, fmt.Errorf("error preparing query CreateMessage: %w", err)
- }
- if q.createSessionStmt, err = db.PrepareContext(ctx, createSession); err != nil {
- return nil, fmt.Errorf("error preparing query CreateSession: %w", err)
- }
- if q.deleteFileStmt, err = db.PrepareContext(ctx, deleteFile); err != nil {
- return nil, fmt.Errorf("error preparing query DeleteFile: %w", err)
- }
- if q.deleteMessageStmt, err = db.PrepareContext(ctx, deleteMessage); err != nil {
- return nil, fmt.Errorf("error preparing query DeleteMessage: %w", err)
- }
- if q.deleteSessionStmt, err = db.PrepareContext(ctx, deleteSession); err != nil {
- return nil, fmt.Errorf("error preparing query DeleteSession: %w", err)
- }
- if q.deleteSessionFilesStmt, err = db.PrepareContext(ctx, deleteSessionFiles); err != nil {
- return nil, fmt.Errorf("error preparing query DeleteSessionFiles: %w", err)
- }
- if q.deleteSessionMessagesStmt, err = db.PrepareContext(ctx, deleteSessionMessages); err != nil {
- return nil, fmt.Errorf("error preparing query DeleteSessionMessages: %w", err)
- }
- if q.getFileStmt, err = db.PrepareContext(ctx, getFile); err != nil {
- return nil, fmt.Errorf("error preparing query GetFile: %w", err)
- }
- if q.getFileByPathAndSessionStmt, err = db.PrepareContext(ctx, getFileByPathAndSession); err != nil {
- return nil, fmt.Errorf("error preparing query GetFileByPathAndSession: %w", err)
- }
- if q.getMessageStmt, err = db.PrepareContext(ctx, getMessage); err != nil {
- return nil, fmt.Errorf("error preparing query GetMessage: %w", err)
- }
- if q.getSessionByIDStmt, err = db.PrepareContext(ctx, getSessionByID); err != nil {
- return nil, fmt.Errorf("error preparing query GetSessionByID: %w", err)
- }
- if q.listAllLogsStmt, err = db.PrepareContext(ctx, listAllLogs); err != nil {
- return nil, fmt.Errorf("error preparing query ListAllLogs: %w", err)
- }
- if q.listFilesByPathStmt, err = db.PrepareContext(ctx, listFilesByPath); err != nil {
- return nil, fmt.Errorf("error preparing query ListFilesByPath: %w", err)
- }
- if q.listFilesBySessionStmt, err = db.PrepareContext(ctx, listFilesBySession); err != nil {
- return nil, fmt.Errorf("error preparing query ListFilesBySession: %w", err)
- }
- if q.listLatestSessionFilesStmt, err = db.PrepareContext(ctx, listLatestSessionFiles); err != nil {
- return nil, fmt.Errorf("error preparing query ListLatestSessionFiles: %w", err)
- }
- if q.listLogsBySessionStmt, err = db.PrepareContext(ctx, listLogsBySession); err != nil {
- return nil, fmt.Errorf("error preparing query ListLogsBySession: %w", err)
- }
- if q.listMessagesBySessionStmt, err = db.PrepareContext(ctx, listMessagesBySession); err != nil {
- return nil, fmt.Errorf("error preparing query ListMessagesBySession: %w", err)
- }
- if q.listMessagesBySessionAfterStmt, err = db.PrepareContext(ctx, listMessagesBySessionAfter); err != nil {
- return nil, fmt.Errorf("error preparing query ListMessagesBySessionAfter: %w", err)
- }
- if q.listNewFilesStmt, err = db.PrepareContext(ctx, listNewFiles); err != nil {
- return nil, fmt.Errorf("error preparing query ListNewFiles: %w", err)
- }
- if q.listSessionsStmt, err = db.PrepareContext(ctx, listSessions); err != nil {
- return nil, fmt.Errorf("error preparing query ListSessions: %w", err)
- }
- if q.updateFileStmt, err = db.PrepareContext(ctx, updateFile); err != nil {
- return nil, fmt.Errorf("error preparing query UpdateFile: %w", err)
- }
- if q.updateMessageStmt, err = db.PrepareContext(ctx, updateMessage); err != nil {
- return nil, fmt.Errorf("error preparing query UpdateMessage: %w", err)
- }
- if q.updateSessionStmt, err = db.PrepareContext(ctx, updateSession); err != nil {
- return nil, fmt.Errorf("error preparing query UpdateSession: %w", err)
- }
- return &q, nil
-}
-
-func (q *Queries) Close() error {
- var err error
- if q.createFileStmt != nil {
- if cerr := q.createFileStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing createFileStmt: %w", cerr)
- }
- }
- if q.createLogStmt != nil {
- if cerr := q.createLogStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing createLogStmt: %w", cerr)
- }
- }
- if q.createMessageStmt != nil {
- if cerr := q.createMessageStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing createMessageStmt: %w", cerr)
- }
- }
- if q.createSessionStmt != nil {
- if cerr := q.createSessionStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing createSessionStmt: %w", cerr)
- }
- }
- if q.deleteFileStmt != nil {
- if cerr := q.deleteFileStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing deleteFileStmt: %w", cerr)
- }
- }
- if q.deleteMessageStmt != nil {
- if cerr := q.deleteMessageStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing deleteMessageStmt: %w", cerr)
- }
- }
- if q.deleteSessionStmt != nil {
- if cerr := q.deleteSessionStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing deleteSessionStmt: %w", cerr)
- }
- }
- if q.deleteSessionFilesStmt != nil {
- if cerr := q.deleteSessionFilesStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing deleteSessionFilesStmt: %w", cerr)
- }
- }
- if q.deleteSessionMessagesStmt != nil {
- if cerr := q.deleteSessionMessagesStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing deleteSessionMessagesStmt: %w", cerr)
- }
- }
- if q.getFileStmt != nil {
- if cerr := q.getFileStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing getFileStmt: %w", cerr)
- }
- }
- if q.getFileByPathAndSessionStmt != nil {
- if cerr := q.getFileByPathAndSessionStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing getFileByPathAndSessionStmt: %w", cerr)
- }
- }
- if q.getMessageStmt != nil {
- if cerr := q.getMessageStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing getMessageStmt: %w", cerr)
- }
- }
- if q.getSessionByIDStmt != nil {
- if cerr := q.getSessionByIDStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing getSessionByIDStmt: %w", cerr)
- }
- }
- if q.listAllLogsStmt != nil {
- if cerr := q.listAllLogsStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing listAllLogsStmt: %w", cerr)
- }
- }
- if q.listFilesByPathStmt != nil {
- if cerr := q.listFilesByPathStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing listFilesByPathStmt: %w", cerr)
- }
- }
- if q.listFilesBySessionStmt != nil {
- if cerr := q.listFilesBySessionStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing listFilesBySessionStmt: %w", cerr)
- }
- }
- if q.listLatestSessionFilesStmt != nil {
- if cerr := q.listLatestSessionFilesStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing listLatestSessionFilesStmt: %w", cerr)
- }
- }
- if q.listLogsBySessionStmt != nil {
- if cerr := q.listLogsBySessionStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing listLogsBySessionStmt: %w", cerr)
- }
- }
- if q.listMessagesBySessionStmt != nil {
- if cerr := q.listMessagesBySessionStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing listMessagesBySessionStmt: %w", cerr)
- }
- }
- if q.listMessagesBySessionAfterStmt != nil {
- if cerr := q.listMessagesBySessionAfterStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing listMessagesBySessionAfterStmt: %w", cerr)
- }
- }
- if q.listNewFilesStmt != nil {
- if cerr := q.listNewFilesStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing listNewFilesStmt: %w", cerr)
- }
- }
- if q.listSessionsStmt != nil {
- if cerr := q.listSessionsStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing listSessionsStmt: %w", cerr)
- }
- }
- if q.updateFileStmt != nil {
- if cerr := q.updateFileStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing updateFileStmt: %w", cerr)
- }
- }
- if q.updateMessageStmt != nil {
- if cerr := q.updateMessageStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing updateMessageStmt: %w", cerr)
- }
- }
- if q.updateSessionStmt != nil {
- if cerr := q.updateSessionStmt.Close(); cerr != nil {
- err = fmt.Errorf("error closing updateSessionStmt: %w", cerr)
- }
- }
- return err
-}
-
-func (q *Queries) exec(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) (sql.Result, error) {
- switch {
- case stmt != nil && q.tx != nil:
- return q.tx.StmtContext(ctx, stmt).ExecContext(ctx, args...)
- case stmt != nil:
- return stmt.ExecContext(ctx, args...)
- default:
- return q.db.ExecContext(ctx, query, args...)
- }
-}
-
-func (q *Queries) query(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) (*sql.Rows, error) {
- switch {
- case stmt != nil && q.tx != nil:
- return q.tx.StmtContext(ctx, stmt).QueryContext(ctx, args...)
- case stmt != nil:
- return stmt.QueryContext(ctx, args...)
- default:
- return q.db.QueryContext(ctx, query, args...)
- }
-}
-
-func (q *Queries) queryRow(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) *sql.Row {
- switch {
- case stmt != nil && q.tx != nil:
- return q.tx.StmtContext(ctx, stmt).QueryRowContext(ctx, args...)
- case stmt != nil:
- return stmt.QueryRowContext(ctx, args...)
- default:
- return q.db.QueryRowContext(ctx, query, args...)
- }
-}
-
-type Queries struct {
- db DBTX
- tx *sql.Tx
- createFileStmt *sql.Stmt
- createLogStmt *sql.Stmt
- createMessageStmt *sql.Stmt
- createSessionStmt *sql.Stmt
- deleteFileStmt *sql.Stmt
- deleteMessageStmt *sql.Stmt
- deleteSessionStmt *sql.Stmt
- deleteSessionFilesStmt *sql.Stmt
- deleteSessionMessagesStmt *sql.Stmt
- getFileStmt *sql.Stmt
- getFileByPathAndSessionStmt *sql.Stmt
- getMessageStmt *sql.Stmt
- getSessionByIDStmt *sql.Stmt
- listAllLogsStmt *sql.Stmt
- listFilesByPathStmt *sql.Stmt
- listFilesBySessionStmt *sql.Stmt
- listLatestSessionFilesStmt *sql.Stmt
- listLogsBySessionStmt *sql.Stmt
- listMessagesBySessionStmt *sql.Stmt
- listMessagesBySessionAfterStmt *sql.Stmt
- listNewFilesStmt *sql.Stmt
- listSessionsStmt *sql.Stmt
- updateFileStmt *sql.Stmt
- updateMessageStmt *sql.Stmt
- updateSessionStmt *sql.Stmt
-}
-
-func (q *Queries) WithTx(tx *sql.Tx) *Queries {
- return &Queries{
- db: tx,
- tx: tx,
- createFileStmt: q.createFileStmt,
- createLogStmt: q.createLogStmt,
- createMessageStmt: q.createMessageStmt,
- createSessionStmt: q.createSessionStmt,
- deleteFileStmt: q.deleteFileStmt,
- deleteMessageStmt: q.deleteMessageStmt,
- deleteSessionStmt: q.deleteSessionStmt,
- deleteSessionFilesStmt: q.deleteSessionFilesStmt,
- deleteSessionMessagesStmt: q.deleteSessionMessagesStmt,
- getFileStmt: q.getFileStmt,
- getFileByPathAndSessionStmt: q.getFileByPathAndSessionStmt,
- getMessageStmt: q.getMessageStmt,
- getSessionByIDStmt: q.getSessionByIDStmt,
- listAllLogsStmt: q.listAllLogsStmt,
- listFilesByPathStmt: q.listFilesByPathStmt,
- listFilesBySessionStmt: q.listFilesBySessionStmt,
- listLatestSessionFilesStmt: q.listLatestSessionFilesStmt,
- listLogsBySessionStmt: q.listLogsBySessionStmt,
- listMessagesBySessionStmt: q.listMessagesBySessionStmt,
- listMessagesBySessionAfterStmt: q.listMessagesBySessionAfterStmt,
- listNewFilesStmt: q.listNewFilesStmt,
- listSessionsStmt: q.listSessionsStmt,
- updateFileStmt: q.updateFileStmt,
- updateMessageStmt: q.updateMessageStmt,
- updateSessionStmt: q.updateSessionStmt,
- }
-}
diff --git a/internal/db/embed.go b/internal/db/embed.go
deleted file mode 100644
index 4afa6eafb..000000000
--- a/internal/db/embed.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package db
-
-import "embed"
-
-//go:embed migrations/*.sql
-var FS embed.FS
diff --git a/internal/db/files.sql.go b/internal/db/files.sql.go
deleted file mode 100644
index 39426a73b..000000000
--- a/internal/db/files.sql.go
+++ /dev/null
@@ -1,317 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.29.0
-// source: files.sql
-
-package db
-
-import (
- "context"
-)
-
-const createFile = `-- name: CreateFile :one
-INSERT INTO files (
- id,
- session_id,
- path,
- content,
- version
-) VALUES (
- ?, ?, ?, ?, ?
-)
-RETURNING id, session_id, path, content, version, is_new, created_at, updated_at
-`
-
-type CreateFileParams struct {
- ID string `json:"id"`
- SessionID string `json:"session_id"`
- Path string `json:"path"`
- Content string `json:"content"`
- Version string `json:"version"`
-}
-
-func (q *Queries) CreateFile(ctx context.Context, arg CreateFileParams) (File, error) {
- row := q.queryRow(ctx, q.createFileStmt, createFile,
- arg.ID,
- arg.SessionID,
- arg.Path,
- arg.Content,
- arg.Version,
- )
- var i File
- err := row.Scan(
- &i.ID,
- &i.SessionID,
- &i.Path,
- &i.Content,
- &i.Version,
- &i.IsNew,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return i, err
-}
-
-const deleteFile = `-- name: DeleteFile :exec
-DELETE FROM files
-WHERE id = ?
-`
-
-func (q *Queries) DeleteFile(ctx context.Context, id string) error {
- _, err := q.exec(ctx, q.deleteFileStmt, deleteFile, id)
- return err
-}
-
-const deleteSessionFiles = `-- name: DeleteSessionFiles :exec
-DELETE FROM files
-WHERE session_id = ?
-`
-
-func (q *Queries) DeleteSessionFiles(ctx context.Context, sessionID string) error {
- _, err := q.exec(ctx, q.deleteSessionFilesStmt, deleteSessionFiles, sessionID)
- return err
-}
-
-const getFile = `-- name: GetFile :one
-SELECT id, session_id, path, content, version, is_new, created_at, updated_at
-FROM files
-WHERE id = ? LIMIT 1
-`
-
-func (q *Queries) GetFile(ctx context.Context, id string) (File, error) {
- row := q.queryRow(ctx, q.getFileStmt, getFile, id)
- var i File
- err := row.Scan(
- &i.ID,
- &i.SessionID,
- &i.Path,
- &i.Content,
- &i.Version,
- &i.IsNew,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return i, err
-}
-
-const getFileByPathAndSession = `-- name: GetFileByPathAndSession :one
-SELECT id, session_id, path, content, version, is_new, created_at, updated_at
-FROM files
-WHERE path = ? AND session_id = ?
-ORDER BY created_at DESC
-LIMIT 1
-`
-
-type GetFileByPathAndSessionParams struct {
- Path string `json:"path"`
- SessionID string `json:"session_id"`
-}
-
-func (q *Queries) GetFileByPathAndSession(ctx context.Context, arg GetFileByPathAndSessionParams) (File, error) {
- row := q.queryRow(ctx, q.getFileByPathAndSessionStmt, getFileByPathAndSession, arg.Path, arg.SessionID)
- var i File
- err := row.Scan(
- &i.ID,
- &i.SessionID,
- &i.Path,
- &i.Content,
- &i.Version,
- &i.IsNew,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return i, err
-}
-
-const listFilesByPath = `-- name: ListFilesByPath :many
-SELECT id, session_id, path, content, version, is_new, created_at, updated_at
-FROM files
-WHERE path = ?
-ORDER BY created_at DESC
-`
-
-func (q *Queries) ListFilesByPath(ctx context.Context, path string) ([]File, error) {
- rows, err := q.query(ctx, q.listFilesByPathStmt, listFilesByPath, path)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []File{}
- for rows.Next() {
- var i File
- if err := rows.Scan(
- &i.ID,
- &i.SessionID,
- &i.Path,
- &i.Content,
- &i.Version,
- &i.IsNew,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); 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 listFilesBySession = `-- name: ListFilesBySession :many
-SELECT id, session_id, path, content, version, is_new, created_at, updated_at
-FROM files
-WHERE session_id = ?
-ORDER BY created_at ASC
-`
-
-func (q *Queries) ListFilesBySession(ctx context.Context, sessionID string) ([]File, error) {
- rows, err := q.query(ctx, q.listFilesBySessionStmt, listFilesBySession, sessionID)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []File{}
- for rows.Next() {
- var i File
- if err := rows.Scan(
- &i.ID,
- &i.SessionID,
- &i.Path,
- &i.Content,
- &i.Version,
- &i.IsNew,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); 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 listLatestSessionFiles = `-- name: ListLatestSessionFiles :many
-SELECT f.id, f.session_id, f.path, f.content, f.version, f.is_new, f.created_at, f.updated_at
-FROM files f
-INNER JOIN (
- SELECT path, MAX(created_at) as max_created_at
- FROM files
- GROUP BY path
-) latest ON f.path = latest.path AND f.created_at = latest.max_created_at
-WHERE f.session_id = ?
-ORDER BY f.path
-`
-
-func (q *Queries) ListLatestSessionFiles(ctx context.Context, sessionID string) ([]File, error) {
- rows, err := q.query(ctx, q.listLatestSessionFilesStmt, listLatestSessionFiles, sessionID)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []File{}
- for rows.Next() {
- var i File
- if err := rows.Scan(
- &i.ID,
- &i.SessionID,
- &i.Path,
- &i.Content,
- &i.Version,
- &i.IsNew,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); 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 listNewFiles = `-- name: ListNewFiles :many
-SELECT id, session_id, path, content, version, is_new, created_at, updated_at
-FROM files
-WHERE is_new = 1
-ORDER BY created_at DESC
-`
-
-func (q *Queries) ListNewFiles(ctx context.Context) ([]File, error) {
- rows, err := q.query(ctx, q.listNewFilesStmt, listNewFiles)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []File{}
- for rows.Next() {
- var i File
- if err := rows.Scan(
- &i.ID,
- &i.SessionID,
- &i.Path,
- &i.Content,
- &i.Version,
- &i.IsNew,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); 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 updateFile = `-- name: UpdateFile :one
-UPDATE files
-SET
- content = ?,
- version = ?,
- updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = ?
-RETURNING id, session_id, path, content, version, is_new, created_at, updated_at
-`
-
-type UpdateFileParams struct {
- Content string `json:"content"`
- Version string `json:"version"`
- ID string `json:"id"`
-}
-
-func (q *Queries) UpdateFile(ctx context.Context, arg UpdateFileParams) (File, error) {
- row := q.queryRow(ctx, q.updateFileStmt, updateFile, arg.Content, arg.Version, arg.ID)
- var i File
- err := row.Scan(
- &i.ID,
- &i.SessionID,
- &i.Path,
- &i.Content,
- &i.Version,
- &i.IsNew,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return i, err
-}
diff --git a/internal/db/logs.sql.go b/internal/db/logs.sql.go
deleted file mode 100644
index 343b34d7c..000000000
--- a/internal/db/logs.sql.go
+++ /dev/null
@@ -1,137 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.29.0
-// source: logs.sql
-
-package db
-
-import (
- "context"
- "database/sql"
-)
-
-const createLog = `-- name: CreateLog :one
-INSERT INTO logs (
- id,
- session_id,
- timestamp,
- level,
- message,
- attributes
-) VALUES (
- ?,
- ?,
- ?,
- ?,
- ?,
- ?
-) RETURNING id, session_id, timestamp, level, message, attributes, created_at, updated_at
-`
-
-type CreateLogParams struct {
- ID string `json:"id"`
- SessionID sql.NullString `json:"session_id"`
- Timestamp string `json:"timestamp"`
- Level string `json:"level"`
- Message string `json:"message"`
- Attributes sql.NullString `json:"attributes"`
-}
-
-func (q *Queries) CreateLog(ctx context.Context, arg CreateLogParams) (Log, error) {
- row := q.queryRow(ctx, q.createLogStmt, createLog,
- arg.ID,
- arg.SessionID,
- arg.Timestamp,
- arg.Level,
- arg.Message,
- arg.Attributes,
- )
- var i Log
- err := row.Scan(
- &i.ID,
- &i.SessionID,
- &i.Timestamp,
- &i.Level,
- &i.Message,
- &i.Attributes,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return i, err
-}
-
-const listAllLogs = `-- name: ListAllLogs :many
-SELECT id, session_id, timestamp, level, message, attributes, created_at, updated_at FROM logs
-ORDER BY timestamp DESC
-LIMIT ?
-`
-
-func (q *Queries) ListAllLogs(ctx context.Context, limit int64) ([]Log, error) {
- rows, err := q.query(ctx, q.listAllLogsStmt, listAllLogs, limit)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []Log{}
- for rows.Next() {
- var i Log
- if err := rows.Scan(
- &i.ID,
- &i.SessionID,
- &i.Timestamp,
- &i.Level,
- &i.Message,
- &i.Attributes,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); 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 listLogsBySession = `-- name: ListLogsBySession :many
-SELECT id, session_id, timestamp, level, message, attributes, created_at, updated_at FROM logs
-WHERE session_id = ?
-ORDER BY timestamp DESC
-`
-
-func (q *Queries) ListLogsBySession(ctx context.Context, sessionID sql.NullString) ([]Log, error) {
- rows, err := q.query(ctx, q.listLogsBySessionStmt, listLogsBySession, sessionID)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []Log{}
- for rows.Next() {
- var i Log
- if err := rows.Scan(
- &i.ID,
- &i.SessionID,
- &i.Timestamp,
- &i.Level,
- &i.Message,
- &i.Attributes,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); 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
-}
diff --git a/internal/db/messages.sql.go b/internal/db/messages.sql.go
deleted file mode 100644
index 57d940872..000000000
--- a/internal/db/messages.sql.go
+++ /dev/null
@@ -1,199 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.29.0
-// source: messages.sql
-
-package db
-
-import (
- "context"
- "database/sql"
-)
-
-const createMessage = `-- name: CreateMessage :one
-INSERT INTO messages (
- id,
- session_id,
- role,
- parts,
- model
-) VALUES (
- ?, ?, ?, ?, ?
-)
-RETURNING id, session_id, role, parts, model, created_at, updated_at, finished_at
-`
-
-type CreateMessageParams struct {
- ID string `json:"id"`
- SessionID string `json:"session_id"`
- Role string `json:"role"`
- Parts string `json:"parts"`
- Model sql.NullString `json:"model"`
-}
-
-func (q *Queries) CreateMessage(ctx context.Context, arg CreateMessageParams) (Message, error) {
- row := q.queryRow(ctx, q.createMessageStmt, createMessage,
- arg.ID,
- arg.SessionID,
- arg.Role,
- arg.Parts,
- arg.Model,
- )
- var i Message
- err := row.Scan(
- &i.ID,
- &i.SessionID,
- &i.Role,
- &i.Parts,
- &i.Model,
- &i.CreatedAt,
- &i.UpdatedAt,
- &i.FinishedAt,
- )
- return i, err
-}
-
-const deleteMessage = `-- name: DeleteMessage :exec
-DELETE FROM messages
-WHERE id = ?
-`
-
-func (q *Queries) DeleteMessage(ctx context.Context, id string) error {
- _, err := q.exec(ctx, q.deleteMessageStmt, deleteMessage, id)
- return err
-}
-
-const deleteSessionMessages = `-- name: DeleteSessionMessages :exec
-DELETE FROM messages
-WHERE session_id = ?
-`
-
-func (q *Queries) DeleteSessionMessages(ctx context.Context, sessionID string) error {
- _, err := q.exec(ctx, q.deleteSessionMessagesStmt, deleteSessionMessages, sessionID)
- return err
-}
-
-const getMessage = `-- name: GetMessage :one
-SELECT id, session_id, role, parts, model, created_at, updated_at, finished_at
-FROM messages
-WHERE id = ? LIMIT 1
-`
-
-func (q *Queries) GetMessage(ctx context.Context, id string) (Message, error) {
- row := q.queryRow(ctx, q.getMessageStmt, getMessage, id)
- var i Message
- err := row.Scan(
- &i.ID,
- &i.SessionID,
- &i.Role,
- &i.Parts,
- &i.Model,
- &i.CreatedAt,
- &i.UpdatedAt,
- &i.FinishedAt,
- )
- return i, err
-}
-
-const listMessagesBySession = `-- name: ListMessagesBySession :many
-SELECT id, session_id, role, parts, model, created_at, updated_at, finished_at
-FROM messages
-WHERE session_id = ?
-ORDER BY created_at ASC
-`
-
-func (q *Queries) ListMessagesBySession(ctx context.Context, sessionID string) ([]Message, error) {
- rows, err := q.query(ctx, q.listMessagesBySessionStmt, listMessagesBySession, sessionID)
- 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,
- ); 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 listMessagesBySessionAfter = `-- name: ListMessagesBySessionAfter :many
-SELECT id, session_id, role, parts, model, created_at, updated_at, finished_at
-FROM messages
-WHERE session_id = ? AND created_at > ?
-ORDER BY created_at ASC
-`
-
-type ListMessagesBySessionAfterParams struct {
- SessionID string `json:"session_id"`
- CreatedAt string `json:"created_at"`
-}
-
-func (q *Queries) ListMessagesBySessionAfter(ctx context.Context, arg ListMessagesBySessionAfterParams) ([]Message, error) {
- rows, err := q.query(ctx, q.listMessagesBySessionAfterStmt, listMessagesBySessionAfter, arg.SessionID, arg.CreatedAt)
- 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,
- ); 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 updateMessage = `-- name: UpdateMessage :exec
-UPDATE messages
-SET
- parts = ?,
- finished_at = ?,
- updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = ?
-`
-
-type UpdateMessageParams struct {
- Parts string `json:"parts"`
- FinishedAt sql.NullString `json:"finished_at"`
- ID string `json:"id"`
-}
-
-func (q *Queries) UpdateMessage(ctx context.Context, arg UpdateMessageParams) error {
- _, err := q.exec(ctx, q.updateMessageStmt, updateMessage, arg.Parts, arg.FinishedAt, arg.ID)
- return err
-}
diff --git a/internal/db/migrations/20250513000000_initial.sql b/internal/db/migrations/20250513000000_initial.sql
deleted file mode 100644
index ad97a4ad3..000000000
--- a/internal/db/migrations/20250513000000_initial.sql
+++ /dev/null
@@ -1,125 +0,0 @@
--- +goose Up
--- +goose StatementBegin
--- Sessions
-CREATE TABLE IF NOT EXISTS sessions (
- id TEXT PRIMARY KEY,
- parent_session_id TEXT,
- title TEXT NOT NULL,
- message_count INTEGER NOT NULL DEFAULT 0 CHECK (message_count >= 0),
- prompt_tokens INTEGER NOT NULL DEFAULT 0 CHECK (prompt_tokens >= 0),
- completion_tokens INTEGER NOT NULL DEFAULT 0 CHECK (completion_tokens >= 0),
- cost REAL NOT NULL DEFAULT 0.0 CHECK (cost >= 0.0),
- summary TEXT,
- summarized_at TEXT,
- updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')),
- created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now'))
-);
-
-CREATE TRIGGER IF NOT EXISTS update_sessions_updated_at
-AFTER UPDATE ON sessions
-BEGIN
-UPDATE sessions SET updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = new.id;
-END;
-
--- Files
-CREATE TABLE IF NOT EXISTS files (
- id TEXT PRIMARY KEY,
- session_id TEXT NOT NULL,
- path TEXT NOT NULL,
- content TEXT NOT NULL,
- version TEXT NOT NULL,
- is_new INTEGER DEFAULT 0,
- created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')),
- updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')),
- FOREIGN KEY (session_id) REFERENCES sessions (id) ON DELETE CASCADE,
- UNIQUE(path, session_id, version)
-);
-
-CREATE INDEX IF NOT EXISTS idx_files_session_id ON files (session_id);
-CREATE INDEX IF NOT EXISTS idx_files_path ON files (path);
-
-CREATE TRIGGER IF NOT EXISTS update_files_updated_at
-AFTER UPDATE ON files
-BEGIN
-UPDATE files SET updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = new.id;
-END;
-
--- Messages
-CREATE TABLE IF NOT EXISTS messages (
- id TEXT PRIMARY KEY,
- session_id TEXT NOT NULL,
- role TEXT NOT NULL,
- parts TEXT NOT NULL default '[]',
- model TEXT,
- created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')),
- updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')),
- finished_at TEXT,
- FOREIGN KEY (session_id) REFERENCES sessions (id) ON DELETE CASCADE
-);
-
-CREATE INDEX IF NOT EXISTS idx_messages_session_id ON messages (session_id);
-
-CREATE TRIGGER IF NOT EXISTS update_messages_updated_at
-AFTER UPDATE ON messages
-BEGIN
-UPDATE messages SET updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = new.id;
-END;
-
-CREATE TRIGGER IF NOT EXISTS update_session_message_count_on_insert
-AFTER INSERT ON messages
-BEGIN
-UPDATE sessions SET
- message_count = message_count + 1
-WHERE id = new.session_id;
-END;
-
-CREATE TRIGGER IF NOT EXISTS update_session_message_count_on_delete
-AFTER DELETE ON messages
-BEGIN
-UPDATE sessions SET
- message_count = message_count - 1
-WHERE id = old.session_id;
-END;
-
--- Logs
-CREATE TABLE IF NOT EXISTS logs (
- id TEXT PRIMARY KEY,
- session_id TEXT REFERENCES sessions(id) ON DELETE CASCADE,
- timestamp TEXT NOT NULL,
- level TEXT NOT NULL,
- message TEXT NOT NULL,
- attributes TEXT,
- created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')),
- updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now'))
-);
-
-CREATE INDEX logs_session_id_idx ON logs(session_id);
-CREATE INDEX logs_timestamp_idx ON logs(timestamp);
-
-CREATE TRIGGER IF NOT EXISTS update_logs_updated_at
-AFTER UPDATE ON logs
-BEGIN
-UPDATE logs SET updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = new.id;
-END;
-
--- +goose StatementEnd
-
--- +goose Down
--- +goose StatementBegin
-DROP TRIGGER IF EXISTS update_sessions_updated_at;
-DROP TRIGGER IF EXISTS update_messages_updated_at;
-DROP TRIGGER IF EXISTS update_files_updated_at;
-DROP TRIGGER IF EXISTS update_logs_updated_at;
-
-DROP TRIGGER IF EXISTS update_session_message_count_on_delete;
-DROP TRIGGER IF EXISTS update_session_message_count_on_insert;
-
-DROP TABLE IF EXISTS logs;
-DROP TABLE IF EXISTS messages;
-DROP TABLE IF EXISTS files;
-DROP TABLE IF EXISTS sessions;
--- +goose StatementEnd
diff --git a/internal/db/models.go b/internal/db/models.go
deleted file mode 100644
index e016ef79c..000000000
--- a/internal/db/models.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.29.0
-
-package db
-
-import (
- "database/sql"
-)
-
-type File struct {
- ID string `json:"id"`
- SessionID string `json:"session_id"`
- Path string `json:"path"`
- Content string `json:"content"`
- Version string `json:"version"`
- IsNew sql.NullInt64 `json:"is_new"`
- CreatedAt string `json:"created_at"`
- UpdatedAt string `json:"updated_at"`
-}
-
-type Log struct {
- ID string `json:"id"`
- SessionID sql.NullString `json:"session_id"`
- Timestamp string `json:"timestamp"`
- Level string `json:"level"`
- Message string `json:"message"`
- Attributes sql.NullString `json:"attributes"`
- CreatedAt string `json:"created_at"`
- UpdatedAt string `json:"updated_at"`
-}
-
-type Message struct {
- ID string `json:"id"`
- SessionID string `json:"session_id"`
- Role string `json:"role"`
- Parts string `json:"parts"`
- Model sql.NullString `json:"model"`
- CreatedAt string `json:"created_at"`
- UpdatedAt string `json:"updated_at"`
- FinishedAt sql.NullString `json:"finished_at"`
-}
-
-type Session struct {
- ID string `json:"id"`
- ParentSessionID sql.NullString `json:"parent_session_id"`
- Title string `json:"title"`
- MessageCount int64 `json:"message_count"`
- PromptTokens int64 `json:"prompt_tokens"`
- CompletionTokens int64 `json:"completion_tokens"`
- Cost float64 `json:"cost"`
- Summary sql.NullString `json:"summary"`
- SummarizedAt sql.NullString `json:"summarized_at"`
- UpdatedAt string `json:"updated_at"`
- CreatedAt string `json:"created_at"`
-}
diff --git a/internal/db/querier.go b/internal/db/querier.go
deleted file mode 100644
index 7b089f021..000000000
--- a/internal/db/querier.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.29.0
-
-package db
-
-import (
- "context"
- "database/sql"
-)
-
-type Querier interface {
- CreateFile(ctx context.Context, arg CreateFileParams) (File, error)
- CreateLog(ctx context.Context, arg CreateLogParams) (Log, error)
- CreateMessage(ctx context.Context, arg CreateMessageParams) (Message, error)
- CreateSession(ctx context.Context, arg CreateSessionParams) (Session, error)
- DeleteFile(ctx context.Context, id string) error
- DeleteMessage(ctx context.Context, id string) error
- DeleteSession(ctx context.Context, id string) error
- DeleteSessionFiles(ctx context.Context, sessionID string) error
- DeleteSessionMessages(ctx context.Context, sessionID string) error
- GetFile(ctx context.Context, id string) (File, error)
- GetFileByPathAndSession(ctx context.Context, arg GetFileByPathAndSessionParams) (File, error)
- GetMessage(ctx context.Context, id string) (Message, error)
- GetSessionByID(ctx context.Context, id string) (Session, error)
- ListAllLogs(ctx context.Context, limit int64) ([]Log, 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)
- ListLogsBySession(ctx context.Context, sessionID sql.NullString) ([]Log, error)
- ListMessagesBySession(ctx context.Context, sessionID string) ([]Message, error)
- ListMessagesBySessionAfter(ctx context.Context, arg ListMessagesBySessionAfterParams) ([]Message, error)
- ListNewFiles(ctx context.Context) ([]File, error)
- ListSessions(ctx context.Context) ([]Session, error)
- UpdateFile(ctx context.Context, arg UpdateFileParams) (File, error)
- UpdateMessage(ctx context.Context, arg UpdateMessageParams) error
- UpdateSession(ctx context.Context, arg UpdateSessionParams) (Session, error)
-}
-
-var _ Querier = (*Queries)(nil)
diff --git a/internal/db/sessions.sql.go b/internal/db/sessions.sql.go
deleted file mode 100644
index 8be220cc7..000000000
--- a/internal/db/sessions.sql.go
+++ /dev/null
@@ -1,203 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.29.0
-// source: sessions.sql
-
-package db
-
-import (
- "context"
- "database/sql"
-)
-
-const createSession = `-- name: CreateSession :one
-INSERT INTO sessions (
- id,
- parent_session_id,
- title,
- message_count,
- prompt_tokens,
- completion_tokens,
- cost,
- summary,
- summarized_at
-) VALUES (
- ?,
- ?,
- ?,
- ?,
- ?,
- ?,
- ?,
- ?,
- ?
-) RETURNING id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, summary, summarized_at, updated_at, created_at
-`
-
-type CreateSessionParams struct {
- ID string `json:"id"`
- ParentSessionID sql.NullString `json:"parent_session_id"`
- Title string `json:"title"`
- MessageCount int64 `json:"message_count"`
- PromptTokens int64 `json:"prompt_tokens"`
- CompletionTokens int64 `json:"completion_tokens"`
- Cost float64 `json:"cost"`
- Summary sql.NullString `json:"summary"`
- SummarizedAt sql.NullString `json:"summarized_at"`
-}
-
-func (q *Queries) CreateSession(ctx context.Context, arg CreateSessionParams) (Session, error) {
- row := q.queryRow(ctx, q.createSessionStmt, createSession,
- arg.ID,
- arg.ParentSessionID,
- arg.Title,
- arg.MessageCount,
- arg.PromptTokens,
- arg.CompletionTokens,
- arg.Cost,
- arg.Summary,
- arg.SummarizedAt,
- )
- var i Session
- err := row.Scan(
- &i.ID,
- &i.ParentSessionID,
- &i.Title,
- &i.MessageCount,
- &i.PromptTokens,
- &i.CompletionTokens,
- &i.Cost,
- &i.Summary,
- &i.SummarizedAt,
- &i.UpdatedAt,
- &i.CreatedAt,
- )
- return i, err
-}
-
-const deleteSession = `-- name: DeleteSession :exec
-DELETE FROM sessions
-WHERE id = ?
-`
-
-func (q *Queries) DeleteSession(ctx context.Context, id string) error {
- _, err := q.exec(ctx, q.deleteSessionStmt, deleteSession, id)
- return err
-}
-
-const getSessionByID = `-- name: GetSessionByID :one
-SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, summary, summarized_at, updated_at, created_at
-FROM sessions
-WHERE id = ? LIMIT 1
-`
-
-func (q *Queries) GetSessionByID(ctx context.Context, id string) (Session, error) {
- row := q.queryRow(ctx, q.getSessionByIDStmt, getSessionByID, id)
- var i Session
- err := row.Scan(
- &i.ID,
- &i.ParentSessionID,
- &i.Title,
- &i.MessageCount,
- &i.PromptTokens,
- &i.CompletionTokens,
- &i.Cost,
- &i.Summary,
- &i.SummarizedAt,
- &i.UpdatedAt,
- &i.CreatedAt,
- )
- return i, err
-}
-
-const listSessions = `-- name: ListSessions :many
-SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, summary, summarized_at, updated_at, created_at
-FROM sessions
-WHERE parent_session_id is NULL
-ORDER BY created_at DESC
-`
-
-func (q *Queries) ListSessions(ctx context.Context) ([]Session, error) {
- rows, err := q.query(ctx, q.listSessionsStmt, listSessions)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []Session{}
- for rows.Next() {
- var i Session
- if err := rows.Scan(
- &i.ID,
- &i.ParentSessionID,
- &i.Title,
- &i.MessageCount,
- &i.PromptTokens,
- &i.CompletionTokens,
- &i.Cost,
- &i.Summary,
- &i.SummarizedAt,
- &i.UpdatedAt,
- &i.CreatedAt,
- ); 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 updateSession = `-- name: UpdateSession :one
-UPDATE sessions
-SET
- title = ?,
- prompt_tokens = ?,
- completion_tokens = ?,
- cost = ?,
- summary = ?,
- summarized_at = ?
-WHERE id = ?
-RETURNING id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, summary, summarized_at, updated_at, created_at
-`
-
-type UpdateSessionParams struct {
- Title string `json:"title"`
- PromptTokens int64 `json:"prompt_tokens"`
- CompletionTokens int64 `json:"completion_tokens"`
- Cost float64 `json:"cost"`
- Summary sql.NullString `json:"summary"`
- SummarizedAt sql.NullString `json:"summarized_at"`
- ID string `json:"id"`
-}
-
-func (q *Queries) UpdateSession(ctx context.Context, arg UpdateSessionParams) (Session, error) {
- row := q.queryRow(ctx, q.updateSessionStmt, updateSession,
- arg.Title,
- arg.PromptTokens,
- arg.CompletionTokens,
- arg.Cost,
- arg.Summary,
- arg.SummarizedAt,
- arg.ID,
- )
- var i Session
- err := row.Scan(
- &i.ID,
- &i.ParentSessionID,
- &i.Title,
- &i.MessageCount,
- &i.PromptTokens,
- &i.CompletionTokens,
- &i.Cost,
- &i.Summary,
- &i.SummarizedAt,
- &i.UpdatedAt,
- &i.CreatedAt,
- )
- return i, err
-}
diff --git a/internal/db/sql/files.sql b/internal/db/sql/files.sql
deleted file mode 100644
index 560a6984f..000000000
--- a/internal/db/sql/files.sql
+++ /dev/null
@@ -1,69 +0,0 @@
--- name: GetFile :one
-SELECT *
-FROM files
-WHERE id = ? LIMIT 1;
-
--- name: GetFileByPathAndSession :one
-SELECT *
-FROM files
-WHERE path = ? AND session_id = ?
-ORDER BY created_at DESC
-LIMIT 1;
-
--- name: ListFilesBySession :many
-SELECT *
-FROM files
-WHERE session_id = ?
-ORDER BY created_at ASC;
-
--- name: ListFilesByPath :many
-SELECT *
-FROM files
-WHERE path = ?
-ORDER BY created_at DESC;
-
--- name: CreateFile :one
-INSERT INTO files (
- id,
- session_id,
- path,
- content,
- version
-) VALUES (
- ?, ?, ?, ?, ?
-)
-RETURNING *;
-
--- name: UpdateFile :one
-UPDATE files
-SET
- content = ?,
- version = ?,
- updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = ?
-RETURNING *;
-
--- name: DeleteFile :exec
-DELETE FROM files
-WHERE id = ?;
-
--- name: DeleteSessionFiles :exec
-DELETE FROM files
-WHERE session_id = ?;
-
--- name: ListLatestSessionFiles :many
-SELECT f.*
-FROM files f
-INNER JOIN (
- SELECT path, MAX(created_at) as max_created_at
- FROM files
- GROUP BY path
-) latest ON f.path = latest.path AND f.created_at = latest.max_created_at
-WHERE f.session_id = ?
-ORDER BY f.path;
-
--- name: ListNewFiles :many
-SELECT *
-FROM files
-WHERE is_new = 1
-ORDER BY created_at DESC;
diff --git a/internal/db/sql/logs.sql b/internal/db/sql/logs.sql
deleted file mode 100644
index 9d20800d9..000000000
--- a/internal/db/sql/logs.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- name: CreateLog :one
-INSERT INTO logs (
- id,
- session_id,
- timestamp,
- level,
- message,
- attributes
-) VALUES (
- ?,
- ?,
- ?,
- ?,
- ?,
- ?
-) RETURNING *;
-
--- name: ListLogsBySession :many
-SELECT * FROM logs
-WHERE session_id = ?
-ORDER BY timestamp DESC;
-
--- name: ListAllLogs :many
-SELECT * FROM logs
-ORDER BY timestamp DESC
-LIMIT ?;
diff --git a/internal/db/sql/messages.sql b/internal/db/sql/messages.sql
deleted file mode 100644
index 6a3b69f6f..000000000
--- a/internal/db/sql/messages.sql
+++ /dev/null
@@ -1,45 +0,0 @@
--- name: GetMessage :one
-SELECT *
-FROM messages
-WHERE id = ? LIMIT 1;
-
--- name: ListMessagesBySession :many
-SELECT *
-FROM messages
-WHERE session_id = ?
-ORDER BY created_at ASC;
-
--- name: ListMessagesBySessionAfter :many
-SELECT *
-FROM messages
-WHERE session_id = ? AND created_at > ?
-ORDER BY created_at ASC;
-
--- name: CreateMessage :one
-INSERT INTO messages (
- id,
- session_id,
- role,
- parts,
- model
-) VALUES (
- ?, ?, ?, ?, ?
-)
-RETURNING *;
-
--- name: UpdateMessage :exec
-UPDATE messages
-SET
- parts = ?,
- finished_at = ?,
- updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = ?;
-
-
--- name: DeleteMessage :exec
-DELETE FROM messages
-WHERE id = ?;
-
--- name: DeleteSessionMessages :exec
-DELETE FROM messages
-WHERE session_id = ?;
diff --git a/internal/db/sql/sessions.sql b/internal/db/sql/sessions.sql
deleted file mode 100644
index fd7ffe56c..000000000
--- a/internal/db/sql/sessions.sql
+++ /dev/null
@@ -1,50 +0,0 @@
--- name: CreateSession :one
-INSERT INTO sessions (
- id,
- parent_session_id,
- title,
- message_count,
- prompt_tokens,
- completion_tokens,
- cost,
- summary,
- summarized_at
-) VALUES (
- ?,
- ?,
- ?,
- ?,
- ?,
- ?,
- ?,
- ?,
- ?
-) RETURNING *;
-
--- name: GetSessionByID :one
-SELECT *
-FROM sessions
-WHERE id = ? LIMIT 1;
-
--- name: ListSessions :many
-SELECT *
-FROM sessions
-WHERE parent_session_id is NULL
-ORDER BY created_at DESC;
-
--- name: UpdateSession :one
-UPDATE sessions
-SET
- title = ?,
- prompt_tokens = ?,
- completion_tokens = ?,
- cost = ?,
- summary = ?,
- summarized_at = ?
-WHERE id = ?
-RETURNING *;
-
-
--- name: DeleteSession :exec
-DELETE FROM sessions
-WHERE id = ?;