dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/dtos/requests/deviceservice.go (about) 1 // 2 // Copyright (C) 2020-2023 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 // AddDeviceServiceRequest defines the Request Content for POST DeviceService DTO. 19 type AddDeviceServiceRequest struct { 20 dtoCommon.BaseRequest `json:",inline"` 21 Service dtos.DeviceService `json:"service"` 22 } 23 24 // Validate satisfies the Validator interface 25 func (ds AddDeviceServiceRequest) Validate() error { 26 err := common.Validate(ds) 27 return err 28 } 29 30 // UnmarshalJSON implements the Unmarshaler interface for the AddDeviceServiceRequest type 31 func (ds *AddDeviceServiceRequest) UnmarshalJSON(b []byte) error { 32 var alias struct { 33 dtoCommon.BaseRequest 34 Service dtos.DeviceService 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 *ds = AddDeviceServiceRequest(alias) 41 42 // validate AddDeviceServiceRequest DTO 43 if err := ds.Validate(); err != nil { 44 return err 45 } 46 return nil 47 } 48 49 // AddDeviceServiceReqToDeviceServiceModels transforms the AddDeviceServiceRequest DTO array to the DeviceService model array 50 func AddDeviceServiceReqToDeviceServiceModels(addRequests []AddDeviceServiceRequest) (DeviceServices []models.DeviceService) { 51 for _, req := range addRequests { 52 ds := dtos.ToDeviceServiceModel(req.Service) 53 DeviceServices = append(DeviceServices, ds) 54 } 55 return DeviceServices 56 } 57 58 // UpdateDeviceServiceRequest defines the Request Content for PUT event as pushed DTO. 59 type UpdateDeviceServiceRequest struct { 60 dtoCommon.BaseRequest `json:",inline"` 61 Service dtos.UpdateDeviceService `json:"service"` 62 } 63 64 // Validate satisfies the Validator interface 65 func (ds UpdateDeviceServiceRequest) Validate() error { 66 err := common.Validate(ds) 67 return err 68 } 69 70 // UnmarshalJSON implements the Unmarshaler interface for the UpdateDeviceServiceRequest type 71 func (ds *UpdateDeviceServiceRequest) UnmarshalJSON(b []byte) error { 72 var alias struct { 73 dtoCommon.BaseRequest 74 Service dtos.UpdateDeviceService 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 *ds = UpdateDeviceServiceRequest(alias) 81 82 // validate UpdateDeviceServiceRequest DTO 83 if err := ds.Validate(); err != nil { 84 return err 85 } 86 return nil 87 } 88 89 // ReplaceDeviceServiceModelFieldsWithDTO replace existing DeviceService's fields with DTO patch 90 func ReplaceDeviceServiceModelFieldsWithDTO(ds *models.DeviceService, patch dtos.UpdateDeviceService) { 91 if patch.Description != nil { 92 ds.Description = *patch.Description 93 } 94 if patch.AdminState != nil { 95 ds.AdminState = models.AdminState(*patch.AdminState) 96 } 97 if patch.Labels != nil { 98 ds.Labels = patch.Labels 99 } 100 if patch.BaseAddress != nil { 101 ds.BaseAddress = *patch.BaseAddress 102 } 103 } 104 105 func NewAddDeviceServiceRequest(dto dtos.DeviceService) AddDeviceServiceRequest { 106 return AddDeviceServiceRequest{ 107 BaseRequest: dtoCommon.NewBaseRequest(), 108 Service: dto, 109 } 110 } 111 112 func NewUpdateDeviceServiceRequest(dto dtos.UpdateDeviceService) UpdateDeviceServiceRequest { 113 return UpdateDeviceServiceRequest{ 114 BaseRequest: dtoCommon.NewBaseRequest(), 115 Service: dto, 116 } 117 }