public bool AssociateAssetDevice(AssociateDeviceAssetEvent associateDeviceAsset) { associateDeviceAsset.ReceivedUTC = DateTime.UtcNow; var assetDevice = new DbAssetDevice { fk_AssetUID = associateDeviceAsset.AssetUID, fk_DeviceUID = associateDeviceAsset.DeviceUID, ActionUTC = associateDeviceAsset.ActionUTC.Value, RowUpdatedUTC = associateDeviceAsset.ReceivedUTC }; var kafkaMessageList = new List <KafkaMessage>(); kafkaTopicNames.ForEach(topic => { var kafkaMessage = new KafkaMessage() { Key = associateDeviceAsset.DeviceUID.ToString(), Message = new { AssociateDeviceAssetEvent = associateDeviceAsset }, Topic = topic }; kafkaMessageList.Add(kafkaMessage); }); var actions = new List <Action>(); actions.Add(() => transactions.Upsert(assetDevice)); actions.Add(() => transactions.Publish(kafkaMessageList)); return(transactions.Execute(actions)); }
public IActionResult AssociateDeviceAsset([FromBody] AssociateDeviceAssetEvent associateDeviceAsset) { try { logger.LogInformation($"AssociateDeviceAsset called for Asset {associateDeviceAsset.AssetUID} Device {associateDeviceAsset.DeviceUID}"); var associateDeviceDetail = deviceService.GetAssetDevice(associateDeviceAsset.AssetUID, associateDeviceAsset.DeviceUID); if (associateDeviceDetail != null) { if (associateDeviceDetail.ActionUTC >= associateDeviceAsset.ActionUTC) { return(BadRequest("The AssociateDeviceAsset does not have the latest data to be updated.")); } else { return(BadRequest("The Device is already Associated with this Asset.")); } } //To check any device are dissociated for this asset var associateDevice = deviceService.GetAssociatedDevicesByAsset(associateDeviceAsset.AssetUID); if (associateDevice != null) { if (associateDevice.DeviceStatusID == DeviceStateEnum.Subscribed.GetHashCode()) { logger.LogInformation(string.Format("AssociateDeviceAsset ignored. Already Asset ({0}) associated with Device ({1})" , associateDeviceAsset.AssetUID, associateDevice.DeviceUID)); return(Ok("AssociateDeviceAsset ignored as another device is subscribed already")); } else { var dissociateDeviceAsset = new DissociateDeviceAssetEvent() { AssetUID = new Guid(associateDeviceAsset.AssetUID.ToString()), DeviceUID = associateDevice.DeviceUID, ActionUTC = associateDeviceAsset.ActionUTC.Value.AddMilliseconds(-1), ReceivedUTC = DateTime.UtcNow }; deviceService.DissociateAssetDevice(dissociateDeviceAsset); } } if (deviceService.AssociateAssetDevice(associateDeviceAsset)) { return(Ok()); } else { return(StatusCode((int)HttpStatusCode.InternalServerError, "AssociateDeviceAsset is not published.")); } } catch (Exception ex) { logger.LogError(ex.Message + ex.StackTrace); return(StatusCode((int)HttpStatusCode.InternalServerError, ex.Message)); } }