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 }