package message import ( lib "git.sr.ht/~cco/go-scopes" sql "git.sr.ht/~cco/go-scopes/storage" "git.sr.ht/~cco/go-scopes/storage/tracking" ) type message struct { tracking.Track } func Message(tr tracking.Track) *message { return &message{tr} } func MakeMessage(t *tracking.TrackTemplate, c *tracking.Container) tracking.Track { if t.Head["domain"] == "" { t.Head["domain"] = "scopes" } return tracking.MakeTrack(t, c) } func (msg *message) Domain() string { return msg.Head()["domain"] } // message container func Messages(db *sql.Storage) *tracking.Container { return &tracking.Container{container_definition, db} } func New(cont *tracking.Container, headValues lib.StrSlice, data lib.Map) *message { return Message(cont.NewTrack(headValues, data)) } // message store action handler func Store(act lib.Action) bool { db := lib.GetState[*sql.Storage](act.Context()) StoreDB(db, act.Message()) return true } func StoreDB(db *sql.Storage, msg lib.Message) { cont := Messages(db) t := tracking.TrackTemplate{ Head: lib.StrMap{ "Domain": msg.Domain(), "Action": msg.Action(), "Class": msg.Class(), "Item": msg.Item(), }, } cont.Save(&t) } // container definition var container_definition *tracking.ContDef func init() { container_definition = &tracking.ContDef{ ItemFactory: MakeMessage, TableName: "messages", HeadFields: []string{"domain", "action", "class", "item"}, Indexes: [][]string{ []string{"domain", "action", "class", "item"}, []string{"domain", "class", "item"}, }, } }