Beispiel #1
0
        public async Task <IActionResult> PutReceipt(int id, Receipt receipt)
        {
            if (id != receipt.ID)
            {
                return(BadRequest());
            }

            _context.Entry(receipt).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ReceiptExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <IActionResult> Post([FromBody] List <ProductsController.ReceiptLineDto> receiptLineDto)
        {
            if (receiptLineDto.Count < 1)
            {
                return(BadRequest());
            }


            // Read product data from DB for incoming product IDs
            var products = new Dictionary <int, Product>();

            // Here you have to add code that reads all products referenced by product IDs
            // in receiptDto.Lines and store them in the `products` dictionary.

            foreach (var receiptLine in receiptLineDto)
            {
                var product = await DataContext.Products.FirstOrDefaultAsync(p => p.ID == receiptLine.ProductID);

                if (product == null)
                {
                    return(BadRequest());
                }
                products.Add(product.ID, product);
            }

            // Build receipt from DTO
            var newReceipt = new Receipt
            {
                ReceiptTimestamp = DateTime.UtcNow,
                ReceiptLines     = receiptLineDto.Select(rl => new ReceiptLine
                {
                    ID         = 0,
                    Product    = products[rl.ProductID],
                    Amount     = rl.Amount,
                    TotalPrice = rl.Amount * products[rl.ProductID].UnitPrice
                }).ToList()
            };

            newReceipt.TotalPrice = newReceipt.ReceiptLines.Sum(rl => rl.TotalPrice);

            await DataContext.Receipts.AddAsync(newReceipt);

            await DataContext.SaveChangesAsync();

            return(Created("", newReceipt));
        }
Beispiel #3
0
        public async Task <IActionResult> Post([FromBody] List <ReceiptLineDto> receiptLineDto)
        {
            // implementing check
            if (receiptLineDto == null || receiptLineDto.Count == 0)
            {
                return(BadRequest());
            }

            // Here you have to add code that reads all products referenced by product IDs
            // in receiptDto.Lines and store them in the `products` dictionary.
            var products = new Dictionary <int, Product>();

            foreach (var rl in receiptLineDto)
            {
                products[rl.ProductID] = await DataContext.Products.FirstOrDefaultAsync(p => p.ID == rl.ProductID);

                if (products[rl.ProductID] == null)
                {
                    return(BadRequest());
                }
            }

            // Build receipt from DTO
            var newReceipt = new Receipt
            {
                ReceiptTimestamp = DateTime.UtcNow,
                ReceiptLines     = receiptLineDto.Select(rl => new ReceiptLine
                {
                    // I don't want to question your code from readme.md, but why does ID have to be set?
                    // I thought it is automatically set at 0 when nobody does something
                    ID         = 0,
                    Product    = products[rl.ProductID],
                    Amount     = rl.Amount,
                    TotalPrice = rl.Amount * products[rl.ProductID].UnitPrice
                }).ToList()
            };

            newReceipt.TotalPrice = newReceipt.ReceiptLines.Sum(rl => rl.TotalPrice);

            await DataContext.Receipts.AddAsync(newReceipt);

            await DataContext.SaveChangesAsync();

            return(CreatedAtRoute("api/Receipts/POST", new { id = newReceipt.ID }, newReceipt));
        }
Beispiel #4
0
        public async Task <IActionResult> CreateReceipt([FromBody] ReceiptLineDTO[] receiptLines)
        {
            if (receiptLines.Length <= 0)
            {
                return(BadRequest());
            }

            var products = new Dictionary <int, Product>();

            foreach (var receiptLine in receiptLines)
            {
                var product = await context.Products.Where(p => p.ID == receiptLine.ProductID).FirstOrDefaultAsync();

                if (product is null)
                {
                    return(BadRequest());
                }

                products.Add(product.ID, product);
            }

            // Build receipt from DTO

            var newReceipt = new Receipt
            {
                ReceiptTimestamp = DateTime.UtcNow,
                ReceiptLines     = receiptLines.Select(rl => new ReceiptLine
                {
                    ID         = 0,
                    Product    = products[rl.ProductID],
                    Amount     = rl.Amount,
                    TotalPrice = rl.Amount * products[rl.ProductID].UnitPrice
                }).ToList()
            };

            newReceipt.TotalPrice = newReceipt.ReceiptLines.Sum(rl => rl.TotalPrice);

            context.Receipts.Add(newReceipt);
            await context.SaveChangesAsync();

            return(Created("", newReceipt));
        }
Beispiel #5
0
        public async Task <IActionResult> Post([FromBody] List <ReceiptLineDto> receiptLineDto)
        {
            if (receiptLineDto == null || receiptLineDto.Count == 0)
            {
                return(BadRequest("Missing receipt lines"));
            }

            // Read product data from DB for incoming product IDs
            var products = new Dictionary <int, Product>();

            foreach (var rl in receiptLineDto)
            {
                products[rl.ProductID] = await DataContext.Products.FirstOrDefaultAsync(p => p.ID == rl.ProductID);

                if (products[rl.ProductID] == null)
                {
                    return(BadRequest($"Unknown product ID {rl.ProductID}"));
                }
            }

            // Build receipt from DTO
            var newReceipt = new Receipt
            {
                ReceiptTimestamp = DateTime.UtcNow,
                ReceiptLines     = receiptLineDto.Select(rl => new ReceiptLine
                {
                    ID         = 0,
                    Product    = products[rl.ProductID],
                    Amount     = rl.Amount,
                    TotalPrice = rl.Amount * products[rl.ProductID].UnitPrice
                }).ToList()
            };

            newReceipt.TotalPrice = newReceipt.ReceiptLines.Sum(rl => rl.TotalPrice);

            await DataContext.Receipts.AddAsync(newReceipt);

            await DataContext.SaveChangesAsync();

            return(StatusCode((int)HttpStatusCode.Created, newReceipt));
        }