dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/clients/http/notification.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 NotificationClient struct { 25 baseUrl string 26 authInjector interfaces.AuthenticationInjector 27 enableNameFieldEscape bool 28 } 29 30 // NewNotificationClient creates an instance of NotificationClient 31 func NewNotificationClient(baseUrl string, authInjector interfaces.AuthenticationInjector, enableNameFieldEscape bool) interfaces.NotificationClient { 32 return &NotificationClient{ 33 baseUrl: baseUrl, 34 authInjector: authInjector, 35 enableNameFieldEscape: enableNameFieldEscape, 36 } 37 } 38 39 // SendNotification sends new notifications. 40 func (client *NotificationClient) SendNotification(ctx context.Context, reqs []requests.AddNotificationRequest) (res []dtoCommon.BaseWithIdResponse, err errors.EdgeX) { 41 err = utils.PostRequestWithRawData(ctx, &res, client.baseUrl, common.ApiNotificationRoute, nil, reqs, client.authInjector) 42 if err != nil { 43 return res, errors.NewCommonEdgeXWrapper(err) 44 } 45 return res, nil 46 } 47 48 // NotificationById query notification by id. 49 func (client *NotificationClient) NotificationById(ctx context.Context, id string) (res responses.NotificationResponse, err errors.EdgeX) { 50 path := path.Join(common.ApiNotificationRoute, common.Id, id) 51 err = utils.GetRequest(ctx, &res, client.baseUrl, path, nil, client.authInjector) 52 if err != nil { 53 return res, errors.NewCommonEdgeXWrapper(err) 54 } 55 return res, nil 56 } 57 58 // DeleteNotificationById deletes a notification by id. 59 func (client *NotificationClient) DeleteNotificationById(ctx context.Context, id string) (res dtoCommon.BaseResponse, err errors.EdgeX) { 60 path := path.Join(common.ApiNotificationRoute, common.Id, id) 61 err = utils.DeleteRequest(ctx, &res, client.baseUrl, path, client.authInjector) 62 if err != nil { 63 return res, errors.NewCommonEdgeXWrapper(err) 64 } 65 return res, nil 66 } 67 68 // NotificationsByCategory queries notifications with category, offset and limit 69 func (client *NotificationClient) NotificationsByCategory(ctx context.Context, category string, offset int, limit int) (res responses.MultiNotificationsResponse, err errors.EdgeX) { 70 requestPath := path.Join(common.ApiNotificationRoute, common.Category, category) 71 requestParams := url.Values{} 72 requestParams.Set(common.Offset, strconv.Itoa(offset)) 73 requestParams.Set(common.Limit, strconv.Itoa(limit)) 74 err = utils.GetRequest(ctx, &res, client.baseUrl, requestPath, requestParams, client.authInjector) 75 if err != nil { 76 return res, errors.NewCommonEdgeXWrapper(err) 77 } 78 return res, nil 79 } 80 81 // NotificationsByLabel queries notifications with label, offset and limit 82 func (client *NotificationClient) NotificationsByLabel(ctx context.Context, label string, offset int, limit int) (res responses.MultiNotificationsResponse, err errors.EdgeX) { 83 requestPath := path.Join(common.ApiNotificationRoute, common.Label, label) 84 requestParams := url.Values{} 85 requestParams.Set(common.Offset, strconv.Itoa(offset)) 86 requestParams.Set(common.Limit, strconv.Itoa(limit)) 87 err = utils.GetRequest(ctx, &res, client.baseUrl, requestPath, requestParams, client.authInjector) 88 if err != nil { 89 return res, errors.NewCommonEdgeXWrapper(err) 90 } 91 return res, nil 92 } 93 94 // NotificationsByStatus queries notifications with status, offset and limit 95 func (client *NotificationClient) NotificationsByStatus(ctx context.Context, status string, offset int, limit int) (res responses.MultiNotificationsResponse, err errors.EdgeX) { 96 requestPath := path.Join(common.ApiNotificationRoute, common.Status, status) 97 requestParams := url.Values{} 98 requestParams.Set(common.Offset, strconv.Itoa(offset)) 99 requestParams.Set(common.Limit, strconv.Itoa(limit)) 100 err = utils.GetRequest(ctx, &res, client.baseUrl, requestPath, requestParams, client.authInjector) 101 if err != nil { 102 return res, errors.NewCommonEdgeXWrapper(err) 103 } 104 return res, nil 105 } 106 107 // NotificationsByTimeRange query notifications with time range, offset and limit 108 func (client *NotificationClient) NotificationsByTimeRange(ctx context.Context, start int, end int, offset int, limit int) (res responses.MultiNotificationsResponse, err errors.EdgeX) { 109 requestPath := path.Join(common.ApiNotificationRoute, common.Start, strconv.Itoa(start), common.End, strconv.Itoa(end)) 110 requestParams := url.Values{} 111 requestParams.Set(common.Offset, strconv.Itoa(offset)) 112 requestParams.Set(common.Limit, strconv.Itoa(limit)) 113 err = utils.GetRequest(ctx, &res, client.baseUrl, requestPath, requestParams, client.authInjector) 114 if err != nil { 115 return res, errors.NewCommonEdgeXWrapper(err) 116 } 117 return res, nil 118 } 119 120 // NotificationsBySubscriptionName query notifications with subscriptionName, offset and limit 121 func (client *NotificationClient) NotificationsBySubscriptionName(ctx context.Context, subscriptionName string, offset int, limit int) (res responses.MultiNotificationsResponse, err errors.EdgeX) { 122 requestPath := path.Join(common.ApiNotificationRoute, common.Subscription, common.Name, subscriptionName) 123 requestParams := url.Values{} 124 requestParams.Set(common.Offset, strconv.Itoa(offset)) 125 requestParams.Set(common.Limit, strconv.Itoa(limit)) 126 err = utils.GetRequest(ctx, &res, client.baseUrl, requestPath, requestParams, client.authInjector) 127 if err != nil { 128 return res, errors.NewCommonEdgeXWrapper(err) 129 } 130 return res, nil 131 } 132 133 // CleanupNotificationsByAge removes notifications that are older than age. And the corresponding transmissions will also be deleted. 134 // Age is supposed in milliseconds since modified timestamp 135 func (client *NotificationClient) CleanupNotificationsByAge(ctx context.Context, age int) (res dtoCommon.BaseResponse, err errors.EdgeX) { 136 path := path.Join(common.ApiNotificationCleanupRoute, common.Age, strconv.Itoa(age)) 137 err = utils.DeleteRequest(ctx, &res, client.baseUrl, path, client.authInjector) 138 if err != nil { 139 return res, errors.NewCommonEdgeXWrapper(err) 140 } 141 return res, nil 142 } 143 144 // CleanupNotifications removes notifications and the corresponding transmissions. 145 func (client *NotificationClient) CleanupNotifications(ctx context.Context) (res dtoCommon.BaseResponse, err errors.EdgeX) { 146 err = utils.DeleteRequest(ctx, &res, client.baseUrl, common.ApiNotificationCleanupRoute, client.authInjector) 147 if err != nil { 148 return res, errors.NewCommonEdgeXWrapper(err) 149 } 150 return res, nil 151 } 152 153 // DeleteProcessedNotificationsByAge removes processed notifications that are older than age. And the corresponding transmissions will also be deleted. 154 // Age is supposed in milliseconds since modified timestamp 155 // Please notice that this API is only for processed notifications (status = PROCESSED). If the deletion purpose includes each kind of notifications, please refer to cleanup API. 156 func (client *NotificationClient) DeleteProcessedNotificationsByAge(ctx context.Context, age int) (res dtoCommon.BaseResponse, err errors.EdgeX) { 157 path := path.Join(common.ApiNotificationRoute, common.Age, strconv.Itoa(age)) 158 err = utils.DeleteRequest(ctx, &res, client.baseUrl, path, client.authInjector) 159 if err != nil { 160 return res, errors.NewCommonEdgeXWrapper(err) 161 } 162 return res, nil 163 }