mirror of
https://github.com/mainflux/mainflux.git
synced 2025-04-27 13:48:49 +08:00
97 lines
2.9 KiB
Go
97 lines
2.9 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"`
|
|||
![]()
Fix twins update revision counter (#1011)
Signed-off-by: Darko Draskovic <darko.draskovic@gmail.com>
|
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"`
|
|||
Delta int64 `json:"delta"`
|
|||
}
|
|||
|
|||
// Twin is a Mainflux data system representation. Each twin is owned
|
|||
// by a single user, and is assigned with the unique identifier.
|
|||
type Twin struct {
|
|||
Owner string
|
|||
ID string
|
|||
Name 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
|
|||
}
|
|||
|
|||
// Page contains page related metadata as well as a list of twins that
|
|||
// belong to this page.
|
|||
type Page struct {
|
|||
PageMetadata
|
|||
Twins []Twin
|
|||
}
|
|||
|
|||
// TwinRepository specifies a twin persistence API.
|
|||
type TwinRepository interface {
|
|||
// Save persists the twin
|
|||
Save(ctx context.Context, twin Twin) (string, error)
|
|||
|
|||
// Update performs an update to the existing twin. A non-nil error is
|
|||
// returned to indicate operation failure.
|
|||
Update(ctx context.Context, twin Twin) error
|
|||
|
|||
// RetrieveByID retrieves the twin having the provided identifier.
|
|||
RetrieveByID(ctx context.Context, twinID 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 twins owned by the specified user.
|
|||
RetrieveAll(ctx context.Context, owner string, offset, limit uint64, name string, metadata Metadata) (Page, error)
|
|||
|
|||
// Remove removes the twin having the provided identifier.
|
|||
Remove(ctx context.Context, twinID string) error
|
|||
}
|
|||
|
|||
// TwinCache contains twin caching interface.
|
|||
type TwinCache interface {
|
|||
// Save stores twin ID as element of channel-subtopic keyed set and vice versa.
|
|||
Save(ctx context.Context, twin Twin) error
|
|||
|
|||
// SaveIDs stores twin IDs as elements of channel-subtopic keyed set and vice versa.
|
|||
SaveIDs(ctx context.Context, channel, subtopic string, twinIDs []string) error
|
|||
|
|||
// Update updates update twin id and channel-subtopic attributes mapping
|
|||
Update(ctx context.Context, twin Twin) error
|
|||
|
|||
// ID returns twin IDs for given attribute.
|
|||
IDs(ctx context.Context, channel, subtopic string) ([]string, error)
|
|||
|
|||
// Removes twin from cache based on twin id.
|
|||
Remove(ctx context.Context, twinID string) error
|
|||
}
|