diff --git a/scopes.go b/scopes.go index 45e9c61..bd46d5a 100644 --- a/scopes.go +++ b/scopes.go @@ -8,6 +8,18 @@ import ( "sync" ) +// elementary types + +type Ident uint + +type Data interface{} + +type Map map[string]Data +type StrMap map[string]string + +type Slice []Data +type StrSlice []string + // services - context type Services map[string]Context @@ -30,12 +42,7 @@ type Context interface { Send(Message) } -// data (payload), message, address - -type Data interface{} - -type Map map[string]Data -type Slice []Data +// payload, message, address types type Payload interface { fmt.Stringer diff --git a/storage/template.go b/storage/template.go index fe13566..7226647 100644 --- a/storage/template.go +++ b/storage/template.go @@ -4,6 +4,7 @@ import ( "strings" "text/template" + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/logging/log" ) @@ -23,7 +24,7 @@ func Template(name, src string) *template.Template { return t } -func BuildSql(t *template.Template, data map[string]any) string { +func BuildSql(t *template.Template, data lib.Map) string { var out strings.Builder err := t.Execute(&out, data) if err != nil { diff --git a/storage/tracking/tracking.go b/storage/tracking/tracking.go index 06e1642..06b0724 100644 --- a/storage/tracking/tracking.go +++ b/storage/tracking/tracking.go @@ -11,18 +11,36 @@ import ( sql "git.sr.ht/~cco/go-scopes/storage" ) +type Track interface { + TrackId() lib.Ident +} + +type BaseTrack = track +type BaseContainer = container + +// basic track implementation + type track struct { - trackId uint - head map[string]string + trackId lib.Ident + head lib.StrMap timeStamp *time.Time - data lib.Data + data lib.Map container *container } -func (tr *track) TrackId() uint { +func SimpleTrack(taskId, userName string, data lib.Map) track { + return track{ + head: lib.StrMap{"taskId": taskId, "userName": userName}, + data: data, + } +} + +func (tr *track) TrackId() lib.Ident { return tr.trackId } +// basic container implementation + type container struct { tableName string headFields []string @@ -30,13 +48,6 @@ type container struct { storage *sql.Storage } -func SimpleTrack(taskId, userName string, data lib.Map) track { - return track{ - head: map[string]string{"taskId": taskId, "userName": userName}, - data: data, - } -} - func SimpleContainer(db *sql.Storage) *container { return &container{ tableName: "tracks", @@ -46,7 +57,7 @@ func SimpleContainer(db *sql.Storage) *container { } } -func (cont *container) Insert(tr *track) uint { +func (cont *container) Insert(tr *track) lib.Ident { var columns []string var values []any for _, k := range cont.headFields { @@ -57,14 +68,14 @@ func (cont *container) Insert(tr *track) uint { b, _ := json.Marshal(tr.data) values = append(values, b) db := cont.storage - data := map[string]interface{}{ + data := lib.Map{ "schema": db.Schema, "tablename": cont.tableName, "columns": columns, } sql := storage.BuildSql(SqlInsert, data) if res := storage.QueryCol[uint](db, sql, values...); res != nil { - trid := res[0] + trid := lib.Ident(res[0]) tr.trackId = trid tr.container = cont return trid @@ -74,7 +85,7 @@ func (cont *container) Insert(tr *track) uint { func (cont *container) CreateTable() *container { db := cont.storage - data := map[string]interface{}{ + data := lib.Map{ "schema": db.Schema, "tablename": cont.tableName, "headFields": cont.headFields, @@ -82,9 +93,7 @@ func (cont *container) CreateTable() *container { "params": db.Params, } sql := storage.BuildSql(SqlCreate, data) - //println(sql) - _, err := db.Exec(sql) - if err == nil { + if _, err := db.Exec(sql); err == nil { return cont } return nil diff --git a/tests/storage_test.go b/tests/storage_test.go index 2f1922a..453bf6c 100644 --- a/tests/storage_test.go +++ b/tests/storage_test.go @@ -70,7 +70,7 @@ func TrackingTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) { cont.CreateTable() track := tracking.SimpleTrack("t01", "john", lib.Map{}) cont.Insert(&track) - t.AssertEqual(track.TrackId(), uint(1)) + t.AssertEqual(track.TrackId(), lib.Ident(1)) } func MessageTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {