dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/dtos/requests/interval.go (about)

     1  //
     2  // Copyright (C) 2021 IOTech Ltd
     3  //
     4  // SPDX-License-Identifier: Apache-2.0
     5  
     6  package requests
     7  
     8  import (
     9  	"encoding/json"
    10  
    11  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/common"
    12  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos"
    13  	dtoCommon "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/common"
    14  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/errors"
    15  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/models"
    16  )
    17  
    18  // AddIntervalRequest defines the Request Content for POST Interval DTO.
    19  type AddIntervalRequest struct {
    20  	dtoCommon.BaseRequest `json:",inline"`
    21  	Interval              dtos.Interval `json:"interval"`
    22  }
    23  
    24  // Validate satisfies the Validator interface
    25  func (request AddIntervalRequest) Validate() error {
    26  	err := common.Validate(request)
    27  	return err
    28  }
    29  
    30  // UnmarshalJSON implements the Unmarshaler interface for the AddIntervalRequest type
    31  func (request *AddIntervalRequest) UnmarshalJSON(b []byte) error {
    32  	var alias struct {
    33  		dtoCommon.BaseRequest
    34  		Interval dtos.Interval
    35  	}
    36  	if err := json.Unmarshal(b, &alias); err != nil {
    37  		return errors.NewCommonEdgeX(errors.KindContractInvalid, "Failed to unmarshal request body as JSON.", err)
    38  	}
    39  
    40  	*request = AddIntervalRequest(alias)
    41  
    42  	// validate AddIntervalRequest DTO
    43  	if err := request.Validate(); err != nil {
    44  		return err
    45  	}
    46  	return nil
    47  }
    48  
    49  // AddIntervalReqToIntervalModels transforms the AddIntervalRequest DTO array to the Interval model array
    50  func AddIntervalReqToIntervalModels(addRequests []AddIntervalRequest) (intervals []models.Interval) {
    51  	for _, req := range addRequests {
    52  		d := dtos.ToIntervalModel(req.Interval)
    53  		intervals = append(intervals, d)
    54  	}
    55  	return intervals
    56  }
    57  
    58  // UpdateIntervalRequest defines the Request Content for PUT event as pushed DTO.
    59  type UpdateIntervalRequest struct {
    60  	dtoCommon.BaseRequest `json:",inline"`
    61  	Interval              dtos.UpdateInterval `json:"interval"`
    62  }
    63  
    64  // Validate satisfies the Validator interface
    65  func (request UpdateIntervalRequest) Validate() error {
    66  	err := common.Validate(request)
    67  	return err
    68  }
    69  
    70  // UnmarshalJSON implements the Unmarshaler interface for the UpdateIntervalRequest type
    71  func (request *UpdateIntervalRequest) UnmarshalJSON(b []byte) error {
    72  	var alias struct {
    73  		dtoCommon.BaseRequest
    74  		Interval dtos.UpdateInterval
    75  	}
    76  	if err := json.Unmarshal(b, &alias); err != nil {
    77  		return errors.NewCommonEdgeX(errors.KindContractInvalid, "Failed to unmarshal request body as JSON.", err)
    78  	}
    79  
    80  	*request = UpdateIntervalRequest(alias)
    81  
    82  	// validate UpdateIntervalRequest DTO
    83  	if err := request.Validate(); err != nil {
    84  		return err
    85  	}
    86  	return nil
    87  }
    88  
    89  // ReplaceIntervalModelFieldsWithDTO replace existing Interval's fields with DTO patch
    90  func ReplaceIntervalModelFieldsWithDTO(interval *models.Interval, patch dtos.UpdateInterval) {
    91  	if patch.Start != nil {
    92  		interval.Start = *patch.Start
    93  	}
    94  	if patch.End != nil {
    95  		interval.End = *patch.End
    96  	}
    97  	if patch.Interval != nil {
    98  		interval.Interval = *patch.Interval
    99  	}
   100  }
   101  
   102  func NewAddIntervalRequest(dto dtos.Interval) AddIntervalRequest {
   103  	return AddIntervalRequest{
   104  		BaseRequest: dtoCommon.NewBaseRequest(),
   105  		Interval:    dto,
   106  	}
   107  }
   108  
   109  func NewUpdateIntervalRequest(dto dtos.UpdateInterval) UpdateIntervalRequest {
   110  	return UpdateIntervalRequest{
   111  		BaseRequest: dtoCommon.NewBaseRequest(),
   112  		Interval:    dto,
   113  	}
   114  }