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  }