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  }