make track definition private

This commit is contained in:
Helmut Merz 2024-05-02 11:47:53 +02:00
parent 12dbfe17ab
commit 802ee6a4a6
2 changed files with 42 additions and 32 deletions

View file

@ -7,14 +7,14 @@ import (
) )
type message struct { type message struct {
*tracking.Track *tracking.BaseTrack
} }
func Message(tr *tracking.Track) tracking.Adapted { func Message(tr *tracking.BaseTrack) tracking.Adapted {
return &message{tr} return &message{tr}
} }
func MakeMessage(c *tracking.Container, h ...string) *tracking.Track { func MakeMessage(c *tracking.Container, h ...string) *tracking.BaseTrack {
h = append(h, "") // make sure at least domain is there h = append(h, "") // make sure at least domain is there
if h[0] == "" { if h[0] == "" {
h[0] = "scopes" h[0] = "scopes"
@ -22,6 +22,10 @@ func MakeMessage(c *tracking.Container, h ...string) *tracking.Track {
return tracking.MakeTrack(c, h...).SetAdapterFactory(Message) return tracking.MakeTrack(c, h...).SetAdapterFactory(Message)
} }
func (msg *message) Base() *tracking.BaseTrack {
return msg.BaseTrack
}
func (msg *message) Domain() string { func (msg *message) Domain() string {
return msg.Head()["domain"] return msg.Head()["domain"]
} }

View file

@ -17,14 +17,14 @@ import (
) )
type ContFactory func(*sql.Storage) *Container type ContFactory func(*sql.Storage) *Container
type ItemFactory func(*Container, ...string) *Track type ItemFactory func(*Container, ...string) *track
type Adapted interface{} type Adapted interface{}
type AdapterFactory func(*Track) Adapted type AdapterFactory func(*track) Adapted
// basic track implementation // basic track implementation
type Track struct { type track struct {
trackId lib.Ident trackId lib.Ident
head lib.StrMap head lib.StrMap
timeStamp *time.Time timeStamp *time.Time
@ -33,42 +33,48 @@ type Track struct {
adapter AdapterFactory adapter AdapterFactory
} }
func MakeTrack(cont *Container, h ...string) *Track { type BaseTrack = track
tr := Track{
func MakeTrack(cont *Container, h ...string) *track {
tr := track{
head: lib.StrMap{}, head: lib.StrMap{},
data: lib.Map{}, data: lib.Map{},
container: cont, container: cont,
adapter: func(tr *Track) Adapted { return tr }, adapter: func(tr *track) Adapted { return tr },
} }
tr.SetHead(h...) tr.SetHead(h...)
return &tr return &tr
} }
func (tr *Track) TrackId() lib.Ident { func (tr *track) Base() *BaseTrack {
return tr
}
func (tr *track) TrackId() lib.Ident {
return tr.trackId return tr.trackId
} }
func (tr *Track) Head() lib.StrMap { func (tr *track) Head() lib.StrMap {
return tr.head return tr.head
} }
func (tr *Track) TimeStamp() *time.Time { func (tr *track) TimeStamp() *time.Time {
return tr.timeStamp return tr.timeStamp
} }
func (tr *Track) Data() lib.Map { func (tr *track) Data() lib.Map {
return tr.data return tr.data
} }
func (tr *Track) Container() *Container { func (tr *track) Container() *Container {
return tr.container return tr.container
} }
func (tr *Track) Uid() string { func (tr *track) Uid() string {
return fmt.Sprintf("%s-%d", tr.container.Prefix, tr.trackId) return fmt.Sprintf("%s-%d", tr.container.Prefix, tr.trackId)
} }
func (tr *Track) SetHead(h ...string) { func (tr *track) SetHead(h ...string) {
for i, k := range tr.container.HeadFields { for i, k := range tr.container.HeadFields {
if i >= len(h) { if i >= len(h) {
break break
@ -79,15 +85,15 @@ func (tr *Track) SetHead(h ...string) {
} }
} }
func (tr *Track) SetTimeStamp(ts *time.Time) { func (tr *track) SetTimeStamp(ts *time.Time) {
tr.timeStamp = ts tr.timeStamp = ts
} }
func (tr *Track) SetData(data lib.Map) { func (tr *track) SetData(data lib.Map) {
tr.data = data tr.data = data
} }
func (tr *Track) ScanP(rows *sql.Rows) error { func (tr *track) ScanP(rows *sql.Rows) error {
tr.head = lib.StrMap{} tr.head = lib.StrMap{}
var d []any var d []any
for range tr.container.HeadFields { for range tr.container.HeadFields {
@ -111,12 +117,12 @@ func (tr *Track) ScanP(rows *sql.Rows) error {
return err return err
} }
func (tr *Track) SetAdapterFactory(af AdapterFactory) *Track { func (tr *track) SetAdapterFactory(af AdapterFactory) *track {
tr.adapter = af tr.adapter = af
return tr return tr
} }
func Adapt[T Adapted](tr *Track) T { func Adapt[T Adapted](tr *track) T {
return tr.adapter(tr).(T) return tr.adapter(tr).(T)
} }
@ -191,7 +197,7 @@ func (spec *querySpec) setup(cont *Container) {
spec.Cont = cont spec.Cont = cont
} }
func (cont *Container) Get(id lib.Ident) *Track { func (cont *Container) Get(id lib.Ident) *track {
quSpec := &querySpec{ quSpec := &querySpec{
Qucols: lib.StrSlice{"trackid"}, Qucols: lib.StrSlice{"trackid"},
Quvals: []any{id}, Quvals: []any{id},
@ -199,7 +205,7 @@ func (cont *Container) Get(id lib.Ident) *Track {
return cont.QueryOne(quSpec) return cont.QueryOne(quSpec)
} }
func (cont *Container) QueryLast(hv ...string) *Track { func (cont *Container) QueryLast(hv ...string) *track {
quSpec := &querySpec{ quSpec := &querySpec{
Headvals: hv, Headvals: hv,
Limit: 1, Limit: 1,
@ -208,8 +214,8 @@ func (cont *Container) QueryLast(hv ...string) *Track {
return cont.QueryOne(quSpec) return cont.QueryOne(quSpec)
} }
func (cont *Container) QueryOne(quSpec *querySpec) *Track { func (cont *Container) QueryOne(quSpec *querySpec) *track {
var tr *Track var tr *track
proc := func(r *sql.Rows) error { proc := func(r *sql.Rows) error {
tr = cont.ItemFactory(cont) tr = cont.ItemFactory(cont)
return tr.ScanP(r) return tr.ScanP(r)
@ -220,8 +226,8 @@ func (cont *Container) QueryOne(quSpec *querySpec) *Track {
return tr return tr
} }
func (cont *Container) Query(quSpec *querySpec) []*Track { func (cont *Container) Query(quSpec *querySpec) []*track {
var trs []*Track var trs []*track
proc := func(r *sql.Rows) error { proc := func(r *sql.Rows) error {
tr := cont.ItemFactory(cont) tr := cont.ItemFactory(cont)
err := tr.ScanP(r) err := tr.ScanP(r)
@ -236,18 +242,18 @@ func (cont *Container) Query(quSpec *querySpec) []*Track {
return trs return trs
} }
func (cont *Container) NewTrack(h []string, data lib.Map) *Track { func (cont *Container) NewTrack(h []string, data lib.Map) *track {
tr := cont.ItemFactory(cont, h...) tr := cont.ItemFactory(cont, h...)
tr.data = data tr.data = data
cont.Insert(tr) cont.Insert(tr)
return tr return tr
} }
func (cont *Container) Save(tr *Track) *Track { func (cont *Container) Save(tr *track) *track {
return tr return tr
} }
func (cont *Container) Insert(tr *Track) *Track { func (cont *Container) Insert(tr *track) *track {
quSpec := &querySpec{ quSpec := &querySpec{
Scols: append(cont.HeadFields, "Data"), Scols: append(cont.HeadFields, "Data"),
} }
@ -271,7 +277,7 @@ func (cont *Container) Insert(tr *Track) *Track {
return nil return nil
} }
func (cont *Container) Update(tr *Track) *Track { func (cont *Container) Update(tr *track) *track {
if tr.timeStamp == nil { if tr.timeStamp == nil {
ts := time.Now() ts := time.Now()
tr.timeStamp = &ts tr.timeStamp = &ts
@ -333,7 +339,7 @@ func GetContainerDef(p string) *ContDef {
return container_registry[p] return container_registry[p]
} }
func Get(db *sql.Storage, uid string) *Track { func Get(db *sql.Storage, uid string) *track {
parts := strings.Split(uid, "-") parts := strings.Split(uid, "-")
cd := GetContainerDef(parts[0]) cd := GetContainerDef(parts[0])
cont := cd.ContFactory(db) cont := cd.ContFactory(db)