Ejemplo n.º 1
0
        public void Remove(SpotCharterId id)
        {
            var collection = GetSpotCollection();
            var filter     = Builders <SpotCharterView> .Filter.Eq("_id", id);

            collection.DeleteOne(filter);
        }
        void IEventSourceCommandRepository <SpotCharter, SpotCharterId> .Save(SpotCharter instance)
        {
            SpotCharterId         id          = instance.Id;
            IList <EventInstance> eventStream = this.repository.ContainsKey(id) ? this.repository[id].ToList() : new List <EventInstance>();

            IEventSourcedAggregate <SpotCharterId> spotEventsInterface = instance;

            foreach (var @event in spotEventsInterface.Events)
            {
                eventStream.Add(new EventInstance {
                    JsonString = JsonConvert.SerializeObject(@event), Type = @event.GetType()
                });
            }

            this.repository[id] = eventStream;
            if (this.dispatcher != null)
            {
                foreach (var @event in spotEventsInterface.Events)
                {
                    this.dispatcher.Publish(new DispatchEvent {
                        EventName = @event.EventName, Source = @event.Source, Timestamp = @event.Timestamp, Version = @event.Version, Payload = JsonConvert.SerializeObject(@event)
                    });
                }
            }
        }
Ejemplo n.º 3
0
        public void TestNotOperatorOverload()
        {
            SpotCharterId spotId1 = null;
            SpotCharterId spotId2 = null;

            Assert.True(spotId1 == spotId2);
            Assert.False(spotId1 != spotId2);

            Assert.Equal(spotId1, spotId2);

            spotId1 = new SpotCharterId(Guid.NewGuid());
            spotId2 = new SpotCharterId(Guid.NewGuid());

            Assert.False(spotId1 == spotId2);
            Assert.True(spotId1 != spotId2);

            Assert.NotEqual(spotId1, spotId2);

            spotId1 = new SpotCharterId(Guid.NewGuid());
            spotId2 = null;

            Assert.False(spotId1 == spotId2);
            Assert.True(spotId1 != spotId2);

            Assert.NotEqual(spotId1, spotId2);

            spotId1 = new SpotCharterId(Guid.Empty);
            spotId2 = new SpotCharterId(Guid.Empty);

            Assert.True(spotId1 == spotId2);
            Assert.False(spotId1 != spotId2);

            Assert.Equal(spotId1, spotId2);
        }
Ejemplo n.º 4
0
        public WorkerProcess(IEventConsumer consumer,
                             ISpotCharterCommandRepository source,
                             ISpotCharterUpdateViewRepository destination)
        {
            // Define mapping rule between Command and Query models
            Mapper.Initialize(cfg => {
                cfg.CreateMap <SpotCharterDomain.ValueObjects.FreightRate, string>().ConstructUsing((rate, ctx) => rate?.ToString() ?? null);
                cfg.CreateMap <SpotCharter, SpotCharterView>()
                .AfterMap((src, dest) => { dest.LastUpdate = DateTime.Now; });
            });

            this.source      = source;
            this.destination = destination;

            this.consumer = consumer;

            this.consumer.ReceivedEventHandler += (e) =>
            {
                try
                {
                    dynamic eventPayload = JsonConvert.DeserializeObject(e.Payload);
                    var     spotId       = new SpotCharterId(Guid.Parse(eventPayload.AggregateId.Value.ToString()));

                    // check if last version has been updated already
                    if (!lastVersionsDictionary.Keys.Contains(spotId) || lastVersionsDictionary[spotId] < e.Version)
                    {
                        switch (e.EventName)
                        {
                        case "SpotCharterDeleted":
                            destination.Remove(spotId);
                            Console.WriteLine("Spot {0} removed.", spotId);
                            break;

                        default:
                            var spot = source.Get(spotId);

                            var spotView = Mapper.Map <SpotCharterView>(spot);

                            destination.Save(spotView);
                            lastVersionsDictionary[spotId] = spot.Version;     // put the version from the entity, not from the processing event

                            Console.WriteLine("Spot {0} updated to version {1}", spotId, spot.Version);
                            break;
                        }

                        Console.WriteLine("[{3:HH:mm:ss}] Event {0}\tSpot Id {1} Version {2} processed.", e.EventName, spotId, e.Version, DateTime.Now);
                    }
                    else
                    {
                        Console.WriteLine("SpotId : {0} Version {1} already updated. Skipping.", spotId, e.Version);
                    }
                    consumer.AckReceived(e.Id);
                }
                catch (Exception ex)
                {
                    Console.Error.WriteLine(ex);
                }
            };
        }
        public SpotCharterView GetById(SpotCharterId id)
        {
            SpotCharterView ret = null;

            this.repository.TryGetValue(id, out ret);

            return(ret);
        }
