mirror of
https://github.com/absmach/magistrala.git
synced 2026-08-07 07:14:46 +00:00
0794c2828e
Signed-off-by: Felix Gateru <felix.gateru@gmail.com>
149 lines
4.4 KiB
Go
149 lines
4.4 KiB
Go
// Copyright (c) Abstract Machines
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package grpc
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
grpcCommonV1 "github.com/absmach/supermq/api/grpc/common/v1"
|
|
grpcDomainsV1 "github.com/absmach/supermq/api/grpc/domains/v1"
|
|
grpcapi "github.com/absmach/supermq/auth/api/grpc"
|
|
"github.com/go-kit/kit/endpoint"
|
|
kitgrpc "github.com/go-kit/kit/transport/grpc"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
const domainsSvcName = "domains.v1.DomainsService"
|
|
|
|
var _ grpcDomainsV1.DomainsServiceClient = (*domainsGrpcClient)(nil)
|
|
|
|
type domainsGrpcClient struct {
|
|
deleteUserFromDomains endpoint.Endpoint
|
|
retrieveStatus endpoint.Endpoint
|
|
retrieveByRoute endpoint.Endpoint
|
|
timeout time.Duration
|
|
}
|
|
|
|
// NewDomainsClient returns new domains gRPC client instance.
|
|
func NewDomainsClient(conn *grpc.ClientConn, timeout time.Duration) grpcDomainsV1.DomainsServiceClient {
|
|
return &domainsGrpcClient{
|
|
deleteUserFromDomains: kitgrpc.NewClient(
|
|
conn,
|
|
domainsSvcName,
|
|
"DeleteUserFromDomains",
|
|
encodeDeleteUserRequest,
|
|
decodeDeleteUserResponse,
|
|
grpcDomainsV1.DeleteUserRes{},
|
|
).Endpoint(),
|
|
retrieveStatus: kitgrpc.NewClient(
|
|
conn,
|
|
domainsSvcName,
|
|
"RetrieveStatus",
|
|
encodeRetrieveStatusRequest,
|
|
decodeRetrieveStatusResponse,
|
|
grpcCommonV1.RetrieveEntityRes{},
|
|
).Endpoint(),
|
|
retrieveByRoute: kitgrpc.NewClient(
|
|
conn,
|
|
domainsSvcName,
|
|
"RetrieveByRoute",
|
|
encodeRetrieveByRouteRequest,
|
|
decodeRetrieveByRouteResponse,
|
|
grpcCommonV1.RetrieveEntityRes{},
|
|
).Endpoint(),
|
|
timeout: timeout,
|
|
}
|
|
}
|
|
|
|
func (client domainsGrpcClient) DeleteUserFromDomains(ctx context.Context, in *grpcDomainsV1.DeleteUserReq, opts ...grpc.CallOption) (*grpcDomainsV1.DeleteUserRes, error) {
|
|
ctx, cancel := context.WithTimeout(ctx, client.timeout)
|
|
defer cancel()
|
|
|
|
res, err := client.deleteUserFromDomains(ctx, deleteUserPoliciesReq{
|
|
ID: in.GetId(),
|
|
})
|
|
if err != nil {
|
|
return &grpcDomainsV1.DeleteUserRes{}, grpcapi.DecodeError(err)
|
|
}
|
|
|
|
dpr := res.(deleteUserRes)
|
|
return &grpcDomainsV1.DeleteUserRes{Deleted: dpr.deleted}, nil
|
|
}
|
|
|
|
func decodeDeleteUserResponse(_ context.Context, grpcRes interface{}) (interface{}, error) {
|
|
res := grpcRes.(*grpcDomainsV1.DeleteUserRes)
|
|
return deleteUserRes{deleted: res.GetDeleted()}, nil
|
|
}
|
|
|
|
func encodeDeleteUserRequest(_ context.Context, grpcReq interface{}) (interface{}, error) {
|
|
req := grpcReq.(deleteUserPoliciesReq)
|
|
return &grpcDomainsV1.DeleteUserReq{
|
|
Id: req.ID,
|
|
}, nil
|
|
}
|
|
|
|
func (client domainsGrpcClient) RetrieveStatus(ctx context.Context, in *grpcCommonV1.RetrieveEntityReq, opts ...grpc.CallOption) (*grpcCommonV1.RetrieveEntityRes, error) {
|
|
ctx, cancel := context.WithTimeout(ctx, client.timeout)
|
|
defer cancel()
|
|
|
|
res, err := client.retrieveStatus(ctx, retrieveStatusReq{
|
|
ID: in.GetId(),
|
|
})
|
|
if err != nil {
|
|
return &grpcCommonV1.RetrieveEntityRes{}, grpcapi.DecodeError(err)
|
|
}
|
|
|
|
rdsr := res.(retrieveStatusRes)
|
|
return &grpcCommonV1.RetrieveEntityRes{
|
|
Entity: &grpcCommonV1.EntityBasic{
|
|
Status: uint32(rdsr.status),
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func decodeRetrieveStatusResponse(_ context.Context, grpcRes interface{}) (interface{}, error) {
|
|
res := grpcRes.(*grpcCommonV1.RetrieveEntityRes)
|
|
return retrieveStatusRes{status: uint8(res.Entity.GetStatus())}, nil
|
|
}
|
|
|
|
func encodeRetrieveStatusRequest(_ context.Context, grpcReq interface{}) (interface{}, error) {
|
|
req := grpcReq.(retrieveStatusReq)
|
|
return &grpcCommonV1.RetrieveEntityReq{
|
|
Id: req.ID,
|
|
}, nil
|
|
}
|
|
|
|
func (client domainsGrpcClient) RetrieveByRoute(ctx context.Context, in *grpcCommonV1.RetrieveByRouteReq, opts ...grpc.CallOption) (*grpcCommonV1.RetrieveEntityRes, error) {
|
|
ctx, cancel := context.WithTimeout(ctx, client.timeout)
|
|
defer cancel()
|
|
|
|
res, err := client.retrieveByRoute(ctx, retrieveByRouteReq{
|
|
Route: in.GetRoute(),
|
|
})
|
|
if err != nil {
|
|
return &grpcCommonV1.RetrieveEntityRes{}, grpcapi.DecodeError(err)
|
|
}
|
|
|
|
rbr := res.(retrieveEntityRes)
|
|
return &grpcCommonV1.RetrieveEntityRes{
|
|
Entity: &grpcCommonV1.EntityBasic{
|
|
Id: rbr.id,
|
|
Status: uint32(rbr.status),
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func decodeRetrieveByRouteResponse(_ context.Context, grpcRes interface{}) (interface{}, error) {
|
|
res := grpcRes.(*grpcCommonV1.RetrieveEntityRes)
|
|
return retrieveEntityRes{id: res.Entity.GetId(), status: uint8(res.Entity.GetStatus())}, nil
|
|
}
|
|
|
|
func encodeRetrieveByRouteRequest(_ context.Context, grpcReq interface{}) (interface{}, error) {
|
|
req := grpcReq.(retrieveByRouteReq)
|
|
return &grpcCommonV1.RetrieveByRouteReq{
|
|
Route: req.Route,
|
|
}, nil
|
|
}
|