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 }