diff options
Diffstat (limited to 'RhSolutions.SkuParser.Api/Controllers/ParseController.cs')
-rw-r--r-- | RhSolutions.SkuParser.Api/Controllers/ParseController.cs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/RhSolutions.SkuParser.Api/Controllers/ParseController.cs b/RhSolutions.SkuParser.Api/Controllers/ParseController.cs new file mode 100644 index 0000000..ca1d0d4 --- /dev/null +++ b/RhSolutions.SkuParser.Api/Controllers/ParseController.cs @@ -0,0 +1,57 @@ +using Microsoft.AspNetCore.Mvc; +using RhSolutions.SkuParser.Models; +using RhSolutions.SkuParser.Abstractions; + +namespace RhSolutions.SkuParser.Controllers; + +[ApiController] +[Route("/api/[controller]")] +public class ParseController : ControllerBase +{ + private IServiceProvider _provider; + private Dictionary<Product, double> _result; + public ParseController(IServiceProvider provider) + { + _provider = provider; + _result = new(); + } + + [HttpPost] + public IActionResult PostFiles([FromQuery] bool bs = false) + { + IFormFileCollection files = Request.Form.Files; + try + { + foreach (var file in files) + { + ISkuParser parser = bs ? _provider.GetRequiredKeyedService<ISkuParser>("BS") + : _provider.GetRequiredKeyedService<ISkuParser>(file.ContentType); + var dict = parser.ParseProducts(file); + + foreach (var kvp in dict) + { + if (_result.ContainsKey(kvp.Key)) + { + _result[kvp.Key] += kvp.Value; + } + else + { + _result.Add(kvp.Key, kvp.Value); + } + } + } + } + catch (Exception ex) + { + return BadRequest(error: $"{ex.Message}\n\n{ex.Source}\n{ex.StackTrace}"); + } + return new JsonResult(_result.Select(x => new + { + x.Key.Sku, + x.Key.ProductLine, + x.Key.Name, + x.Key.Price, + quantity = x.Value + })); + } +}
\ No newline at end of file |