go-scopes/storage/message/message.go

50 lines
1.2 KiB
Go

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 MakeMessage(t *tracking.TrackTemplate) tracking.Track {
if t.Head["domain"] == "" {
t.Head["domain"] = "scopes"
}
return &message{tracking.MakeTrack(t)}
}
func Messages(db *sql.Storage) *tracking.Container {
return &tracking.Container{
ItemFactory: MakeMessage,
TableName: "messages",
HeadFields: []string{"domain", "action", "class", "item"},
Indexes: [][]string{
[]string{"domain", "action", "class", "item"},
[]string{"domain", "class", "item"},
},
Storage: db,
}
}
// 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) {
//q := db.BuildQuery("insert_msg", "messages")
//db.Exec(q, msg.Domain(), msg.Action(), msg.Class(), msg.Item(), msg.Payload())
}
func init() {
sql.SqlSources += `{{ define "insert_msg" -}}
insert into {{ .table }} (domain, action, class, item, payload)
values ($1, $2, $3, $4, $5) {{- end }}`
}