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)); }
public ActionResult CreateAssetSubscription([FromBody] CreateAssetSubscriptionEvent assetSubscription) { try { if (string.IsNullOrEmpty(assetSubscription.Source)) { assetSubscription.Source = SubscriptionSource.Store.ToString(); } if (!Enum.TryParse(assetSubscription.Source, true, out SubscriptionSource _)) { logger.LogInformation($"Invalid Source Value:{assetSubscription.Source}"); return(BadRequest("Invalid Source Value")); } if (subscriptionService.CheckExistingSubscription(assetSubscription.SubscriptionUID.Value, "AssetSubscriptionEvent")) { logger.LogInformation("Asset Subscription already exists!"); return(BadRequest("Asset Subscription already exists!")); } assetSubscription.StartDate = assetSubscription.StartDate.ToMySqlDateTimeOverflowCorrection(); assetSubscription.EndDate = assetSubscription.EndDate.ToMySqlDateTimeOverflowCorrection(); assetSubscription.ReceivedUTC = DateTime.UtcNow; if (subscriptionService.CreateAssetSubscription(assetSubscription)) { return(Ok()); } logger.LogWarning("Unable to save to db. Make sure request is not duplicated and all keys exist"); return(BadRequest("Unable to save to db. Make sure request is not duplicated and all keys exist")); } catch (Exception ex) { if (ex.Message.Contains("Invalid Asset Subscription Type")) { logger.LogWarning("Invalid Asset Subscription Type"); return(BadRequest("Invalid Asset Subscription Type")); } logger.LogError(ex.Message + ex.StackTrace); return(StatusCode(500)); } }