using System.Text.Json; using TechnoWorld.Data; using TechnoWorld.Models; namespace TechnoWorld.Services; public class CartService { private const string SessionKey = "CartItems"; private readonly IHttpContextAccessor _http; public CartService(IHttpContextAccessor http) { _http = http; } public List GetItems() { var ids = GetIds(); var items = new List(); foreach (var (productId, quantity) in ids) { var product = ProductStore.Products.FirstOrDefault(p => p.Id == productId); if (product == null) { continue; } items.Add(new CartItem { ProductId = productId, Product = product, Quantity = quantity }); } return items; } public int GetCount() { return GetIds().Values.Sum(); } public decimal GetTotal() { return GetItems().Sum(i => i.Subtotal); } public void Add(int productId, int quantity = 1) { var ids = GetIds(); ids[productId] = ids.GetValueOrDefault(productId) + quantity; Save(ids); } public void SetQuantity(int productId, int quantity) { var ids = GetIds(); if (quantity <= 0) { ids.Remove(productId); } else { ids[productId] = quantity; } Save(ids); } public void Remove(int productId) { var ids = GetIds(); ids.Remove(productId); Save(ids); } public void Clear() { _http.HttpContext?.Session.Remove(SessionKey); } private Dictionary GetIds() { var session = _http.HttpContext?.Session; if (session == null) { return new Dictionary(); } var json = session.GetString(SessionKey); if (string.IsNullOrEmpty(json)) { return new Dictionary(); } try { return JsonSerializer.Deserialize>(json) ?? new Dictionary(); } catch { return new Dictionary(); } } private void Save(Dictionary ids) { var session = _http.HttpContext?.Session; if (session == null) { return; } session.SetString(SessionKey, JsonSerializer.Serialize(ids)); } }