dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/dtos/requests/devicestatus.go (about) 1 package requests 2 3 import ( 4 "encoding/json" 5 6 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/common" 7 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos" 8 dtoCommon "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/common" 9 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/errors" 10 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/models" 11 ) 12 13 type DeviceStatusRequest struct { 14 dtoCommon.BaseRequest `json:",inline"` 15 Status dtos.DeviceStatusUpdate `json:"status" validate:"required"` // The silent status of the device. 16 } 17 18 func NewDeviceStatusRequest(deviceName string, status dtos.DeviceStatusUpdate) DeviceStatusRequest { 19 return DeviceStatusRequest{ 20 BaseRequest: dtoCommon.NewBaseRequest(), 21 Status: status, 22 } 23 } 24 25 func ReplaceDeviceStatusModelFieldsWithDTO(device *models.DeviceStatus, patch dtos.DeviceStatusUpdate) { 26 if patch.DeviceName != "" { 27 device.DeviceName = patch.DeviceName 28 } 29 if patch.Status != nil { 30 device.Status = *patch.Status 31 } 32 if patch.Origin != nil && device.Status != *patch.Status { 33 device.Origin = *patch.Origin 34 } 35 if patch.LastUpdate != nil { 36 device.LastUpdate = *patch.LastUpdate 37 } 38 if patch.AlarmCount != nil { 39 device.AlarmCount = *patch.AlarmCount 40 } 41 if patch.MaxSeverity != nil { 42 device.MaxSeverity = *patch.MaxSeverity 43 } 44 if patch.Silence != nil { 45 device.Silence = *patch.Silence 46 } 47 48 } 49 50 // type UpdateDeviceStatus struct { 51 // DeviceName string `json:"deviceName"` 52 // /*nil: no update, "": update silenceKind */ 53 // Silence *models.SilenceKind `json:"silence,omitempty"` 54 // Status *models.StatusKind `json:"status,omitempty"` 55 // } 56 57 // func NewDeviceSilenceRequestDTO(deviceName string, silence *models.SilenceKind) DeviceStatusRequest { 58 // // var s interface{} = silence 59 // return DeviceStatusRequest{ 60 // BaseRequest: dtoCommon.BaseRequest{ 61 // Versionable: dtoCommon.Versionable{ApiVersion: common.ApiVersion}, 62 // RequestId: uuid.NewString(), 63 // }, 64 // Status: dtos.DeviceStatusUpdate{ 65 // DeviceName: deviceName, 66 // Silence: dtos.OptionalSilenceKind{Value: silence, HasValue: true}, 67 // }, 68 // } 69 // } 70 71 // Validate satisfies the Validator interface 72 func (a DeviceStatusRequest) Validate() error { 73 if err := common.Validate(a); err != nil { 74 return err 75 } 76 77 return nil 78 } 79 80 func (a *DeviceStatusRequest) UnmarshalJSON(b []byte) error { 81 // To avoid recursively invoke unmarshaler interface, intentionally create a struct to represent DeviceStatusRequestDTO 82 var deviceStatusRequest struct { 83 dtoCommon.BaseRequest 84 Status dtos.DeviceStatusUpdate 85 } 86 if err := json.Unmarshal(b, &deviceStatusRequest); err != nil { 87 return errors.NewCommonEdgeX(errors.KindContractInvalid, "Failed to unmarshal the byte array.", err) 88 } 89 90 *a = DeviceStatusRequest(deviceStatusRequest) 91 92 // validate DeviceStatusRequestDTO DTO 93 if err := a.Validate(); err != nil { 94 return err 95 } 96 97 // Normalize reading's value typ 98 return nil 99 } 100 101 func (a *DeviceStatusRequest) Encode() ([]byte, error) { 102 103 var err error 104 var encodedData []byte 105 106 encodedData, err = json.Marshal(a) 107 if err != nil { 108 return nil, err 109 } 110 111 return encodedData, nil 112 }