Documentation
¶
Overview ¶
Package things contains the domain concept definitions needed to support Mainflux things service functionality.
Index ¶
- Constants
- type Backup
- type Config
- type Group
- type GroupCache
- type GroupMember
- type GroupMembers
- type GroupMembersPage
- type GroupMembersRepository
- type GroupPage
- type GroupRepository
- type Groups
- type Identity
- type Metadata
- type Profile
- type ProfileCache
- type ProfileRepository
- type ProfilesPage
- type PubConfInfo
- type Service
- type Thing
- type ThingAccessReq
- type ThingCache
- type ThingRepository
- type ThingsPage
- type Transformer
- type UserAccessReq
Constants ¶
const ( Viewer = "viewer" Editor = "editor" Admin = "admin" Owner = "owner" )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Backup ¶
type Backup struct {
Things []Thing
Profiles []Profile
Groups []Group
GroupMembers []GroupMember
}
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 ID.
RemoveGroupEntities(context.Context, string) error
// SaveGroupMember stores member's role for given group ID.
SaveGroupMember(context.Context, string, string, string) error
// ViewRole returns a group member role by given groupID and memberID.
ViewRole(context.Context, string, string) (string, error)
// RemoveGroupMember removes a group member from cache.
RemoveGroupMember(context.Context, string, string) error
// GroupMemberships returns the IDs of the groups the member belongs to.
GroupMemberships(context.Context, string) ([]string, error)
}
GroupCache contains group caching interface.
type GroupMember ¶ added in v0.24.0
type GroupMembers ¶
type GroupMembers interface {
// CreateGroupMembers creates members of the group identified by the provided ID.
CreateGroupMembers(ctx context.Context, token string, gms ...GroupMember) error
// ListGroupMembers retrieves a page of members for a group that is identified by the provided ID.
ListGroupMembers(ctx context.Context, token, groupID string, pm apiutil.PageMetadata) (GroupMembersPage, error)
// UpdateGroupMembers updates members of the group identified by the provided ID.
UpdateGroupMembers(ctx context.Context, token string, gms ...GroupMember) error
// RemoveGroupMembers removes members of the group identified by the provided ID.
RemoveGroupMembers(ctx context.Context, token, groupID string, memberIDs ...string) error
}
type GroupMembersPage ¶ added in v0.24.0
type GroupMembersPage struct {
apiutil.PageMetadata
GroupMembers []GroupMember
}
type GroupMembersRepository ¶ added in v0.26.0
type GroupMembersRepository interface {
// Save saves group members.
Save(ctx context.Context, gms ...GroupMember) error
// RetrieveRole retrieves group role by group ID and member ID.
RetrieveRole(ctc context.Context, gp GroupMember) (string, error)
// RetrieveByGroup retrieves page of group members by group ID.
RetrieveByGroup(ctx context.Context, groupID string, pm apiutil.PageMetadata) (GroupMembersPage, error)
// RetrieveAll retrieves all group members. This is used for backup.
RetrieveAll(ctx context.Context) ([]GroupMember, error)
// RetrieveGroupIDsByMember retrieves the IDs of the groups to which the member belongs
RetrieveGroupIDsByMember(ctx context.Context, memberID string) ([]string, error)
// Remove removes group members.
Remove(ctx context.Context, groupID string, memberIDs ...string) error
// Update updates group members.
Update(ctx context.Context, gms ...GroupMember) error
}
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)
// RetrieveAll retrieves all groups.
RetrieveAll(ctx context.Context) ([]Group, error)
// RetrieveIDsByOrgMember retrieves org group IDs the member belongs to
RetrieveIDsByOrgMember(ctx context.Context, orgID, memberID string) ([]string, error)
// RetrieveIDsByOrg retrieves all group IDs by org
RetrieveIDsByOrg(ctx context.Context, orgID string) ([]string, error)
// RetrieveByAdmin retrieves all groups with pagination.
RetrieveByAdmin(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 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
// RetrieveAll retrieves all profiles for all users.
RetrieveAll(ctx context.Context) ([]Profile, error)
// RetrieveByAdmin retrieves all profiles for all users with pagination.
RetrieveByAdmin(ctx context.Context, pm apiutil.PageMetadata) (ProfilesPage, error)
// RetrieveByGroupIDs retrieves the subset of profiles specified by given group ids.
RetrieveByGroupIDs(ctx context.Context, groupIDs []string, pm apiutil.PageMetadata) (ProfilesPage, error)
}
ProfileRepository specifies a profile persistence API.
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)
// 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 members for all users. Only accessible by admin.
Backup(ctx context.Context, token string) (Backup, error)
// Restore adds things, profiles, groups, and groups members from a backup. Only accessible by admin.
Restore(ctx context.Context, token string, backup Backup) error
Groups
GroupMembers
}
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, groupMembers GroupMembersRepository, 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)
// RetrieveByGroupIDs retrieves the subset of things specified by given group ids.
RetrieveByGroupIDs(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)
// Remove removes the things having the provided identifiers, that is owned
// by the specified user.
Remove(ctx context.Context, ids ...string) error
// RetrieveAll retrieves all things for all users.
RetrieveAll(ctx context.Context) ([]Thing, error)
// RetrieveByAdmin retrieves all things for all users with pagination.
RetrieveByAdmin(ctx context.Context, pm apiutil.PageMetadata) (ThingsPage, error)
}
ThingRepository specifies a thing persistence API.
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. |