public IActionResult UpdateDeviceProperties([FromBody] UpdateDeviceProperties device) { try { logger.LogInformation($"UpdateDeviceProperties called for Device {device.DeviceSerialNumber}-{device.DeviceType}"); if (device.ModuleType != null || device.MainboardSoftwareVersion != null || device.RadioFirmwarePartNumber != null || device.GatewayFirmwarePartNumber != null || device.DataLinkType != null || device.CellularFirmwarePartnumber != null || device.NetworkFirmwarePartnumber != null || device.SatelliteFirmwarePartnumber != null) { if (!deviceTypesCache.TryGetValue(device.DeviceType, out DbDeviceType deviceType)) { logger.LogWarning($"DeviceType {device.DeviceType} is not exists"); return(BadRequest("Make sure request contains valid DeviceType")); } var deviceUids = deviceService.GetDeviceDetailsBySerialNumberAndType(device.DeviceSerialNumber, device.DeviceType) ?? new List <Guid>(); if (deviceUids != null && deviceUids.Count() > 1) // two devices for same serialnumber { logger.LogWarning($"Two Devices are with same SerailNumber {device.DeviceSerialNumber} & DeviceType {device.DeviceType}"); return(Ok()); } if (!deviceUids.Any()) { return(BadRequest("Device doesn't exist!")); } if (deviceService.UpdateDeviceProperties(device, deviceUids.First())) { return(Ok()); } else { return(BadRequest("No properties to update")); } } else { return(BadRequest("UpdateDeviceProperties should have atleast one data to update")); } } catch (Exception ex) { logger.LogError(ex.Message + ex.StackTrace); return(StatusCode((int)HttpStatusCode.InternalServerError, ex.Message)); } }
public bool UpdateDeviceProperties(UpdateDeviceProperties device, Guid deviceUid) { DbDeviceType deviceType = deviceTypesCache.First(x => string.Equals(x.Key, device.DeviceType, StringComparison.InvariantCultureIgnoreCase)).Value; var currentUTC = DateTime.UtcNow; var devicePayload = new UpdateDevicePayload { ActionUTC = currentUTC, CellularFirmwarePartnumber = device.CellularFirmwarePartnumber, DataLinkType = device.DataLinkType, DeviceSerialNumber = device.DeviceSerialNumber, DeviceType = device.DeviceType, DeviceUID = deviceUid, GatewayFirmwarePartNumber = device.GatewayFirmwarePartNumber, MainboardSoftwareVersion = device.MainboardSoftwareVersion, ModuleType = device.ModuleType, NetworkFirmwarePartnumber = device.NetworkFirmwarePartnumber, RadioFirmwarePartNumber = device.RadioFirmwarePartNumber, ReceivedUTC = device.ReceivedUTC, SatelliteFirmwarePartnumber = device.SatelliteFirmwarePartnumber, Description = device.Description }; var existingDeviceProp = GetExistingDeviceProperties(deviceUid); var existingPersonalities = GetExistingDevicePersonalities(devicePayload.DeviceUID); var devicePersonality = GetDevicePersonalities(devicePayload, existingPersonalities, deviceType); devicePayload = AppendExistingDeviceProperties(devicePayload, existingDeviceProp); devicePayload.OwningCustomerUID = GetExistingOwningCustomerUid(deviceUid); var deviceState = (DeviceStateEnum)Enum.Parse(typeof(DeviceStateEnum), existingDeviceProp.DeviceState, true); devicePayload.ReceivedUTC = DateTime.UtcNow; bool equal = CheckExistingDevicePropertiesForUpdate(devicePayload, deviceState, devicePayload.OwningCustomerUID, existingDeviceProp); if (equal) { logger.LogInformation("No properties to update"); return(false); } else { var kafkaMessageList = new List <KafkaMessage>(); kafkaTopicNames.ForEach(topic => { var kafkaMessage = new KafkaMessage() { Key = deviceUid.ToString(), Message = new { UpdateDeviceEvent = mapper.Map <UpdateDevicePayload, UpdateDeviceEvent>(devicePayload) }, Topic = topic }; kafkaMessageList.Add(kafkaMessage); }); kafkaTopicNamesV2.ForEach(topic => { var kafkaMessage = new KafkaMessage() { Key = deviceUid.ToString(), Message = ToDevicePayloadV2(devicePayload, devicePersonality), Topic = topic }; kafkaMessageList.Add(kafkaMessage); }); var actions = new List <Action>(); var deviceModel = new DbDevice { CellModemIMEI = devicePayload.CellModemIMEI, CellularFirmwarePartnumber = devicePayload.CellularFirmwarePartnumber, DataLinkType = devicePayload.DataLinkType, DeregisteredUTC = devicePayload.DeregisteredUTC, DevicePartNumber = devicePayload.DevicePartNumber, SerialNumber = devicePayload.DeviceSerialNumber, fk_DeviceTypeID = deviceType.DeviceTypeID, DeviceUID = devicePayload.DeviceUID, FirmwarePartNumber = devicePayload.RadioFirmwarePartNumber == null ? devicePayload.FirmwarePartNumber : devicePayload.RadioFirmwarePartNumber, GatewayFirmwarePartNumber = devicePayload.GatewayFirmwarePartNumber, MainboardSoftwareVersion = devicePayload.MainboardSoftwareVersion, ModuleType = devicePayload.ModuleType, NetworkFirmwarePartnumber = devicePayload.NetworkFirmwarePartnumber, SatelliteFirmwarePartnumber = devicePayload.SatelliteFirmwarePartnumber, UpdateUTC = currentUTC, fk_DeviceStatusID = deviceState.GetHashCode() }; actions.Add(() => transactions.Upsert(deviceModel)); actions.Add(() => transactions.Upsert <DbDevicePersonality>(devicePersonality)); actions.Add(() => transactions.Publish(kafkaMessageList)); return(transactions.Execute(actions)); } }