This repository has been archived on 2026-05-07. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
ccrm/server/internal/db/events.go

63 lines
1.6 KiB
Go

package db
import (
"time"
)
// Event represents an event row in the database.
type Event struct {
ID int64 `json:"id"`
SessionID string `json:"session_id"`
EventName string `json:"event_name"`
ToolName string `json:"tool_name,omitempty"`
Payload string `json:"payload"`
CreatedAt time.Time `json:"created_at"`
}
// InsertEvent inserts a new event.
func (db *DB) InsertEvent(sessionID, eventName, toolName, payload string) (int64, error) {
result, err := db.Exec(`
INSERT INTO events (session_id, event_name, tool_name, payload)
VALUES (?, ?, ?, ?)
`, sessionID, eventName, toolName, payload)
if err != nil {
return 0, err
}
return result.LastInsertId()
}
// ListEvents returns events for a session, with optional pagination.
func (db *DB) ListEvents(sessionID string, limit, offset int) ([]*Event, error) {
if limit <= 0 {
limit = 100
}
rows, err := db.Query(`
SELECT id, session_id, event_name, tool_name, payload, created_at
FROM events
WHERE session_id = ?
ORDER BY id DESC
LIMIT ? OFFSET ?
`, sessionID, limit, offset)
if err != nil {
return nil, err
}
defer rows.Close()
var events []*Event
for rows.Next() {
e := &Event{}
if err := rows.Scan(&e.ID, &e.SessionID, &e.EventName, &e.ToolName, &e.Payload, &e.CreatedAt); err != nil {
return nil, err
}
events = append(events, e)
}
return events, nil
}
// CountEvents returns the total number of events for a session.
func (db *DB) CountEvents(sessionID string) (int, error) {
var count int
err := db.QueryRow("SELECT COUNT(*) FROM events WHERE session_id = ?", sessionID).Scan(&count)
return count, err
}