mirror of
https://github.com/mainflux/mainflux.git
synced 2025-04-26 13:48:53 +08:00

* Add attribute map for twin retrieval Signed-off-by: Darko Draskovic <darko.draskovic@gmail.com> * Restructure attributes from map[string] to [] Signed-off-by: Darko Draskovic <darko.draskovic@gmail.com> * Remove RAM attribute map and use mongo aggregation Signed-off-by: Darko Draskovic <darko.draskovic@gmail.com> * Update tests Signed-off-by: Darko Draskovic <darko.draskovic@gmail.com> * Remove attribute map service property Signed-off-by: Darko Draskovic <darko.draskovic@gmail.com>
83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
// Copyright (c) Mainflux
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package twins
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
// Metadata stores arbitrary twin data
|
|
type Metadata map[string]interface{}
|
|
|
|
// Attribute stores individual attribute data
|
|
type Attribute struct {
|
|
Name string `json:"name"`
|
|
Channel string `json:"channel"`
|
|
Subtopic string `json:"subtopic"`
|
|
PersistState bool `json:"persist_state"`
|
|
}
|
|
|
|
// Definition stores entity's attributes
|
|
type Definition struct {
|
|
ID int `json:"id"`
|
|
Created time.Time `json:"created"`
|
|
Attributes []Attribute `json:"attributes"`
|
|
}
|
|
|
|
// Twin represents a Mainflux thing digital twin. Each twin is owned by one thing, and
|
|
// is assigned with the unique identifier.
|
|
type Twin struct {
|
|
Owner string
|
|
ID string
|
|
Name string
|
|
ThingID string
|
|
Created time.Time
|
|
Updated time.Time
|
|
Revision int
|
|
Definitions []Definition
|
|
Metadata Metadata
|
|
}
|
|
|
|
// PageMetadata contains page metadata that helps navigation.
|
|
type PageMetadata struct {
|
|
Total uint64
|
|
Offset uint64
|
|
Limit uint64
|
|
Name string
|
|
}
|
|
|
|
// TwinsPage contains page related metadata as well as a list of twins that
|
|
// belong to this page.
|
|
type TwinsPage struct {
|
|
PageMetadata
|
|
Twins []Twin
|
|
}
|
|
|
|
// TwinRepository specifies a twin persistence API.
|
|
type TwinRepository interface {
|
|
// Save persists the twin
|
|
Save(context.Context, Twin) (string, error)
|
|
|
|
// Update performs an update to the existing twin. A non-nil error is
|
|
// returned to indicate operation failure.
|
|
Update(context.Context, Twin) error
|
|
|
|
// RetrieveByID retrieves the twin having the provided identifier.
|
|
RetrieveByID(ctx context.Context, id string) (Twin, error)
|
|
|
|
// RetrieveByAttribute retrieves twin ids whose definition contains
|
|
// the attribute with given channel and subtopic
|
|
RetrieveByAttribute(ctx context.Context, channel, subtopic string) ([]string, error)
|
|
|
|
// RetrieveAll retrieves the subset of things owned by the specified user.
|
|
RetrieveAll(context.Context, string, uint64, uint64, string, Metadata) (TwinsPage, error)
|
|
|
|
// RetrieveByThing retrieves twin that represents specified thing
|
|
RetrieveByThing(context.Context, string) (Twin, error)
|
|
|
|
// Remove removes the twin having the provided identifier.
|
|
Remove(ctx context.Context, id string) error
|
|
}
|