using Microsoft.AspNetCore.Mvc; using RhSolutions.Models; using RhSolutions.Api.Services; using System.Linq; namespace RhSolutions.Api.Controllers { [Route("api/[controller]")] public class ProductsController : ControllerBase { private RhSolutionsContext dbContext; private IPricelistParser parser; public ProductsController(RhSolutionsContext dbContext, IPricelistParser parser) { this.dbContext = dbContext; this.parser = parser; } [HttpGet] public IAsyncEnumerable GetProducts() { return dbContext.Products .AsAsyncEnumerable(); } [HttpGet("{id}")] public IEnumerable GetProduct(string id) { return dbContext.Products .Where(p => p.ProductSku!.Equals(id)); } [HttpPost] public IActionResult PostProductsFromXls() { try { var products = parser.GetProducts(HttpContext).GroupBy(p => p.ProductSku) .Select(g => new Product(g.Key) { Name = g.First().Name, DeprecatedSkus = g.SelectMany(p => p.DeprecatedSkus).Distinct().ToList(), ProductLines = g.SelectMany(p => p.ProductLines).Distinct().ToList(), IsOnWarehouse = g.Any(p => p.IsOnWarehouse == true), ProductMeasure = g.First().ProductMeasure, DeliveryMakeUp = g.First().DeliveryMakeUp, Price = g.First().Price }); foreach (var p in products) { dbContext.Add(p); } dbContext.SaveChanges(); return Ok(); } catch (Exception ex) { return BadRequest(ex.Message); } } [HttpDelete] public IActionResult DeleteAllProducts() { List deleted = new(); if (dbContext.Products.Count() > 0) { foreach (Product p in dbContext.Products) { deleted.Add(p); dbContext.Remove(p); } dbContext.SaveChanges(); return Ok(deleted); } else return Ok("Empty db"); } } }