Advertisement
otkalce

Products - mock service

Mar 21st, 2023
350
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.27 KB | Source Code | 0 0
  1. using System.Text.Json;
  2. using Task05.Models;
  3.  
  4. namespace Task05.Services
  5. {
  6.     public interface IDataMock
  7.     {
  8.         List<Product> GetProducts();
  9.         List<Receipt> GetReceipts();
  10.     }
  11.  
  12.     public class DataMock : IDataMock
  13.     {
  14.         private readonly IWebHostEnvironment _env;
  15.  
  16.         private readonly List<Product> _products = new List<Product>();
  17.         private readonly List<Receipt> _receipts = new List<Receipt>();
  18.         private readonly Random _random = new Random(142911);
  19.  
  20.         private string GenerateHexString(int length)
  21.             => string.Concat(Enumerable.Range(0, length).Select(_ => _random.Next(16).ToString("X")));
  22.  
  23.         public DataMock(IWebHostEnvironment env) {
  24.             _env = env;
  25.            
  26.             var productsJson = File.ReadAllText(Path.Combine(_env.WebRootPath, "products-mock.json"));
  27.             var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
  28.             _products = JsonSerializer.Deserialize<List<Product>>(productsJson, options) ?? new List<Product>();
  29.  
  30.             for (int i = 0; i < 100; i++)
  31.             {
  32.                 var receipt = new Receipt {
  33.                     Id = i + 1,
  34.                     Code = GenerateHexString(20),
  35.                     Items = new List<ReceiptItem>(),
  36.                 };
  37.  
  38.                 for (int j = 0; j < 3; j++)
  39.                 {
  40.                     var product = _products[_random.Next(_products.Count)];
  41.                     var quantity = _random.Next(10);
  42.  
  43.                     var receiptItem = new ReceiptItem
  44.                     {
  45.                         ItemNo = j + 1,
  46.                         ProductName = product.Title,
  47.                         Price = product.Price,
  48.                         Quantity = quantity,
  49.                         Value = Math.Round(product.Price * quantity, 2),
  50.                     };
  51.  
  52.                     receipt.Items.Add(receiptItem);
  53.                 }
  54.  
  55.                 receipt.Total = receipt.Items.Sum(x => x.Value);
  56.  
  57.                 _receipts.Add(receipt);
  58.             }
  59.         }
  60.  
  61.         public List<Product> GetProducts()
  62.         {
  63.             return _products;
  64.         }
  65.  
  66.         public List<Receipt> GetReceipts()
  67.         {
  68.             return _receipts;
  69.         }
  70.     }
  71. }
  72.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement