/** * RemoteBrain - rbrain * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Paolo Lulli * @copyright Paolo Lulli 2026 */ package queries import ( "database/sql" "fmt" "rbrain/internal/encoding" _ "modernc.org/sqlite" ) func SaveRequest(db *sql.DB, message string) (string, error) { id := encoding.NewUUID() _, err := db.Exec( `INSERT INTO requests (id, sha1, message) VALUES (?, ?, ?)`, id, encoding.HashSHA1(message), encoding.EncodeB64(message), ) if err != nil { return "", fmt.Errorf("saveRequest: %w", err) } return id, nil } func SaveResponse(db *sql.DB, requestID, response string) error { _, err := db.Exec( `INSERT INTO responses (id, id_request, response) VALUES (?, ?, ?)`, encoding.NewUUID(), requestID, encoding.EncodeB64(response), ) if err != nil { return fmt.Errorf("saveResponse: %w", err) } return nil } func InitSchema(db *sql.DB) error { _, err := db.Exec(` CREATE TABLE IF NOT EXISTS requests ( id TEXT PRIMARY KEY, sha1 TEXT NOT NULL, message TEXT NOT NULL, created_at TEXT DEFAULT (datetime('now')) ); CREATE TABLE IF NOT EXISTS responses ( id TEXT PRIMARY KEY, id_request TEXT NOT NULL, response TEXT NOT NULL, created_at TEXT DEFAULT (datetime('now')), FOREIGN KEY (id_request) REFERENCES requests(id) ); `) return err } func GetRequestsHistory(db *sql.DB) (*sql.Rows, error) { rows, err := db.Query(` SELECT r.message, rs.response, r.created_at FROM requests r JOIN responses rs ON rs.id_request = r.id ORDER BY r.created_at ASC LIMIT 10 `) return rows, err }