work in progress: storage: Messages
This commit is contained in:
parent
372e254619
commit
5669e3f37d
3 changed files with 72 additions and 39 deletions
|
@ -3,18 +3,32 @@ 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"
|
||||
)
|
||||
|
||||
func Messages(db *sql.Storage) *tracking.Container {
|
||||
return &tracking.Container{
|
||||
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
|
||||
}
|
||||
|
||||
// var Store = func(db *sql.Storage, msg lib.Message) {
|
||||
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())
|
||||
//q := db.BuildQuery("insert_msg", "messages")
|
||||
//db.Exec(q, msg.Domain(), msg.Action(), msg.Class(), msg.Item(), msg.Payload())
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
|
|
@ -13,20 +13,25 @@ import (
|
|||
sql "git.sr.ht/~cco/go-scopes/storage"
|
||||
)
|
||||
|
||||
type ItemFactory func() Track
|
||||
type ItemFactory func(TrackTemplate) Track
|
||||
|
||||
type Track interface {
|
||||
TrackId() lib.Ident
|
||||
Head() lib.StrMap
|
||||
Data() lib.Map
|
||||
TimeStamp() *time.Time
|
||||
}
|
||||
|
||||
type Container interface {
|
||||
New(lib.StrSlice, lib.Map)
|
||||
CreateTable()
|
||||
//Update(TrackTemplate)
|
||||
}
|
||||
|
||||
type BaseTrack = track
|
||||
type BaseContainer = container
|
||||
|
||||
type TrackTemplate struct {
|
||||
TrackId lib.Ident
|
||||
Head lib.StrMap
|
||||
TimeStamp *time.Time
|
||||
Data lib.Map
|
||||
Container *Container
|
||||
}
|
||||
|
||||
// basic track implementation
|
||||
|
||||
|
@ -35,38 +40,46 @@ type track struct {
|
|||
head lib.StrMap
|
||||
timeStamp *time.Time
|
||||
data lib.Map
|
||||
container *container
|
||||
container *Container
|
||||
}
|
||||
|
||||
func (tr *track) TrackId() lib.Ident {
|
||||
return tr.trackId
|
||||
}
|
||||
|
||||
func (tr *track) Head() lib.StrMap {
|
||||
return tr.head
|
||||
}
|
||||
|
||||
func (tr *track) Data() lib.Map {
|
||||
return tr.data
|
||||
}
|
||||
|
||||
func (tr *track) TimeStamp() *time.Time {
|
||||
return tr.timeStamp
|
||||
}
|
||||
|
||||
// basic container implementation
|
||||
|
||||
type container struct {
|
||||
tableName string
|
||||
headFields []string
|
||||
indexes [][]string
|
||||
storage *sql.Storage
|
||||
type Container struct {
|
||||
TableName string
|
||||
HeadFields []string
|
||||
Indexes [][]string
|
||||
Storage *sql.Storage
|
||||
}
|
||||
|
||||
func Tracks(db *sql.Storage) *container {
|
||||
return &container{
|
||||
tableName: "tracks",
|
||||
headFields: []string{"taskId", "userName"},
|
||||
indexes: [][]string{[]string{"taskId", "userName"}, []string{"userName"}},
|
||||
storage: db,
|
||||
func Tracks(db *sql.Storage) *Container {
|
||||
return &Container{
|
||||
TableName: "tracks",
|
||||
HeadFields: []string{"taskId", "userName"},
|
||||
Indexes: [][]string{[]string{"taskId", "userName"}, []string{"userName"}},
|
||||
Storage: db,
|
||||
}
|
||||
}
|
||||
|
||||
func (cont *container) New(headValues lib.StrSlice, data lib.Map) Track {
|
||||
func (cont *Container) New(headValues lib.StrSlice, data lib.Map) Track {
|
||||
head := lib.StrMap{}
|
||||
for i, k := range cont.headFields {
|
||||
for i, k := range cont.HeadFields {
|
||||
head[k] = headValues[i]
|
||||
}
|
||||
tr := &track{head: head, data: data}
|
||||
|
@ -74,20 +87,20 @@ func (cont *container) New(headValues lib.StrSlice, data lib.Map) Track {
|
|||
return tr
|
||||
}
|
||||
|
||||
func (cont *container) insert(tr *track) lib.Ident {
|
||||
func (cont *Container) insert(tr *track) lib.Ident {
|
||||
var columns []string
|
||||
var values []any
|
||||
for _, k := range cont.headFields {
|
||||
for _, k := range cont.HeadFields {
|
||||
columns = append(columns, k)
|
||||
values = append(values, tr.head[k])
|
||||
}
|
||||
columns = append(columns, "Data")
|
||||
b, _ := json.Marshal(tr.data)
|
||||
values = append(values, b)
|
||||
db := cont.storage
|
||||
db := cont.Storage
|
||||
data := lib.Map{
|
||||
"schema": db.Schema,
|
||||
"tablename": cont.tableName,
|
||||
"tablename": cont.TableName,
|
||||
"columns": columns,
|
||||
}
|
||||
sql := storage.BuildSql(SqlInsert, data)
|
||||
|
@ -121,13 +134,13 @@ func ParseDateTime(inp string) *time.Time {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (cont *container) CreateTable() {
|
||||
db := cont.storage
|
||||
func (cont *Container) CreateTable() {
|
||||
db := cont.Storage
|
||||
data := lib.Map{
|
||||
"schema": db.Schema,
|
||||
"tablename": cont.tableName,
|
||||
"headFields": cont.headFields,
|
||||
"indexes": cont.indexes,
|
||||
"tablename": cont.TableName,
|
||||
"headFields": cont.HeadFields,
|
||||
"indexes": cont.Indexes,
|
||||
"params": db.Params,
|
||||
}
|
||||
sql := storage.BuildSql(SqlCreate, data)
|
||||
|
|
|
@ -1,16 +1,15 @@
|
|||
package scopes
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
tbase "testing"
|
||||
"time"
|
||||
|
||||
lib "git.sr.ht/~cco/go-scopes"
|
||||
"git.sr.ht/~cco/go-scopes/common/testing"
|
||||
"git.sr.ht/~cco/go-scopes/core/message"
|
||||
sql "git.sr.ht/~cco/go-scopes/storage"
|
||||
"git.sr.ht/~cco/go-scopes/storage/db/pgsql"
|
||||
_ "git.sr.ht/~cco/go-scopes/storage/db/sqlite"
|
||||
msgstore "git.sr.ht/~cco/go-scopes/storage/message"
|
||||
"git.sr.ht/~cco/go-scopes/storage/message"
|
||||
"git.sr.ht/~cco/go-scopes/storage/tracking"
|
||||
"git.sr.ht/~cco/go-scopes/tests/etc"
|
||||
)
|
||||
|
@ -71,23 +70,30 @@ func TrackingTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {
|
|||
cont.CreateTable()
|
||||
track := cont.New(lib.StrSlice{"t01", "john"}, lib.Map{})
|
||||
t.AssertEqual(track.TrackId(), lib.Ident(1))
|
||||
fmt.Printf("%+v\n", track.TimeStamp())
|
||||
t.AssertEqual(track.TimeStamp().Year(), time.Now().Year())
|
||||
//fmt.Printf("%+v\n", track.TimeStamp())
|
||||
}
|
||||
|
||||
func MessageTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {
|
||||
msg := message.SimpleMessage("data")
|
||||
msgstore.StoreDB(db, msg)
|
||||
//msg := message.SimpleMessage("data")
|
||||
//msgstore.StoreDB(db, msg)
|
||||
cont := message.Messages(db)
|
||||
cont.CreateTable()
|
||||
//msg := cont.New(lib.StrSlice("", "data"), lib.Map{})
|
||||
//t.AssertEqual(msg.TrackId(), lib.Ident(1))
|
||||
}
|
||||
|
||||
func resetSqlite(db *sql.Storage) {
|
||||
db.DropTable("test")
|
||||
db.DropTable("tracks")
|
||||
db.DropTable("messages")
|
||||
db.Exec(sqlite_create_table)
|
||||
}
|
||||
|
||||
func resetPgsql(db *sql.Storage) {
|
||||
db.DropTable("test")
|
||||
db.DropTable("testing.tracks")
|
||||
db.DropTable("testing.messages")
|
||||
db.Exec(pgsql_create_table)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue