45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package storage
|
|
|
|
import "elefant/models"
|
|
|
|
type Memories interface {
|
|
Memorise(m *models.Memory) (*models.Memory, error)
|
|
Recall(agent, topic string) (string, error)
|
|
RecallTopics(agent string) ([]string, error)
|
|
}
|
|
|
|
func (p ProviderSQL) Memorise(m *models.Memory) (*models.Memory, error) {
|
|
query := "INSERT INTO memories (agent, topic, mind) VALUES (:agent, :topic, :mind) RETURNING *;"
|
|
stmt, err := p.db.PrepareNamed(query)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer stmt.Close()
|
|
var memory models.Memory
|
|
err = stmt.Get(&memory, m)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &memory, nil
|
|
}
|
|
|
|
func (p ProviderSQL) Recall(agent, topic string) (string, error) {
|
|
query := "SELECT mind FROM memories WHERE agent = $1 AND topic = $2"
|
|
var mind string
|
|
err := p.db.Get(&mind, query, agent, topic)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return mind, nil
|
|
}
|
|
|
|
func (p ProviderSQL) RecallTopics(agent string) ([]string, error) {
|
|
query := "SELECT DISTINCT topic FROM memories WHERE agent = $1"
|
|
var topics []string
|
|
err := p.db.Select(&topics, query, agent)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return topics, nil
|
|
}
|