Documentation
¶
Overview ¶
Package things contains the domain concept definitions needed to support Mainflux things service functionality.
Index ¶
- Constants
- Variables
- type Backup
- type Config
- type Group
- type GroupCache
- type GroupMembership
- type GroupMemberships
- type GroupMembershipsBackup
- type GroupMembershipsPage
- type GroupMembershipsRepository
- type GroupPage
- type GroupRepository
- type Groups
- type GroupsBackup
- type Identity
- type Metadata
- type Profile
- type ProfileCache
- type ProfileRepository
- type ProfilesBackup
- type ProfilesPage
- type PubConfInfo
- type Service
- type Thing
- type ThingAccessReq
- type ThingCache
- type ThingRepository
- type ThingsBackup
- type ThingsPage
- type Transformer
- type UserAccessReq
Constants ¶
const ( Viewer = "viewer" Editor = "editor" Admin = "admin" Owner = "owner" )
Variables ¶
var ( // ErrGroupMembershipExists indicates that membership already exists. ErrGroupMembershipExists = errors.New("group membership already exists") // ErrMissingUserMembership indicates that required user membership was not found. ErrMissingUserMembership = errors.New("user membership not found") )
var (
ErrProfileAssigned = errors.New("profile currently assigned to thing(s)")
)
Functions ¶
This section is empty.
Types ¶
type Backup ¶
type Backup struct {
Things []Thing
Profiles []Profile
Groups []Group
GroupMemberships []GroupMembership
}
type Config ¶ added in v0.24.0
type Config struct {
ContentType string `json:"content_type"`
Write bool `json:"write"`
Transformer Transformer `json:"transformer"`
}
type Group ¶
type Group struct {
ID string
OrgID string
Name string
Description string
Metadata Metadata
CreatedAt time.Time
UpdatedAt time.Time
}
Group represents the group information.
type GroupCache ¶ added in v0.25.0
type GroupCache interface {
// RemoveGroupEntities removes all entities related to the group identified by groupID.
RemoveGroupEntities(context.Context, string) error
// SaveGroupMembership stores role for given groupID and memberID.
SaveGroupMembership(context.Context, string, string, string) error
// ViewRole returns role for given groupID and memberID.
ViewRole(context.Context, string, string) (string, error)
// RemoveGroupMembership removes group membership for given groupID and memberID.
RemoveGroupMembership(context.Context, string, string) error
// RetrieveGroupIDsByMember returns group IDs for given memberID.
RetrieveGroupIDsByMember(context.Context, string) ([]string, error)
}
GroupCache contains group caching interface.
type GroupMembership ¶ added in v0.29.0
type GroupMemberships ¶ added in v0.29.0
type GroupMemberships interface {
// CreateGroupMemberships adds memberships to a group identified by the provided ID.
CreateGroupMemberships(ctx context.Context, token string, gms ...GroupMembership) error
// ListGroupMemberships retrieves a paginated list of group memberships for the given group.
ListGroupMemberships(ctx context.Context, token, groupID string, pm apiutil.PageMetadata) (GroupMembershipsPage, error)
// UpdateGroupMemberships updates roles of a specific group membership.
UpdateGroupMemberships(ctx context.Context, token string, gms ...GroupMembership) error
// RemoveGroupMemberships removes memberships from the given group.
RemoveGroupMemberships(ctx context.Context, token, groupID string, memberIDs ...string) error
}
GroupMemberships defines a service for managing group memberships.
type GroupMembershipsBackup ¶ added in v0.29.0
type GroupMembershipsBackup struct {
GroupMemberships []GroupMembership
}
type GroupMembershipsPage ¶ added in v0.29.0
type GroupMembershipsPage struct {
apiutil.PageMetadata
GroupMemberships []GroupMembership
}
type GroupMembershipsRepository ¶ added in v0.29.0
type GroupMembershipsRepository interface {
// Save persists group memberships.
Save(ctx context.Context, gms ...GroupMembership) error
// RetrieveRole retrieves role of a specific group membership.
RetrieveRole(ctx context.Context, gm GroupMembership) (string, error)
// RetrieveByGroup retrieves a paginated list of group memberships by group ID.
RetrieveByGroup(ctx context.Context, groupID string, pm apiutil.PageMetadata) (GroupMembershipsPage, error)
// BackupAll retrieves all group memberships. Used for backup.
BackupAll(ctx context.Context) ([]GroupMembership, error)
// BackupByGroup retrieves all group memberships by group ID. This is used for backup.
BackupByGroup(ctx context.Context, groupID string) ([]GroupMembership, error)
// RetrieveGroupIDsByMember retrieves IDs of groups where the member belongs.
RetrieveGroupIDsByMember(ctx context.Context, memberID string) ([]string, error)
// Remove removes the provided group memberships.
Remove(ctx context.Context, groupID string, memberIDs ...string) error
// Update updates existing group memberships.
Update(ctx context.Context, gms ...GroupMembership) error
}
GroupMembershipsRepository specifies an interface for managing group memberships in persistence.
type GroupPage ¶
type GroupPage struct {
apiutil.PageMetadata
Groups []Group
}
GroupPage contains page related metadata as well as list of groups that belong to this page.
type GroupRepository ¶
type GroupRepository interface {
// Save group
Save(ctx context.Context, g Group) (Group, error)
// Update a group
Update(ctx context.Context, g Group) (Group, error)
// Remove a groups
Remove(ctx context.Context, groupIDs ...string) error
// RetrieveByID retrieves group by its id
RetrieveByID(ctx context.Context, id string) (Group, error)
// RetrieveByIDs retrieves groups by their ids
RetrieveByIDs(ctx context.Context, groupIDs []string, pm apiutil.PageMetadata) (GroupPage, error)
// BackupAll retrieves all groups.
BackupAll(ctx context.Context) ([]Group, error)
// BackupByOrg retrieves all groups by organization ID.
BackupByOrg(ctx context.Context, orgID string) ([]Group, error)
// RetrieveIDsByOrgMembership retrieves group IDs by org membership
RetrieveIDsByOrgMembership(ctx context.Context, orgID, memberID string) ([]string, error)
// RetrieveIDsByOrg retrieves all group IDs by org
RetrieveIDsByOrg(ctx context.Context, orgID string) ([]string, error)
// RetrieveAll retrieves all groups with pagination.
RetrieveAll(ctx context.Context, pm apiutil.PageMetadata) (GroupPage, error)
}
GroupRepository specifies a group persistence API.
type Groups ¶
type Groups interface {
// CreateGroups adds groups to the user identified by the provided key.
CreateGroups(ctx context.Context, token string, groups ...Group) ([]Group, error)
// UpdateGroup updates the group identified by the provided ID.
UpdateGroup(ctx context.Context, token string, g Group) (Group, error)
// ViewGroup retrieves data about the group identified by ID.
ViewGroup(ctx context.Context, token, id string) (Group, error)
// ListGroups retrieves page of all groups.
ListGroups(ctx context.Context, token string, pm apiutil.PageMetadata) (GroupPage, error)
// ListGroupsByOrg retrieves page of groups that are assigned to an org identified by ID.
ListGroupsByOrg(ctx context.Context, token, orgID string, pm apiutil.PageMetadata) (GroupPage, error)
// ListThingsByGroup retrieves page of things that are assigned to a group identified by ID.
ListThingsByGroup(ctx context.Context, token, groupID string, pm apiutil.PageMetadata) (ThingsPage, error)
// ListProfilesByGroup retrieves page of profiles that are assigned to a group identified by ID.
ListProfilesByGroup(ctx context.Context, token, groupID string, pm apiutil.PageMetadata) (ProfilesPage, error)
// ViewGroupByThing retrieves group that thing belongs to.
ViewGroupByThing(ctx context.Context, token, thingID string) (Group, error)
// RemoveGroups removes the groups identified with the provided IDs.
RemoveGroups(ctx context.Context, token string, ids ...string) error
// ViewGroupByProfile retrieves group that profile belongs to.
ViewGroupByProfile(ctx context.Context, token, profileID string) (Group, error)
}
type GroupsBackup ¶ added in v0.29.0
type GroupsBackup struct {
Groups []Group
}
type Metadata ¶
type Metadata map[string]interface{}
Metadata to be used for Mainflux thing or profile for customized describing of particular thing or profile.
type Profile ¶
type Profile struct {
ID string
GroupID string
Name string
Config map[string]interface{}
Metadata map[string]interface{}
}
Profile represents a Mainflux "communication group". This group contains the things that can exchange messages between each other.
type ProfileCache ¶ added in v0.24.0
type ProfileCache interface {
// SaveGroup stores group ID by given profile ID.
SaveGroup(context.Context, string, string) error
// RemoveGroup removes group ID by given profile ID.
RemoveGroup(context.Context, string) error
// ViewGroup returns group ID by given profile ID.
ViewGroup(context.Context, string) (string, error)
}
ProfileCache contains profile caching interface.
type ProfileRepository ¶ added in v0.24.0
type ProfileRepository interface {
// Save persists multiple profiles. Profiles are saved using a transaction. If one profile
// fails then none will be saved. Successful operation is indicated by non-nil
// error response.
Save(ctx context.Context, prs ...Profile) ([]Profile, error)
// Update performs an update to the existing profile. A non-nil error is
// returned to indicate operation failure.
Update(ctx context.Context, c Profile) error
// RetrieveByID retrieves the profile having the provided identifier, that is owned
// by the specified user.
RetrieveByID(ctx context.Context, id string) (Profile, error)
// RetrieveByThing retrieves the profile connected to the given thing id.
RetrieveByThing(ctx context.Context, thID string) (Profile, error)
// Remove removes the profiles having the provided identifiers, that is owned
// by the specified user.
Remove(ctx context.Context, id ...string) error
// BackupAll retrieves all profiles for all users.
BackupAll(ctx context.Context) ([]Profile, error)
// BackupByGroups retrieves all profiles specified by given group ids.
BackupByGroups(ctx context.Context, groupIDs []string) ([]Profile, error)
// RetrieveAll retrieves all profiles for all users with pagination.
RetrieveAll(ctx context.Context, pm apiutil.PageMetadata) (ProfilesPage, error)
// RetrieveByGroups retrieves the subset of profiles specified by given group ids.
RetrieveByGroups(ctx context.Context, groupIDs []string, pm apiutil.PageMetadata) (ProfilesPage, error)
}
ProfileRepository specifies a profile persistence API.
type ProfilesBackup ¶ added in v0.29.0
type ProfilesBackup struct {
Profiles []Profile
}
type ProfilesPage ¶ added in v0.24.0
type ProfilesPage struct {
apiutil.PageMetadata
Profiles []Profile
}
ProfilesPage contains page related metadata as well as list of profiles that belong to this page.
type PubConfInfo ¶ added in v0.24.0
type Service ¶
type Service interface {
// CreateThings adds things to the user identified by the provided key.
CreateThings(ctx context.Context, token string, things ...Thing) ([]Thing, error)
// UpdateThing updates the thing identified by the provided ID, that
// belongs to the user identified by the provided token.
UpdateThing(ctx context.Context, token string, thing Thing) error
// UpdateThingsMetadata updates the things metadata identified by the provided IDs, that
// belongs to the user identified by the provided token.
UpdateThingsMetadata(ctx context.Context, token string, things ...Thing) error
// UpdateKey updates key value of the existing thing. A non-nil error is
// returned to indicate operation failure.
UpdateKey(ctx context.Context, token, id, key string) error
// ViewThing retrieves data about the thing identified with the provided
// ID, that belongs to the user identified by the provided key.
ViewThing(ctx context.Context, token, id string) (Thing, error)
// ListThings retrieves data about subset of things that belongs to the
// user identified by the provided key.
ListThings(ctx context.Context, token string, pm apiutil.PageMetadata) (ThingsPage, error)
// ListThingsByOrg retrieves page of things that belong to an org identified by ID.
ListThingsByOrg(ctx context.Context, token string, orgID string, pm apiutil.PageMetadata) (ThingsPage, error)
// ListThingsByProfile retrieves data about subset of things that are
// connected or not connected to specified profile and belong to the user identified by
// the provided key.
ListThingsByProfile(ctx context.Context, token, prID string, pm apiutil.PageMetadata) (ThingsPage, error)
// BackupThingsByGroup retrieves all things for given group ID.
BackupThingsByGroup(ctx context.Context, token string, groupID string) (ThingsBackup, error)
// RestoreThingsByGroup adds all things for a given group ID from a backup.
RestoreThingsByGroup(ctx context.Context, token string, groupID string, backup ThingsBackup) error
// BackupThingsByOrg retrieves all things for given org ID.
BackupThingsByOrg(ctx context.Context, token string, orgID string) (ThingsBackup, error)
// RestoreThingsByOrg adds all things for a given org ID from a backup.
RestoreThingsByOrg(ctx context.Context, token string, orgID string, backup ThingsBackup) error
// RemoveThings removes the things identified with the provided IDs, that
// belongs to the user identified by the provided key.
RemoveThings(ctx context.Context, token string, id ...string) error
// CreateProfiles adds profiles to the user identified by the provided key.
CreateProfiles(ctx context.Context, token string, profiles ...Profile) ([]Profile, error)
// UpdateProfile updates the profile identified by the provided ID, that
// belongs to the user identified by the provided key.
UpdateProfile(ctx context.Context, token string, profile Profile) error
// ViewProfile retrieves data about the profile identified by the provided
// ID, that belongs to the user identified by the provided key.
ViewProfile(ctx context.Context, token, id string) (Profile, error)
// ListProfiles retrieves data about subset of profiles that belongs to the
// user identified by the provided key.
ListProfiles(ctx context.Context, token string, pm apiutil.PageMetadata) (ProfilesPage, error)
// ListProfilesByOrg retrieves page of profiles that belong to an org identified by ID.
ListProfilesByOrg(ctx context.Context, token string, orgID string, pm apiutil.PageMetadata) (ProfilesPage, error)
// ViewProfileByThing retrieves data about profile that have
// specified thing connected or not connected to it and belong to the user identified by
// the provided key.
ViewProfileByThing(ctx context.Context, token, thID string) (Profile, error)
// ViewMetadataByKey retrieves metadata about the thing identified by the given key.
ViewMetadataByKey(ctx context.Context, thingKey string) (Metadata, error)
// RemoveProfiles removes the things identified by the provided IDs, that
// belongs to the user identified by the provided key.
RemoveProfiles(ctx context.Context, token string, ids ...string) error
// GetPubConfByKey determines whether the profile can be accessed using the
// provided key and returns thing's id if access is allowed.
GetPubConfByKey(ctx context.Context, key string) (PubConfInfo, error)
// GetConfigByThingID returns profile config for given thing ID.
GetConfigByThingID(ctx context.Context, thingID string) (map[string]interface{}, error)
// CanUserAccessThing determines whether a user has access to a thing.
CanUserAccessThing(ctx context.Context, req UserAccessReq) error
// CanUserAccessProfile determines whether a user has access to a profile.
CanUserAccessProfile(ctx context.Context, req UserAccessReq) error
// CanUserAccessGroup determines whether a user has access to a group.
CanUserAccessGroup(ctx context.Context, req UserAccessReq) error
// CanThingAccessGroup determines whether a given thing has access to a group with a key.
CanThingAccessGroup(ctx context.Context, req ThingAccessReq) error
// Identify returns thing ID for given thing key.
Identify(ctx context.Context, key string) (string, error)
// GetGroupIDByThingID returns a thing's group ID for given thing ID.
GetGroupIDByThingID(ctx context.Context, thingID string) (string, error)
// GetGroupIDByProfileID returns a profile's group ID for given profile ID.
GetGroupIDByProfileID(ctx context.Context, profileID string) (string, error)
// GetProfileIDByThingID returns a thing's profile ID for given thing ID.
GetProfileIDByThingID(ctx context.Context, thingID string) (string, error)
// Backup retrieves all things, profiles, groups, and groups memberships for all users. Only accessible by admin.
Backup(ctx context.Context, token string) (Backup, error)
// BackupGroupsByOrg retrieves all groups for given org ID.
BackupGroupsByOrg(ctx context.Context, token string, orgID string) (GroupsBackup, error)
// RestoreGroupsByOrg adds all groups for given org ID from a backup.
RestoreGroupsByOrg(ctx context.Context, token string, orgID string, backup GroupsBackup) error
// BackupGroupMemberships retrieves all group memberships for given group ID.
BackupGroupMemberships(ctx context.Context, token string, groupID string) (GroupMembershipsBackup, error)
// RestoreGroupMemberships adds all group memberships for given group ID from a backup.
RestoreGroupMemberships(ctx context.Context, token string, groupID string, backup GroupMembershipsBackup) error
// BackupProfilesByOrg retrieves all profiles for given org ID.
BackupProfilesByOrg(ctx context.Context, token string, orgID string) (ProfilesBackup, error)
// RestoreProfilesByOrg adds all profiles for given org ID from a backup.
RestoreProfilesByOrg(ctx context.Context, token string, orgID string, backup ProfilesBackup) error
// BackupProfilesByGroup retrieves all profiles for given group ID.
BackupProfilesByGroup(ctx context.Context, token string, groupID string) (ProfilesBackup, error)
// RestoreProfilesByGroup adds all profiles for given group ID from a backup.
RestoreProfilesByGroup(ctx context.Context, token string, groupID string, backup ProfilesBackup) error
// Restore adds things, profiles, groups, and groups memberships from a backup. Only accessible by admin.
Restore(ctx context.Context, token string, backup Backup) error
Groups
GroupMemberships
}
Service specifies an API that must be fullfiled by the domain service implementation, and all of its decorators (e.g. logging & metrics).
func New ¶
func New(auth protomfx.AuthServiceClient, users protomfx.UsersServiceClient, things ThingRepository, profiles ProfileRepository, groups GroupRepository, groupMemberships GroupMembershipsRepository, pcache ProfileCache, tcache ThingCache, gcache GroupCache, idp uuid.IDProvider) Service
New instantiates the things service implementation.
type Thing ¶
type Thing struct {
ID string
GroupID string
ProfileID string
Name string
Key string
Metadata Metadata
}
Thing represents a Mainflux thing. Each thing is owned by one user, and it is assigned with the unique identifier and (temporary) access key.
type ThingAccessReq ¶ added in v0.25.0
type ThingCache ¶
type ThingCache interface {
// Save stores pair thing key, thing id.
Save(context.Context, string, string) error
// ID returns thing ID for given key.
ID(context.Context, string) (string, error)
// Remove removes thing from cache.
Remove(context.Context, string) error
// SaveGroup stores group ID by given thing ID.
SaveGroup(context.Context, string, string) error
// ViewGroup returns group ID by given thing ID.
ViewGroup(context.Context, string) (string, error)
// RemoveGroup removes group ID by given thing ID.
RemoveGroup(context.Context, string) error
}
ThingCache contains thing caching interface.
type ThingRepository ¶
type ThingRepository interface {
// Save persists multiple things. Things are saved using a transaction. If one thing
// fails then none will be saved. Successful operation is indicated by non-nil
// error response.
Save(ctx context.Context, ths ...Thing) ([]Thing, error)
// Update performs an update to the existing thing. A non-nil error is
// returned to indicate operation failure.
Update(ctx context.Context, t Thing) error
// UpdateKey updates key value of the existing thing. A non-nil error is
// returned to indicate operation failure.
UpdateKey(ctx context.Context, id, key string) error
// RetrieveByID retrieves the thing having the provided identifier, that is owned
// by the specified user.
RetrieveByID(ctx context.Context, id string) (Thing, error)
// RetrieveByKey returns thing ID for given thing key.
RetrieveByKey(ctx context.Context, key string) (string, error)
// RetrieveByGroups retrieves the subset of things specified by given group ids.
RetrieveByGroups(ctx context.Context, groupIDs []string, pm apiutil.PageMetadata) (ThingsPage, error)
// RetrieveByProfile retrieves the subset of things assigned to the specified profile.
RetrieveByProfile(ctx context.Context, prID string, pm apiutil.PageMetadata) (ThingsPage, error)
// BackupByGroups retrieves all things specified by given group ids.
BackupByGroups(ctx context.Context, groupIDs []string) ([]Thing, error)
// Remove removes the things having the provided identifiers, that is owned
// by the specified user.
Remove(ctx context.Context, ids ...string) error
// BackupAll retrieves all things for all users.
BackupAll(ctx context.Context) ([]Thing, error)
// RetrieveAll retrieves all things for all users with pagination.
RetrieveAll(ctx context.Context, pm apiutil.PageMetadata) (ThingsPage, error)
}
ThingRepository specifies a thing persistence API.
type ThingsBackup ¶ added in v0.29.0
type ThingsBackup struct {
Things []Thing
}
type ThingsPage ¶
type ThingsPage struct {
apiutil.PageMetadata
Things []Thing
}
ThingsPage contains page related metadata as well as list of things that belong to this page.
type Transformer ¶
type UserAccessReq ¶ added in v0.25.0
Directories
¶
| Path | Synopsis |
|---|---|
|
Package api contains API-related concerns: endpoint definitions, middlewares and all resource representations.
|
Package api contains API-related concerns: endpoint definitions, middlewares and all resource representations. |
|
grpc
Package grpc contains implementation of things service gRPC API.
|
Package grpc contains implementation of things service gRPC API. |
|
http
Package http contains implementation of things service HTTP API.
|
Package http contains implementation of things service HTTP API. |
|
Package postgres contains repository implementations using PostgreSQL as the underlying database.
|
Package postgres contains repository implementations using PostgreSQL as the underlying database. |
|
Package redis contains cache implementations using Redis as the underlying database.
|
Package redis contains cache implementations using Redis as the underlying database. |
|
Package standalone contains implementation for auth service in single-user scenario.
|
Package standalone contains implementation for auth service in single-user scenario. |
|
Package tracing contains middlewares that will add spans to existing traces.
|
Package tracing contains middlewares that will add spans to existing traces. |