Exemple #1
0
        public async Task <Result> DeleteAsync(ProductRemoveDto removeDto)
        {
            var result = await Task.Run(() =>
            {
                var result = new Result();

                var exist_product = _productRepository.Get(removeDto.ProductId);
                if (exist_product != null)
                {
                    var stockSpec   = StockExistSpecification.Create(removeDto.ProductId);
                    var exist_stock = _stockRepository.Find(stockSpec).FirstOrDefault();

                    if (exist_stock != null)
                    {
                        _stockRepository.Remove(exist_stock.Id);
                        _stockRepository.Complete();

                        var stockRemovedEvent = AbstractDomainEvent <StockRemoveDto> .Create(_serviceProvider);
                        stockRemovedEvent.Raise(exist_stock);

                        _productRepository.Remove(removeDto.ProductId);
                        _productRepository.Complete();

                        var prodRemovedEvent = AbstractDomainEvent <ProductRemoveDto> .Create(_serviceProvider);
                        prodRemovedEvent.Raise(exist_product);
                    }
                    else
                    {
                        result.IsError   = true;
                        result.Message   = "Stock not found";
                        result.StatuCode = 400;
                    }
                }
                else
                {
                    result.IsError   = true;
                    result.Message   = "Product not found";
                    result.StatuCode = 400;
                }
                return(result);
            });

            return(result);
        }
Exemple #2
0
        public async Task <Result> AddAsync(Dtos.ProductAddDto productDto)
        {
            var result = await Task.Run(() =>
            {
                var result = new Result();

                // add product
                var new_product        = productDto.CreateProduct();
                var new_stock          = productDto.CreateStock(new_product.Id);
                var exist_Product_Spec = new ProductSameExistSpecification(new_product);

                // is specification satisfied?
                var isStaisfy = exist_Product_Spec.IsSatisfiedBy(new_product);
                if (isStaisfy)
                {
                    var exist_product = _productRepository.Find(exist_Product_Spec).FirstOrDefault();
                    if (exist_product == null)
                    {
                        _productRepository.Add(new_product);
                        _productRepository.Complete();

                        var add_product_event = AbstractDomainEvent <ProductAddDto> .Create(_serviceProvider);
                        add_product_event.Raise(new_product);
                    }
                    else
                    {
                        result.IsError   = true;
                        result.Message   = "Product exist already";
                        result.StatuCode = 400;
                    }
                }

                if (!result.IsError)
                {
                    // add stock
                    var stock_Spec  = new StockExistSpecification(new_stock);
                    var exist_Stock = _stockRepository.Find(stock_Spec).FirstOrDefault();

                    // always statify ATM
                    var isSatisfy = stock_Spec.IsSatisfiedBy(new_stock);
                    if (isSatisfy)
                    {
                        if (exist_Stock == null)
                        {
                            _stockRepository.Add(new_stock);
                            _stockRepository.Complete();

                            var add_stock_event = AbstractDomainEvent <StockAddDto> .Create(_serviceProvider);
                            add_stock_event.Raise(new_stock);
                        }
                        else
                        {
                            result.IsError   = true;
                            result.Message   = "Stock exist already";
                            result.StatuCode = 400;
                            return(result);
                        }
                    }
                }

                return(result);
            });

            return(result);
        }
Exemple #3
0
        public async Task <Result> AddAsync(SaleAddClientModel dto)
        {
            var result = new Result();
            // customer
            var existCustomer = await GetCustomer(dto);

            // sale-person
            var existPerson = await GetSalePerson(dto);

            var newSale = await GetExistSaleAsync(dto, existCustomer.Id, existPerson.Id);

            if (newSale == null)
            {
                // sale
                newSale              = dto.Create();
                newSale.CustomerId   = existCustomer.Id;
                newSale.SalePersonId = existPerson.Id;
                var createSale = await _saleRepository.AddAsync(newSale);

                await _saleRepository.CompleteAsync();

                // sale event
                var sale_added_event = AbstractDomainEvent <SaleAddClientModel> .Create(_serviceProvider);

                await sale_added_event.RaiseAsync(createSale);

                // order
                var order = new Order()
                {
                    SaleId = createSale.Id
                };
                var createdOrder = await _orderRepository.AddAsync(order);

                await _orderRepository.CompleteAsync();

                //sale event
                var orderAddedEvent = AbstractDomainEvent <OrderAddClientModel> .Create(_serviceProvider);

                await orderAddedEvent.RaiseAsync(createdOrder);

                // product
                dto.ProductIds.ForEach(p =>
                {
                    var existProducts = _productRepository.Find(x => x.ProductId == p);
                    var existProduct  = existProducts.FirstOrDefault();
                    if (existProduct == null)
                    {
                        _productRepository.Add(dto.Product(p));
                    }
                    // order-product
                    var orderProduct       = dto.CreateOrderProduct(createdOrder.Id, existProduct.Id);
                    var createOrderProduct = _orderProductRepository.Add(orderProduct);
                });

                await _productRepository.CompleteAsync();

                await _orderProductRepository.CompleteAsync();

                result.Value = newSale.ToString();
            }
            else
            {
                result.IsError   = true;
                result.Message   = "Sale does exist";
                result.StatuCode = 400;
            }

            return(result);
        }
Exemple #4
0
        private async Task SaleUdpateEvent(Sale exist_sale)
        {
            var saleUpdateEvent = AbstractDomainEvent <SaleUpdateClientModel> .Create(_serviceProvider);

            await saleUpdateEvent.RaiseAsync(exist_sale);
        }