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  }