public IEnumerable <BookOrder> GetBySupplier(string supplier, BookOrderState state)
 {
     using (var connection = CreateConnection())
     {
         return(GetBookOrdersAction.Execute(connection, supplier, state));
     }
 }
예제 #2
0
 public BookOrderDto(string supplier, string id, BookOrderState state, IEnumerable <OrderLineDto> orderLines)
 {
     Supplier   = supplier;
     _id        = id;
     State      = state;
     OrderLines = orderLines;
 }
 public IEnumerable <BookOrder> GetByState(BookOrderState state)
 {
     using (var connection = CreateConnection())
     {
         return(GetBookOrdersAction.Execute(connection, state: state));
     }
 }
 private BookOrder(string supplier, BookOrderState state, Guid id, IList <OrderLine> lines)
 {
     Supplier    = supplier;
     Id          = id;
     State       = state;
     _orderLines = lines.ToList();
 }
        public IEnumerable <BookOrder> GetBySupplier(string supplier, BookOrderState state)
        {
            List <BookOrder> bookOrders = new List <BookOrder>();

            using (var client = new MyCouchClient(_databaseUri, _databaseName))
            {
                QueryViewRequest request = new QueryViewRequest(
                    "bookorders", "bysupplier");
                request.Configure(parameters => parameters
                                  .Key(supplier)
                                  .IncludeDocs(false));

                ViewQueryResponse <string> docIdsBySupplier =
                    client.Views.QueryAsync <string>(request).Result;

                if (docIdsBySupplier.IsEmpty)
                {
                    return(Enumerable.Empty <BookOrder>());
                }

                QueryViewRequest request2 = new QueryViewRequest(
                    "bookorders", "bystate");
                request2.Configure(parameters => parameters
                                   .Key(state)
                                   .IncludeDocs(false));

                ViewQueryResponse <string> docIdsByState =
                    client.Views.QueryAsync <string>(request2).Result;

                if (docIdsByState.IsEmpty)
                {
                    return(Enumerable.Empty <BookOrder>());
                }

                var docIds = docIdsBySupplier.Rows.Select(x => x.Id)
                             .Intersect(docIdsByState.Rows.Select(x => x.Id));

                var request3 = new QueryViewRequest("_all_docs");
                request3.Configure(parameters => parameters
                                   .Keys(docIds.ToArray())
                                   .IncludeDocs(true));

                var results =
                    client.Views.QueryAsync <string>(request3).Result;

                if (results.IsEmpty)
                {
                    return(Enumerable.Empty <BookOrder>());
                }

                foreach (var resultsRow in results.Rows)
                {
                    BookOrderDto dto = JsonConvert.DeserializeObject <BookOrderDto>(
                        resultsRow.IncludedDoc);
                    bookOrders.Add(BookOrderMapper.MapFrom(dto));
                }
            }
            return(bookOrders);
        }
예제 #6
0
        public void Approve()
        {
            if (State != BookOrderState.New)
            {
                throw new BookOrderApproveException();
            }

            State = BookOrderState.Approved;
        }
예제 #7
0
        public void Send()
        {
            if (State != BookOrderState.Approved)
            {
                throw new BookOrderSendException();
            }

            State = BookOrderState.Sent;
        }
        public static BookOrder ToDomain(this BookOrderDto dto)
        {
            BookOrderState   state      = dto.State.ToDomain();
            List <OrderLine> orderLines = new List <OrderLine>();

            foreach (var dtoOrderLine in dto.OrderLines)
            {
                orderLines.Add(new OrderLine(dtoOrderLine.Title, dtoOrderLine.Price, dtoOrderLine.Quantity, dtoOrderLine.Id));
            }
            return(BookOrder.CreateExisting(dto.Supplier, dto.Id, state, orderLines));
        }
