/// <summary> /// Processes the specified command. /// </summary> /// <param name="command"> /// The command to process. /// </param> /// <param name="repositories"> /// An object that provides access to data access repositories. /// </param> /// <param name="transaction"> /// A transaction that is used to process the command. /// </param> /// <param name="controlToken"> /// A token that ensures thread safety for the operation. /// </param> protected override void Process(AddFibonacciNumberCommand command, IFactoryProducedInstanceGroup repositories, IDataAccessTransaction transaction, ConcurrencyControlToken controlToken) { var fibonacciNumberSeries = NumberSeries.Named.Fibonacci; var numberRepository = repositories.Get <NumberRepository>(); var number = numberRepository.FindByValue(command.NumberValue); if (number is null) { number = new Number() { Identifier = Guid.NewGuid(), Value = command.NumberValue }; numberRepository.Add(number); } var numberSeriesNumberRespository = repositories.Get <NumberSeriesNumberRepository>(); var numberSeriesNumber = numberSeriesNumberRespository.FindWhere(entity => entity.Number.Value == number.Value && entity.NumberSeriesIdentifier == fibonacciNumberSeries.Identifier).SingleOrDefault(); if (numberSeriesNumber is null) { numberSeriesNumber = new NumberSeriesNumber() { Identifier = Guid.NewGuid(), Number = number, NumberIdentifier = number.Identifier, NumberSeriesIdentifier = fibonacciNumberSeries.Identifier }; numberSeriesNumberRespository.Add(numberSeriesNumber); } }
/// <summary> /// Processes the specified command. /// </summary> /// <param name="command"> /// The command to process. /// </param> /// <param name="repositories"> /// An object that provides access to data access repositories. /// </param> /// <param name="transaction"> /// A transaction that is used to process the command. /// </param> /// <param name="controlToken"> /// A token that ensures thread safety for the operation. /// </param> protected abstract void Process(TCommand command, IFactoryProducedInstanceGroup repositories, IDataAccessTransaction transaction, ConcurrencyControlToken controlToken);
/// <summary> /// Processes the specified command. /// </summary> /// <param name="command"> /// The command to process. /// </param> /// <param name="repositories"> /// An object that provides access to data access repositories. /// </param> /// <param name="transaction"> /// A transaction that is used to process the command. /// </param> /// <param name="controlToken"> /// A token that ensures thread safety for the operation. /// </param> /// <returns> /// The result that is emitted when processing the command. /// </returns> protected sealed override IEnumerable <Int64> Process(GetFibonacciNumberValuesCommand command, IFactoryProducedInstanceGroup repositories, IDataAccessTransaction transaction, ConcurrencyControlToken controlToken) { var numberSeriesNumberRepository = repositories.Get <NumberSeriesNumberRepository>(); return(numberSeriesNumberRepository.FindWhere(entity => entity.NumberSeries.Identifier == NumberSeries.Named.Fibonacci.Identifier).Select(entity => entity.Number.Value).ToList()); }