Ejemplo n.º 6
0
        public SpotCharterView GetById(SpotCharterId id)
        {
            var filter = Builders <SpotCharterView> .Filter.Eq("_id", id);

            var collection = GetSpotCollection();

            return(collection.Find(filter).FirstOrDefault());
        }
        private void Consumer_ReceivedEventHandler(DispatchEvent @event)
        {
            dynamic       eventPayload = JsonConvert.DeserializeObject(@event.Payload);
            SpotCharterId spotId       = new SpotCharterId(Guid.Parse(eventPayload.AggregateId.Value.ToString()));

            if (this.commandRepository != null)
            {
                this.repository[spotId] = Mapper.Map <SpotCharterView>(this.commandRepository.Get(spotId));
            }
        }
Ejemplo n.º 8
0
        public void TestSpotCharterIdEquality()
        {
            var spotId  = new SpotCharterId(Guid.NewGuid());
            var spotId1 = new SpotCharterId(spotId.Value);

            Assert.NotEqual(spotId, null);

            Assert.False(Object.ReferenceEquals(spotId, spotId1));
            Assert.Equal(spotId, spotId1);

            var spotId2 = new SpotCharterId(Guid.NewGuid());

            Assert.NotEqual(spotId, spotId2);
        }
        SpotCharter IEventSourceCommandRepository <SpotCharter, SpotCharterId> .Get(SpotCharterId id)
        {
            var settings = new Newtonsoft.Json.JsonSerializerSettings()
            {
                ContractResolver = new JsonNet.PrivateSettersContractResolvers.PrivateSetterContractResolver()
            };

            if (!this.repository.ContainsKey(id))
            {
                return(null);
            }

            var eventStream = this.repository[id];

            return(new SpotCharter(eventStream.Select(json => JsonConvert.DeserializeObject(json.JsonString, json.Type, settings) as IEvent <SpotCharterId>).ToArray()));
        }
Ejemplo n.º 10
0
        public IActionResult Get(string id)
        {
            try
            {
                var spotId = new SpotCharterId(Guid.Parse(id));
                var spot   = repository.GetBySpotCharterId(spotId);

                return(Ok(spot));
            }

            catch (FormatException ex)
            {
                return(BadRequest());
            }
            catch (Exception ex)
            {
                return(this.StatusCode(500, ex));
            }
        }
 private void FillRepositoryWithSampleCharters(int numberOfInstances)
 {
     for (int i = 0; i < numberOfInstances; i++)
     {
         var spotId = new SpotCharterId(Guid.NewGuid());
         this.repository.Add(spotId, new SpotCharterView
         {
             BillOfLading         = new BillOfLading(DateTime.Now, new CargoQuantity("MT", 45000), null),
             CharterpartyDate     = DateTime.Now,
             CharterpartyId       = new CounterpartyId(Guid.NewGuid()),
             CharterpartyName     = $"Charterparty{i}",
             Laycan               = new DateRange(DateTime.Now, DateTime.Now.AddDays(5)),
             MinimumQuantity      = new CargoQuantity("MT", 40000),
             VesselId             = new VesselId(Guid.NewGuid()),
             VesselName           = $"Vessel{i}",
             PortfolioId          = new PortfolioId(Guid.NewGuid()),
             PortfolioDescription = $"Portfolio{i}",
             Version              = 1,
             Id            = spotId,
             LastUpdate    = DateTime.Now,
             DemurrageRate = new DemurrageRate(0, 0, 72, new CostAmount(new Currency("USD", "US Dollars", "$"), 25000), SharedShippingDomainsObjects.Enums.DemurrageRateTimeUnit.Day),
         });
     }
 }
 public void Remove(SpotCharterId id)
 {
     this.repository.Remove(id);
 }
 public SpotCharterView GetBySpotCharterId(SpotCharterId spotId)
 {
     return(this.GetById(spotId));
 }