dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/clients/http/device.go (about) 1 // 2 // Copyright (C) 2020-2021 Unknown author 3 // Copyright (C) 2023 Intel Corporation 4 // 5 // SPDX-License-Identifier: Apache-2.0 6 7 package http 8 9 import ( 10 "context" 11 "net/url" 12 "path" 13 "strconv" 14 "strings" 15 16 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/clients/http/utils" 17 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/clients/interfaces" 18 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/common" 19 dtoCommon "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/common" 20 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/requests" 21 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/responses" 22 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/errors" 23 ) 24 25 type DeviceClient struct { 26 baseUrl string 27 authInjector interfaces.AuthenticationInjector 28 enableNameFieldEscape bool 29 } 30 31 // NewDeviceClient creates an instance of DeviceClient 32 func NewDeviceClient(baseUrl string, authInjector interfaces.AuthenticationInjector, enableNameFieldEscape bool) interfaces.DeviceClient { 33 return &DeviceClient{ 34 baseUrl: baseUrl, 35 authInjector: authInjector, 36 enableNameFieldEscape: enableNameFieldEscape, 37 } 38 } 39 40 func (dc DeviceClient) Add(ctx context.Context, reqs []requests.AddDeviceRequest) (res []dtoCommon.BaseWithIdResponse, err errors.EdgeX) { 41 err = utils.PostRequestWithRawData(ctx, &res, dc.baseUrl, common.ApiDeviceRoute, nil, reqs, dc.authInjector) 42 if err != nil { 43 return res, errors.NewCommonEdgeXWrapper(err) 44 } 45 return res, nil 46 } 47 48 func (dc DeviceClient) Update(ctx context.Context, reqs []requests.UpdateDeviceRequest) (res []dtoCommon.BaseResponse, err errors.EdgeX) { 49 err = utils.PatchRequest(ctx, &res, dc.baseUrl, common.ApiDeviceRoute, nil, reqs, dc.authInjector) 50 if err != nil { 51 return res, errors.NewCommonEdgeXWrapper(err) 52 } 53 return res, nil 54 } 55 56 func (dc DeviceClient) AllDevices(ctx context.Context, labels []string, offset int, limit int) (res responses.MultiDevicesResponse, err errors.EdgeX) { 57 requestParams := url.Values{} 58 if len(labels) > 0 { 59 requestParams.Set(common.Labels, strings.Join(labels, common.CommaSeparator)) 60 } 61 requestParams.Set(common.Offset, strconv.Itoa(offset)) 62 requestParams.Set(common.Limit, strconv.Itoa(limit)) 63 err = utils.GetRequest(ctx, &res, dc.baseUrl, common.ApiAllDeviceRoute, requestParams, dc.authInjector) 64 if err != nil { 65 return res, errors.NewCommonEdgeXWrapper(err) 66 } 67 return res, nil 68 } 69 70 func (dc DeviceClient) DeviceNameExists(ctx context.Context, name string) (res dtoCommon.BaseResponse, err errors.EdgeX) { 71 path := common.NewPathBuilder().EnableNameFieldEscape(dc.enableNameFieldEscape). 72 SetPath(common.ApiDeviceRoute).SetPath(common.Check).SetPath(common.Name).SetNameFieldPath(name).BuildPath() 73 err = utils.GetRequest(ctx, &res, dc.baseUrl, path, nil, dc.authInjector) 74 if err != nil { 75 return res, errors.NewCommonEdgeXWrapper(err) 76 } 77 return res, nil 78 } 79 80 func (dc DeviceClient) DeviceByName(ctx context.Context, name string) (res responses.DeviceResponse, err errors.EdgeX) { 81 path := common.NewPathBuilder().EnableNameFieldEscape(dc.enableNameFieldEscape). 82 SetPath(common.ApiDeviceRoute).SetPath(common.Name).SetNameFieldPath(name).BuildPath() 83 err = utils.GetRequest(ctx, &res, dc.baseUrl, path, nil, dc.authInjector) 84 if err != nil { 85 return res, errors.NewCommonEdgeXWrapper(err) 86 } 87 return res, nil 88 } 89 90 func (dc DeviceClient) DeleteDeviceByName(ctx context.Context, name string) (res dtoCommon.BaseResponse, err errors.EdgeX) { 91 path := common.NewPathBuilder().EnableNameFieldEscape(dc.enableNameFieldEscape). 92 SetPath(common.ApiDeviceRoute).SetPath(common.Name).SetNameFieldPath(name).BuildPath() 93 err = utils.DeleteRequest(ctx, &res, dc.baseUrl, path, dc.authInjector) 94 if err != nil { 95 return res, errors.NewCommonEdgeXWrapper(err) 96 } 97 return res, nil 98 } 99 100 func (dc DeviceClient) DevicesByProfileName(ctx context.Context, name string, offset int, limit int) (res responses.MultiDevicesResponse, err errors.EdgeX) { 101 requestPath := common.NewPathBuilder().EnableNameFieldEscape(dc.enableNameFieldEscape). 102 SetPath(common.ApiDeviceRoute).SetPath(common.Profile).SetPath(common.Name).SetNameFieldPath(name).BuildPath() 103 requestParams := url.Values{} 104 requestParams.Set(common.Offset, strconv.Itoa(offset)) 105 requestParams.Set(common.Limit, strconv.Itoa(limit)) 106 err = utils.GetRequest(ctx, &res, dc.baseUrl, requestPath, requestParams, dc.authInjector) 107 if err != nil { 108 return res, errors.NewCommonEdgeXWrapper(err) 109 } 110 return res, nil 111 } 112 113 func (dc DeviceClient) DevicesByServiceName(ctx context.Context, name string, offset int, limit int) (res responses.MultiDevicesResponse, err errors.EdgeX) { 114 requestPath := common.NewPathBuilder().EnableNameFieldEscape(dc.enableNameFieldEscape). 115 SetPath(common.ApiDeviceRoute).SetPath(common.Service).SetPath(common.Name).SetNameFieldPath(name).BuildPath() 116 requestParams := url.Values{} 117 requestParams.Set(common.Offset, strconv.Itoa(offset)) 118 requestParams.Set(common.Limit, strconv.Itoa(limit)) 119 err = utils.GetRequest(ctx, &res, dc.baseUrl, requestPath, requestParams, dc.authInjector) 120 if err != nil { 121 return res, errors.NewCommonEdgeXWrapper(err) 122 } 123 return res, nil 124 } 125 126 func (dc DeviceClient) DevicesByParentDeviceName(ctx context.Context, name string, offset int, limit int) (res responses.MultiLinksResponse, err errors.EdgeX) { 127 requestPath := path.Join(common.ApiDeviceRoute, "links", name) 128 requestParams := url.Values{} 129 requestParams.Set(common.Offset, strconv.Itoa(offset)) 130 requestParams.Set(common.Limit, strconv.Itoa(limit)) 131 err = utils.GetRequest(ctx, &res, dc.baseUrl, requestPath, requestParams, dc.authInjector) 132 if err != nil { 133 return res, errors.NewCommonEdgeXWrapper(err) 134 } 135 return res, nil 136 } 137 138 func (dc DeviceClient) LogicalDeleteDeviceByName(ctx context.Context, name string) (res dtoCommon.BaseResponse, err errors.EdgeX) { 139 panic("unimplemented") 140 } 141 142 func (dc DeviceClient) LogicalRestoreDeviceByName(ctx context.Context, name string) (res dtoCommon.BaseResponse, err errors.EdgeX) { 143 panic("unimplemented") 144 }