예제 #9
0
        private BookOrder(string supplier, Guid id, BookOrderState state, IEnumerable <OrderLine> orderLines)
        {
            if (string.IsNullOrWhiteSpace(supplier))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(supplier));
            }

            if (orderLines == null)
            {
                throw new ArgumentNullException(nameof(orderLines));
            }

            Supplier = supplier;
            Id       = id;
            State    = state;

            OrderLines = orderLines.ToList();
        }
        public static IEnumerable <BookOrder> ToDomain(this IEnumerable <BookOrderDto> dtos)
        {
            List <BookOrder> bookOrders = new List <BookOrder>();

            foreach (var dto in dtos)
            {
                BookOrderState   state      = dto.State.ToDomain();
                List <OrderLine> orderLines = new List <OrderLine>();
                foreach (var dtoOrderLine in dto.OrderLines)
                {
                    orderLines.Add(new OrderLine(dtoOrderLine.Title, dtoOrderLine.Price, dtoOrderLine.Quantity, dtoOrderLine.Id));
                }

                bookOrders.Add(
                    BookOrder.CreateExisting(dto.Supplier, dto.Id, state, orderLines));
            }

            return(bookOrders);
        }
        public void ApproveABookOrder_WhenStateIsNotNew_ShouldThrowDomainException(BookOrderState state)
        {
            var       sut = CreateSut();
            BookOrder bookOrder;

            if (state == BookOrderState.Approved)
            {
                bookOrder = a.BookOrder.ThatIsApproved();
            }
            else if (state == BookOrderState.Sent)
            {
                bookOrder = a.BookOrder.ThatIsSent();
            }
            else
            {
                throw new ArgumentOutOfRangeException();
            }

            _bookOrderRepository.Store(bookOrder);

            Action sendBookOrderThatIsAlreadySent = () => sut.Execute(bookOrder.Id);

            sendBookOrderThatIsAlreadySent.ShouldThrow <Exception>();
        }
        public IEnumerable <BookOrder> GetByState(BookOrderState state)
        {
            List <BookOrder> bookOrders = new List <BookOrder>();

            using (var client = new MyCouchClient(_databaseUri, _databaseName))
            {
                QueryViewRequest request = new QueryViewRequest(
                    "bookorders", "bystate");
                request.Configure(parameters => parameters
                                  .Key(state)
                                  .IncludeDocs(true));

                ViewQueryResponse <string> results =
                    client.Views.QueryAsync <string>(request).Result;

                foreach (var resultsRow in results.Rows)
                {
                    BookOrderDto dto = JsonConvert.DeserializeObject <BookOrderDto>(
                        resultsRow.IncludedDoc);
                    bookOrders.Add(BookOrderMapper.MapFrom(dto));
                }
            }
            return(bookOrders);
        }
 public BookOrderCreatedEvent(string supplier, Guid id, BookOrderState state)
 {
     Supplier = supplier;
     Id       = id;
 }
예제 #14
0
 public BookOrderBuilder WithState(BookOrderState bookOrderState)
 {
     _state = bookOrderState;
     return(this);
 }
 public static BookOrderStateDto ToDto(this BookOrderState bookOrderState)
 {
     return((BookOrderStateDto)Enum.Parse(typeof(BookOrderState), bookOrderState.ToString()));
 }
 public IEnumerable <BookOrder> GetBySupplier(string supplier, BookOrderState state)
 {
     return(_bookOrders.Where(x => x.Supplier == supplier && x.State == state.ToDto()).ToDomain());
 }
 public IEnumerable <BookOrder> GetByState(BookOrderState state)
 {
     return(_bookOrders.Where(x => x.State == state.ToDto()).ToDomain());
 }
예제 #18
0
 public IEnumerable <BookOrder> GetBySupplier(string supplier, BookOrderState state)
 {
     return(_bookOrders.Values.Where(x => x.Supplier == supplier &&
                                     x.State == state));
 }
예제 #19
0
 public IEnumerable <BookOrder> GetByState(BookOrderState state)
 {
     return(_bookOrders.Values.Where(x => x.State == state));
 }
        public void SendingABookOrder_WhenStateIsNotApproved_ShouldThrowDomainException(BookOrderState state)
        {
            var       sut       = CreateSut();
            BookOrder bookOrder = a.BookOrder.WithState(state);

            _bookOrderRepository.Store(bookOrder);

            Action sendBookOrderThatIsAlreadySent = () => sut.Execute(bookOrder.Id);

            sendBookOrderThatIsAlreadySent.ShouldThrow <Exception>();
        }
 /// <summary>
 /// Create an existing book order
 /// </summary>
 public static BookOrder CreateExisting(string supplier, BookOrderState state, Guid id,
                                        IList <OrderLine> lines)
 {
     return(new BookOrder(supplier, state, id, lines));
 }
예제 #22
0
 public static BookOrder CreateExisting(string supplier, Guid id, BookOrderState state,
                                        IEnumerable <OrderLine> orderLines)
 {
     return(new BookOrder(supplier, id, state, orderLines));
 }