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 }