transparent use of Track interface OK

This commit is contained in:
Helmut Merz 2024-05-02 13:04:54 +02:00
parent 4db9a95cd7
commit 601ca4715a
2 changed files with 20 additions and 19 deletions

View file

@ -14,12 +14,12 @@ func Message(tr *tracking.BaseTrack) *message {
return &message{tr} return &message{tr}
} }
func MakeMessage(c *tracking.Container, h ...string) *tracking.BaseTrack { func MakeMessage(c *tracking.Container, h ...string) tracking.Track {
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"
} }
return tracking.MakeTrack(c, h...) return Message(tracking.MakeBaseTrack(c, h...))
} }
func (msg *message) Base() *tracking.BaseTrack { func (msg *message) Base() *tracking.BaseTrack {
@ -37,7 +37,7 @@ func Messages(db *sql.Storage) *tracking.Container {
} }
func New(cont *tracking.Container, h ...string) *message { func New(cont *tracking.Container, h ...string) *message {
return Message(cont.NewTrack(h, nil)) return cont.NewTrack(h, nil).(*message)
} }
// message store action handler // message store action handler

View file

@ -17,10 +17,7 @@ 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 AdapterFactory func(*track) Adapted
type Track interface { type Track interface {
TrackId() lib.Ident TrackId() lib.Ident
@ -47,7 +44,7 @@ type track struct {
type BaseTrack = track type BaseTrack = track
func MakeTrack(cont *Container, h ...string) *track { func MakeBaseTrack(cont *Container, h ...string) *track {
tr := track{ tr := track{
head: lib.StrMap{}, head: lib.StrMap{},
data: lib.Map{}, data: lib.Map{},
@ -57,6 +54,10 @@ func MakeTrack(cont *Container, h ...string) *track {
return &tr return &tr
} }
func MakeTrack(cont *Container, h ...string) Track {
return MakeBaseTrack(cont, h...)
}
func (tr *track) Base() *BaseTrack { func (tr *track) Base() *BaseTrack {
return tr return tr
} }
@ -199,7 +200,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},
@ -207,7 +208,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,
@ -216,11 +217,11 @@ 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.Base().ScanP(r)
} }
quSpec.setup(cont) quSpec.setup(cont)
sql := storage.BuildSql(SqlSelect, quSpec) sql := storage.BuildSql(SqlSelect, quSpec)
@ -228,11 +229,11 @@ 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.Base().ScanP(r)
if err == nil { if err == nil {
trs = append(trs, tr) trs = append(trs, tr)
} }
@ -244,9 +245,9 @@ 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.SetData(data)
cont.Insert(tr) cont.Insert(tr)
return tr return tr
} }
@ -343,7 +344,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)