public bool CreateAssetSubscriptions(List <CreateAssetSubscriptionEvent> createSubscriptionList) { SubscriptionSource subscriptionSource; var kafkaMessageList = new List <KafkaMessage>(); var currentUtc = DateTime.UtcNow; var subscriptionList = new List <DbAssetSubscription>(); foreach (var createSubscription in createSubscriptionList) { if (createSubscription.SubscriptionType == null || !_assetSubscriptionTypeCache.ContainsKey(createSubscription.SubscriptionType)) { throw new Exception("Invalid Asset Subscription Type for the SubscriptionUID:- " + createSubscription.SubscriptionUID); } Enum.TryParse(createSubscription.Source, true, out subscriptionSource); var createSubscriptionModel = new DbAssetSubscription { AssetSubscriptionUID = createSubscription.SubscriptionUID.Value, fk_AssetUID = createSubscription.AssetUID.Value, fk_DeviceUID = createSubscription.DeviceUID.Value, fk_CustomerUID = createSubscription.CustomerUID.Value, fk_SubscriptionSourceID = (int)subscriptionSource, StartDate = createSubscription.StartDate.Value, EndDate = createSubscription.EndDate.Value, InsertUTC = currentUtc, UpdateUTC = currentUtc, fk_ServiceTypeID = _assetSubscriptionTypeCache[createSubscription.SubscriptionType], LastProcessStatus = 0 }; subscriptionList.Add(createSubscriptionModel); topics.ToList().ForEach(topic => { var kafkaMessage = new KafkaMessage() { Key = createSubscription.SubscriptionUID.ToString(), Message = new { CreateAssetSubscriptionEvent = createSubscription }, Topic = topic }; kafkaMessageList.Add(kafkaMessage); }); } var actions = new List <Action>(); actions.Add(() => transaction.Upsert <DbAssetSubscription>(subscriptionList)); actions.Add(() => transaction.Publish(kafkaMessageList)); return(transaction.Execute(actions)); }
public bool CreateAssetSubscription(CreateAssetSubscriptionEvent createSubscription) { if (createSubscription.SubscriptionType == null || !_assetSubscriptionTypeCache.ContainsKey(createSubscription.SubscriptionType)) { throw new Exception("Invalid Asset Subscription Type for the SubscriptionUID:- " + createSubscription.SubscriptionUID); } var currentUtc = DateTime.UtcNow; SubscriptionSource subscriptionSource; Enum.TryParse(createSubscription.Source, true, out subscriptionSource); var createSubscriptionModel = new DbAssetSubscription { AssetSubscriptionUID = createSubscription.SubscriptionUID.Value, fk_AssetUID = createSubscription.AssetUID.Value, fk_DeviceUID = createSubscription.DeviceUID.HasValue ? createSubscription.DeviceUID.Value : Guid.Empty, fk_CustomerUID = createSubscription.CustomerUID.Value, fk_SubscriptionSourceID = (int)subscriptionSource, StartDate = createSubscription.StartDate.Value, EndDate = createSubscription.EndDate.Value, InsertUTC = currentUtc, UpdateUTC = currentUtc, fk_ServiceTypeID = _assetSubscriptionTypeCache[createSubscription.SubscriptionType], LastProcessStatus = 0 }; var kafkaMessage = new KafkaMessage() { Key = createSubscription.SubscriptionUID.ToString(), Message = new { CreateAssetSubscriptionEvent = createSubscription } }; var actions = new List <Action> { () => transaction.Upsert <DbAssetSubscription>(createSubscriptionModel), () => topics.ToList().ForEach(topic => { kafkaMessage.Topic = topic; transaction.Publish(kafkaMessage); }) }; return(transaction.Execute(actions)); }