From 93a05ee7f292046c7a972a26e20017a375e02d02 Mon Sep 17 00:00:00 2001 From: Chris Mills Date: Wed, 19 Feb 2025 14:22:56 -0500 Subject: [PATCH 1/8] added shopping cart service and item wrapper for product --- Library.eCommerce/Models/Item.cs | 28 +++++++++++++++ .../Services/ProductServiceProxy.cs | 30 ++++++++-------- .../Services/ShoppingCartService.cs | 36 +++++++++++++++++++ .../InventoryManagementViewModel.cs | 13 +++---- Maui.eCommerce/ViewModels/ProductViewModel.cs | 15 ++++---- 5 files changed, 95 insertions(+), 27 deletions(-) create mode 100644 Library.eCommerce/Models/Item.cs create mode 100644 Library.eCommerce/Services/ShoppingCartService.cs diff --git a/Library.eCommerce/Models/Item.cs b/Library.eCommerce/Models/Item.cs new file mode 100644 index 0000000..59999e8 --- /dev/null +++ b/Library.eCommerce/Models/Item.cs @@ -0,0 +1,28 @@ +using Spring2025_Samples.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Library.eCommerce.Models +{ + public class Item + { + public int Id { get; set; } + public Product Product { get; set; } + public int Quantity { get; set; } + + public string Display { + get + { + return Product?.Display ?? string.Empty; + } + } + + public Item() + { + Product = new Product(); + } + } +} diff --git a/Library.eCommerce/Services/ProductServiceProxy.cs b/Library.eCommerce/Services/ProductServiceProxy.cs index 0137a8c..bba63a3 100644 --- a/Library.eCommerce/Services/ProductServiceProxy.cs +++ b/Library.eCommerce/Services/ProductServiceProxy.cs @@ -1,4 +1,5 @@ -using Spring2025_Samples.Models; +using Library.eCommerce.Models; +using Spring2025_Samples.Models; using System; using System.Collections.Generic; using System.Linq; @@ -11,11 +12,11 @@ public class ProductServiceProxy { private ProductServiceProxy() { - Products = new List + Products = new List { - new Product{Id = 1, Name ="Product 1"}, - new Product{Id = 2, Name ="Product 2"}, - new Product{Id = 3, Name ="Product 3"} + new Item{ Product = new Product{Id = 1, Name ="Product 1"}, Id = 1, Quantity = 1 }, + new Item{ Product = new Product{Id = 2, Name ="Product 2"}, Id = 2 , Quantity = 2 }, + new Item{ Product = new Product{Id = 3, Name ="Product 3"}, Id=3 , Quantity = 3 } }; } @@ -50,35 +51,36 @@ public static ProductServiceProxy Current } } - public List Products { get; private set; } + public List Products { get; private set; } - public Product AddOrUpdate(Product product) + public Item AddOrUpdate(Item item) { - if(product.Id == 0) + if(item.Id == 0) { - product.Id = LastKey + 1; - Products.Add(product); + item.Id = LastKey + 1; + item.Product.Id = item.Id; + Products.Add(item); } - return product; + return item; } - public Product? Delete(int id) + public Item? Delete(int id) { if(id == 0) { return null; } - Product? product = Products.FirstOrDefault(p => p.Id == id); + Item? product = Products.FirstOrDefault(p => p.Id == id); Products.Remove(product); return product; } - public Product? GetById(int id) + public Item? GetById(int id) { return Products.FirstOrDefault(p => p.Id == id); } diff --git a/Library.eCommerce/Services/ShoppingCartService.cs b/Library.eCommerce/Services/ShoppingCartService.cs new file mode 100644 index 0000000..c603e67 --- /dev/null +++ b/Library.eCommerce/Services/ShoppingCartService.cs @@ -0,0 +1,36 @@ +using Spring2025_Samples.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Library.eCommerce.Services +{ + public class ShoppingCartService + { + private List items; + public List CartItems + { + get + { + return items; + } + } + public static ShoppingCartService Current { + get + { + if(instance == null) + { + instance = new ShoppingCartService(); + } + + return instance; + } + } + private static ShoppingCartService? instance; + private ShoppingCartService() { + items = new List(); + } + } +} diff --git a/Maui.eCommerce/ViewModels/InventoryManagementViewModel.cs b/Maui.eCommerce/ViewModels/InventoryManagementViewModel.cs index 2d5a259..0d0f245 100644 --- a/Maui.eCommerce/ViewModels/InventoryManagementViewModel.cs +++ b/Maui.eCommerce/ViewModels/InventoryManagementViewModel.cs @@ -1,4 +1,5 @@ -using Library.eCommerce.Services; +using Library.eCommerce.Models; +using Library.eCommerce.Services; using Spring2025_Samples.Models; using System; using System.Collections.Generic; @@ -13,7 +14,7 @@ namespace Maui.eCommerce.ViewModels { public class InventoryManagementViewModel : INotifyPropertyChanged { - public Product? SelectedProduct { get; set; } + public Item? SelectedProduct { get; set; } public string? Query { get; set; } private ProductServiceProxy _svc = ProductServiceProxy.Current; @@ -34,16 +35,16 @@ public void RefreshProductList() NotifyPropertyChanged(nameof(Products)); } - public ObservableCollection Products + public ObservableCollection Products { get { - var filteredList = _svc.Products.Where(p => p?.Name?.ToLower().Contains(Query?.ToLower() ?? string.Empty) ?? false); - return new ObservableCollection(filteredList); + var filteredList = _svc.Products.Where(p => p?.Product?.Name?.ToLower().Contains(Query?.ToLower() ?? string.Empty) ?? false); + return new ObservableCollection(filteredList); } } - public Product? Delete() + public Item? Delete() { var item = _svc.Delete(SelectedProduct?.Id ?? 0); NotifyPropertyChanged("Products"); diff --git a/Maui.eCommerce/ViewModels/ProductViewModel.cs b/Maui.eCommerce/ViewModels/ProductViewModel.cs index 6b094b8..b835f46 100644 --- a/Maui.eCommerce/ViewModels/ProductViewModel.cs +++ b/Maui.eCommerce/ViewModels/ProductViewModel.cs @@ -1,4 +1,5 @@ -using Library.eCommerce.Services; +using Library.eCommerce.Models; +using Library.eCommerce.Services; using Spring2025_Samples.Models; using System; using System.Collections.Generic; @@ -13,19 +14,19 @@ public class ProductViewModel public string? Name { get { - return Model?.Name ?? string.Empty; + return Model?.Product?.Name ?? string.Empty; } set { - if(Model != null && Model.Name != value) + if(Model != null && Model.Product?.Name != value) { - Model.Name = value; + Model.Product.Name = value; } } } - public Product? Model { get; set; } + public Item? Model { get; set; } public void AddOrUpdate() { @@ -33,10 +34,10 @@ public void AddOrUpdate() } public ProductViewModel() { - Model = new Product(); + Model = new Item(); } - public ProductViewModel(Product? model) + public ProductViewModel(Item? model) { Model = model; } From 31ecc2c822be2caeeb59df817d5742a91e06f258 Mon Sep 17 00:00:00 2001 From: Chris Mills Date: Mon, 24 Feb 2025 13:10:33 -0500 Subject: [PATCH 2/8] refactor shopping cart service --- Library.eCommerce/Services/ShoppingCartService.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Library.eCommerce/Services/ShoppingCartService.cs b/Library.eCommerce/Services/ShoppingCartService.cs index c603e67..c5c9447 100644 --- a/Library.eCommerce/Services/ShoppingCartService.cs +++ b/Library.eCommerce/Services/ShoppingCartService.cs @@ -1,4 +1,5 @@ -using Spring2025_Samples.Models; +using Library.eCommerce.Models; +using Spring2025_Samples.Models; using System; using System.Collections.Generic; using System.Linq; @@ -9,8 +10,9 @@ namespace Library.eCommerce.Services { public class ShoppingCartService { - private List items; - public List CartItems + private ProductServiceProxy _prodSvc; + private List items; + public List CartItems { get { @@ -30,7 +32,7 @@ public static ShoppingCartService Current { } private static ShoppingCartService? instance; private ShoppingCartService() { - items = new List(); + items = new List(); } } } From c24e340c06c28e95d7a802798b6084a2b6e8a764 Mon Sep 17 00:00:00 2001 From: Chris Mills Date: Mon, 24 Feb 2025 13:45:00 -0500 Subject: [PATCH 3/8] add quantity to the product details screen --- Library.eCommerce/Models/Item.cs | 2 +- .../Services/ShoppingCartService.cs | 6 ------ Maui.eCommerce/ViewModels/ProductViewModel.cs | 16 ++++++++++++++++ .../Views/InventoryManagementView.xaml.cs | 2 +- Maui.eCommerce/Views/ProductDetails.xaml | 7 +++++++ 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/Library.eCommerce/Models/Item.cs b/Library.eCommerce/Models/Item.cs index 59999e8..6a8aaf7 100644 --- a/Library.eCommerce/Models/Item.cs +++ b/Library.eCommerce/Models/Item.cs @@ -11,7 +11,7 @@ public class Item { public int Id { get; set; } public Product Product { get; set; } - public int Quantity { get; set; } + public int? Quantity { get; set; } public string Display { get diff --git a/Library.eCommerce/Services/ShoppingCartService.cs b/Library.eCommerce/Services/ShoppingCartService.cs index c5c9447..3e7cffd 100644 --- a/Library.eCommerce/Services/ShoppingCartService.cs +++ b/Library.eCommerce/Services/ShoppingCartService.cs @@ -1,10 +1,4 @@ using Library.eCommerce.Models; -using Spring2025_Samples.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Library.eCommerce.Services { diff --git a/Maui.eCommerce/ViewModels/ProductViewModel.cs b/Maui.eCommerce/ViewModels/ProductViewModel.cs index b835f46..7b9bffb 100644 --- a/Maui.eCommerce/ViewModels/ProductViewModel.cs +++ b/Maui.eCommerce/ViewModels/ProductViewModel.cs @@ -26,6 +26,22 @@ public string? Name { } } + public int? Quantity + { + get + { + return Model?.Quantity; + } + + set + { + if( Model != null && Model.Quantity != value) + { + Model.Quantity = value; + } + } + } + public Item? Model { get; set; } public void AddOrUpdate() diff --git a/Maui.eCommerce/Views/InventoryManagementView.xaml.cs b/Maui.eCommerce/Views/InventoryManagementView.xaml.cs index f486963..1cd3c4a 100644 --- a/Maui.eCommerce/Views/InventoryManagementView.xaml.cs +++ b/Maui.eCommerce/Views/InventoryManagementView.xaml.cs @@ -32,7 +32,7 @@ private void ContentPage_NavigatedTo(object sender, NavigatedToEventArgs e) } private void EditClicked(object sender, EventArgs e) - {//TODO: ????????????? + { var productId = (BindingContext as InventoryManagementViewModel)?.SelectedProduct?.Id; Shell.Current.GoToAsync($"//Product?productId={productId}"); } diff --git a/Maui.eCommerce/Views/ProductDetails.xaml b/Maui.eCommerce/Views/ProductDetails.xaml index 3e2c98a..67fad38 100644 --- a/Maui.eCommerce/Views/ProductDetails.xaml +++ b/Maui.eCommerce/Views/ProductDetails.xaml @@ -13,6 +13,13 @@ +