Пример #1
0
        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));
        }
Пример #2
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));
        }