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}
}
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
if h[0] == "" {
h[0] = "scopes"
}
return tracking.MakeTrack(c, h...)
return Message(tracking.MakeBaseTrack(c, h...))
}
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 {
return Message(cont.NewTrack(h, nil))
return cont.NewTrack(h, nil).(*message)
}
// message store action handler

View file

@ -17,10 +17,7 @@ import (
)
type ContFactory func(*sql.Storage) *Container
type ItemFactory func(*Container, ...string) *track
type Adapted interface{}
type AdapterFactory func(*track) Adapted
type ItemFactory func(*Container, ...string) Track
type Track interface {
TrackId() lib.Ident
@ -47,7 +44,7 @@ type track struct {
type BaseTrack = track
func MakeTrack(cont *Container, h ...string) *track {
func MakeBaseTrack(cont *Container, h ...string) *track {
tr := track{
head: lib.StrMap{},
data: lib.Map{},
@ -57,6 +54,10 @@ func MakeTrack(cont *Container, h ...string) *track {
return &tr
}
func MakeTrack(cont *Container, h ...string) Track {
return MakeBaseTrack(cont, h...)
}
func (tr *track) Base() *BaseTrack {
return tr
}
@ -199,7 +200,7 @@ func (spec *querySpec) setup(cont *Container) {
spec.Cont = cont
}
func (cont *Container) Get(id lib.Ident) *track {
func (cont *Container) Get(id lib.Ident) Track {
quSpec := &querySpec{
Qucols: lib.StrSlice{"trackid"},
Quvals: []any{id},
@ -207,7 +208,7 @@ func (cont *Container) Get(id lib.Ident) *track {
return cont.QueryOne(quSpec)
}
func (cont *Container) QueryLast(hv ...string) *track {
func (cont *Container) QueryLast(hv ...string) Track {
quSpec := &querySpec{
Headvals: hv,
Limit: 1,
@ -216,11 +217,11 @@ func (cont *Container) QueryLast(hv ...string) *track {
return cont.QueryOne(quSpec)
}
func (cont *Container) QueryOne(quSpec *querySpec) *track {
var tr *track
func (cont *Container) QueryOne(quSpec *querySpec) Track {
var tr Track
proc := func(r *sql.Rows) error {
tr = cont.ItemFactory(cont)
return tr.ScanP(r)
return tr.Base().ScanP(r)
}
quSpec.setup(cont)
sql := storage.BuildSql(SqlSelect, quSpec)
@ -228,11 +229,11 @@ func (cont *Container) QueryOne(quSpec *querySpec) *track {
return tr
}
func (cont *Container) Query(quSpec *querySpec) []*track {
var trs []*track
func (cont *Container) Query(quSpec *querySpec) []Track {
var trs []Track
proc := func(r *sql.Rows) error {
tr := cont.ItemFactory(cont)
err := tr.ScanP(r)
err := tr.Base().ScanP(r)
if err == nil {
trs = append(trs, tr)
}
@ -244,9 +245,9 @@ func (cont *Container) Query(quSpec *querySpec) []*track {
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.data = data
tr.SetData(data)
cont.Insert(tr)
return tr
}
@ -343,7 +344,7 @@ func GetContainerDef(p string) *ContDef {
return container_registry[p]
}
func Get(db *sql.Storage, uid string) *track {
func Get(db *sql.Storage, uid string) Track {
parts := strings.Split(uid, "-")
cd := GetContainerDef(parts[0])
cont := cd.ContFactory(db)