Example #1
0
        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));
        }
Example #2
0
        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));
            }
        }