diff --git a/storage/message/message.go b/storage/message/message.go index a965a38..d26c4f0 100644 --- a/storage/message/message.go +++ b/storage/message/message.go @@ -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 diff --git a/storage/tracking/tracking.go b/storage/tracking/tracking.go index 9f3346b..3d82c26 100644 --- a/storage/tracking/tracking.go +++ b/storage/tracking/tracking.go @@ -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)