示例#1
0
 public bool SaveEventTransaction(EventTransaction transaction)
 {
     try
     {
         var query = "insert into finance.ExpensesTransaction (EventDatesID,TransferedAmount,TransactionDate,TransactionID,ExpenseRecipientID,CreatedBy,CreatedDate,notes) " +
                     "values (@EventDatesID,@TransferedAmount,@TransactionDate,@TransactionID,@ExpenseRecipientID,@CreatedBy,@CreatedDate,@notes)";
         var cmd = dbmanager.GetSqlCommand();
         cmd.CommandText = query;
         cmd.CommandType = CommandType.Text;
         cmd.Parameters.AddWithValue("@EventDatesID", transaction.EventDatesID);
         cmd.Parameters.AddWithValue("@TransferedAmount", transaction.TransferedAmount);
         cmd.Parameters.AddWithValue("@BalanceAmount", transaction.BalanceAmount);
         cmd.Parameters.AddWithValue("@TransactionDate", transaction.TransactionDate);
         cmd.Parameters.AddWithValue("@TransactionID", transaction.TransactionID);
         if (transaction.ExpenseRecipientID == 0)
         {
             cmd.Parameters.AddWithValue("@ExpenseRecipientID", DBNull.Value);
         }
         else
         {
             cmd.Parameters.AddWithValue("@ExpenseRecipientID", transaction.ExpenseRecipientID);
         }
         cmd.Parameters.AddWithValue("@CreatedBy", "Admin");
         cmd.Parameters.AddWithValue("@CreatedDate", DateTime.Now);
         cmd.Parameters.AddWithValue("@notes", (transaction.notes) ?? "");
         var rows = dbmanager.ExecuteNonQuery(cmd);
         return(rows >= 1);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
示例#2
0
        public void SendEventsToConsumerGetsSentToRepositoryAndPublisher()
        {
            _repository = new Mock <IEventRepository>();
            _repository.Setup(c => c.WriteEvents(It.IsAny <List <EventTransaction> >()))
            .Returns(() => true);
            _publisher = new Mock <IEventPublisher>();
            _publisher.Setup(c => c.Publish(It.IsAny <EventTransaction>()))
            .Returns(() => true);

            var eventStore = new EventStore(_repository.Object, _publisher.Object);

            var eventTransaction = new EventTransaction
            {
                Events = new[] {
                    new Event {
                        AggregateId     = _aggregateId,
                        SerializedEvent = Encoding.UTF8.GetBytes("some data"),
                        EventType       = "Event type"
                    }
                }
            };

            eventStore.Process(eventTransaction).Wait();

            _repository.Verify(c => c.WriteEvents(It.IsAny <List <EventTransaction> >()), Times.AtLeastOnce());
            _publisher.Verify(c => c.Publish(It.IsAny <EventTransaction>()), Times.AtLeastOnce());

            eventStore.Dispose();
        }
示例#3
0
        public void SerializeSimpleEvent()
        {
            Guid aggreagateId = Guid.Parse("{39B880B6-1490-441C-A402-F580DC124C61}");
            int  serialNumber = 1;

            byte[] @event = BitConverter.GetBytes(5);

            var events = new EventTransaction
            {
                Events = new []
                {
                    new Event
                    {
                        AggregateId     = aggreagateId,
                        SerialId        = serialNumber,
                        SerializedEvent = @event
                    }
                }
            };

            var serializer = new ProtobufEventsSerializer();

            byte[] result = serializer.Serialize(events);

            var publishedEvents = serializer.DeserializeEventTransaction(result);
            var publishedEvent  = publishedEvents.Events[0];

            Assert.Equal(aggreagateId, publishedEvents.Events[0].AggregateId);
            Assert.Equal(serialNumber, publishedEvent.SerialId);
            Assert.Equal(@event, publishedEvent.SerializedEvent);
        }
示例#4
0
 public bool SaveEventTransaction(EventTransaction transaction)
 {
     try
     {
         return(DAL.SaveEventTransaction(transaction));
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
示例#5
0
 public string SaveTransaction(EventTransaction transaction)
 {
     try
     {
         var result = dbStore.SaveEventTransaction(transaction);
         return((result) ? "saved successfully" : "something went wrong");
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
示例#6
0
文件: Form1.cs 项目: Skech777/Diplom
 private void Form1_Load(object sender, EventArgs e)
 {
     EventBD          = new EventTransaction(50, 50, 60, 330, this);
     ThemeBD          = new ThematicTransaction(50, 50, 60, 330, this);
     CongratulationBD = new CongratulationTransaction(50, 50, 300, 330, this);
     //Fill ListofEvents
     ListofEvents = Event.Fill();
     //Fill ListOfThematics
     ListofThematics = Theme.Fill();
     //Fill ListOfCongratulations
     ListOfCongratulations = Congratulation.Fill();
     //First select when form has alreadde loaded
     EventBD.Select(ListofEvents, EventBD);
 }
示例#7
0
        public void SendEventWithMissingValuesThrowsException(Event @event)
        {
            _repository = new Mock <IEventRepository>();
            _publisher  = new Mock <IEventPublisher>();
            var eventStore = new EventStore(_repository.Object, _publisher.Object);

            var transaction = new EventTransaction
            {
                Events = new[] { @event }
            };

            var task = eventStore.Process(transaction);

            Assert.IsType <InvalidOperationException>(task.Exception.InnerException);
        }
示例#8
0
        private bool TryPublish(EventTransaction transaction)
        {
            bool success     = false;
            int  retriesLeft = 5;

            var eventTransactions = new List <EventTransaction>();

            while (!success && retriesLeft > 0)
            {
                success = _publisher.Publish(transaction);
                retriesLeft--;
            }

            return(success);
        }
        public bool Publish(EventTransaction eventTransactions)
        {
            try
            {
                byte[] message = Serializer.Serialize(eventTransactions);
                _channel.BasicPublish(exchange: _configuration.ExchangeName,
                                      routingKey: "",
                                      basicProperties: null,
                                      body: message);
            }
            catch (Exception)
            {
                return(false);
            }

            return(true);
        }
        public Task <bool> Process(EventTransaction eventTransaction)
        {
            var tcs             = new TaskCompletionSource <bool>();
            var transactionTask = new TransactionTask(eventTransaction, tcs);

            if (eventTransaction.Events.Any(c => c.AggregateId == Guid.Empty || string.IsNullOrWhiteSpace(c.EventType) || c.SerializedEvent == null || !c.SerializedEvent.Any()))
            {
                tcs.SetException(new InvalidOperationException("AggregateId, EventType and SerializedEvent can not be empty"));
            }

            //trys to add for ten millisecond. Not sure what is a good timeout here, but at least it wont block indefinitely
            if (!_writerQueue.TryAdd(transactionTask, 10))
            {
                tcs.SetException(new TimeoutException("Timed out while waiting to add to persistence queue"));
            }

            return(tcs.Task);
        }
示例#11
0
        public void SerializeTwoEvents()
        {
            Guid aggreagateId1 = Guid.Parse("{08B175B5-1BE8-4667-96AD-73F7F1BECA5A}");
            int  serialNumber1 = 1;
            int  serialNumber2 = 2;

            byte[] event1 = BitConverter.GetBytes(5);
            byte[] event2 = BitConverter.GetBytes(7);

            var events = new EventTransaction
            {
                Events = new[]
                {
                    new Event
                    {
                        AggregateId     = aggreagateId1,
                        SerialId        = serialNumber1,
                        SerializedEvent = event1
                    },
                    new Event
                    {
                        AggregateId     = aggreagateId1,
                        SerialId        = serialNumber2,
                        SerializedEvent = event2
                    }
                }
            };

            var serializer = new ProtobufEventsSerializer();

            byte[] result = serializer.Serialize(events);

            var publishedEvents = serializer.DeserializeEventTransaction(result);
            var publishedEvent  = publishedEvents.Events[0];

            Assert.Equal(aggreagateId1, publishedEvents.Events[0].AggregateId);
            Assert.Equal(serialNumber1, publishedEvent.SerialId);
            Assert.Equal(event1, publishedEvent.SerializedEvent);

            publishedEvent = publishedEvents.Events[1];

            Assert.Equal(serialNumber2, publishedEvent.SerialId);
            Assert.Equal(event2, publishedEvent.SerializedEvent);
        }
示例#12
0
 public bool Publish(EventTransaction eventTransaction)
 {
     return(true);
 }
 public TransactionTask(EventTransaction transaction, TaskCompletionSource <bool> tcs)
 {
     Transaction = transaction;
     _tcs        = tcs;
 }
 public byte[] Serialize(EventTransaction eventTransaction)
 {
     return(Serialize <EventTransaction>(eventTransaction));
 }
示例#15
0
 public void Enqueue(EventTransaction transaction)
 {
     _publisherQueue.Add(transaction);
 }