dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/clients/http/subscription.go (about)

     1  //
     2  // Copyright (C) 2021 IOTech Ltd
     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  
    15  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/clients/http/utils"
    16  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/clients/interfaces"
    17  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/common"
    18  	dtoCommon "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/common"
    19  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/requests"
    20  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/responses"
    21  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/errors"
    22  )
    23  
    24  type SubscriptionClient struct {
    25  	baseUrl               string
    26  	authInjector          interfaces.AuthenticationInjector
    27  	enableNameFieldEscape bool
    28  }
    29  
    30  // NewSubscriptionClient creates an instance of SubscriptionClient
    31  func NewSubscriptionClient(baseUrl string, authInjector interfaces.AuthenticationInjector, enableNameFieldEscape bool) interfaces.SubscriptionClient {
    32  	return &SubscriptionClient{
    33  		baseUrl:               baseUrl,
    34  		authInjector:          authInjector,
    35  		enableNameFieldEscape: enableNameFieldEscape,
    36  	}
    37  }
    38  
    39  // Add adds new subscriptions.
    40  func (client *SubscriptionClient) Add(ctx context.Context, reqs []requests.AddSubscriptionRequest) (res []dtoCommon.BaseWithIdResponse, err errors.EdgeX) {
    41  	err = utils.PostRequestWithRawData(ctx, &res, client.baseUrl, common.ApiSubscriptionRoute, nil, reqs, client.authInjector)
    42  	if err != nil {
    43  		return res, errors.NewCommonEdgeXWrapper(err)
    44  	}
    45  	return res, nil
    46  }
    47  
    48  // Update updates subscriptions.
    49  func (client *SubscriptionClient) Update(ctx context.Context, reqs []requests.UpdateSubscriptionRequest) (res []dtoCommon.BaseResponse, err errors.EdgeX) {
    50  	err = utils.PatchRequest(ctx, &res, client.baseUrl, common.ApiSubscriptionRoute, nil, reqs, client.authInjector)
    51  	if err != nil {
    52  		return res, errors.NewCommonEdgeXWrapper(err)
    53  	}
    54  	return res, nil
    55  }
    56  
    57  // AllSubscriptions queries subscriptions with offset and limit
    58  func (client *SubscriptionClient) AllSubscriptions(ctx context.Context, offset int, limit int) (res responses.MultiSubscriptionsResponse, err errors.EdgeX) {
    59  	requestParams := url.Values{}
    60  	requestParams.Set(common.Offset, strconv.Itoa(offset))
    61  	requestParams.Set(common.Limit, strconv.Itoa(limit))
    62  	err = utils.GetRequest(ctx, &res, client.baseUrl, common.ApiAllSubscriptionRoute, requestParams, client.authInjector)
    63  	if err != nil {
    64  		return res, errors.NewCommonEdgeXWrapper(err)
    65  	}
    66  	return res, nil
    67  }
    68  
    69  // SubscriptionsByCategory queries subscriptions with category, offset and limit
    70  func (client *SubscriptionClient) SubscriptionsByCategory(ctx context.Context, category string, offset int, limit int) (res responses.MultiSubscriptionsResponse, err errors.EdgeX) {
    71  	requestPath := path.Join(common.ApiSubscriptionRoute, common.Category, category)
    72  	requestParams := url.Values{}
    73  	requestParams.Set(common.Offset, strconv.Itoa(offset))
    74  	requestParams.Set(common.Limit, strconv.Itoa(limit))
    75  	err = utils.GetRequest(ctx, &res, client.baseUrl, requestPath, requestParams, client.authInjector)
    76  	if err != nil {
    77  		return res, errors.NewCommonEdgeXWrapper(err)
    78  	}
    79  	return res, nil
    80  }
    81  
    82  // SubscriptionsByLabel queries subscriptions with label, offset and limit
    83  func (client *SubscriptionClient) SubscriptionsByLabel(ctx context.Context, label string, offset int, limit int) (res responses.MultiSubscriptionsResponse, err errors.EdgeX) {
    84  	requestPath := path.Join(common.ApiSubscriptionRoute, common.Label, label)
    85  	requestParams := url.Values{}
    86  	requestParams.Set(common.Offset, strconv.Itoa(offset))
    87  	requestParams.Set(common.Limit, strconv.Itoa(limit))
    88  	err = utils.GetRequest(ctx, &res, client.baseUrl, requestPath, requestParams, client.authInjector)
    89  	if err != nil {
    90  		return res, errors.NewCommonEdgeXWrapper(err)
    91  	}
    92  	return res, nil
    93  }
    94  
    95  // SubscriptionsByReceiver queries subscriptions with receiver, offset and limit
    96  func (client *SubscriptionClient) SubscriptionsByReceiver(ctx context.Context, receiver string, offset int, limit int) (res responses.MultiSubscriptionsResponse, err errors.EdgeX) {
    97  	requestPath := path.Join(common.ApiSubscriptionRoute, common.Receiver, receiver)
    98  	requestParams := url.Values{}
    99  	requestParams.Set(common.Offset, strconv.Itoa(offset))
   100  	requestParams.Set(common.Limit, strconv.Itoa(limit))
   101  	err = utils.GetRequest(ctx, &res, client.baseUrl, requestPath, requestParams, client.authInjector)
   102  	if err != nil {
   103  		return res, errors.NewCommonEdgeXWrapper(err)
   104  	}
   105  	return res, nil
   106  }
   107  
   108  // SubscriptionByName query subscription by name.
   109  func (client *SubscriptionClient) SubscriptionByName(ctx context.Context, name string) (res responses.SubscriptionResponse, err errors.EdgeX) {
   110  	path := common.NewPathBuilder().EnableNameFieldEscape(client.enableNameFieldEscape).
   111  		SetPath(common.ApiSubscriptionRoute).SetPath(common.Name).SetNameFieldPath(name).BuildPath()
   112  	err = utils.GetRequest(ctx, &res, client.baseUrl, path, nil, client.authInjector)
   113  	if err != nil {
   114  		return res, errors.NewCommonEdgeXWrapper(err)
   115  	}
   116  	return res, nil
   117  }
   118  
   119  // DeleteSubscriptionByName deletes a subscription by name.
   120  func (client *SubscriptionClient) DeleteSubscriptionByName(ctx context.Context, name string) (res dtoCommon.BaseResponse, err errors.EdgeX) {
   121  	path := common.NewPathBuilder().EnableNameFieldEscape(client.enableNameFieldEscape).
   122  		SetPath(common.ApiSubscriptionRoute).SetPath(common.Name).SetNameFieldPath(name).BuildPath()
   123  	err = utils.DeleteRequest(ctx, &res, client.baseUrl, path, client.authInjector)
   124  	if err != nil {
   125  		return res, errors.NewCommonEdgeXWrapper(err)
   126  	}
   127  	return res, nil
   128  }