Skip to content

Commit

Permalink
Address breaking changes in products API
Browse files Browse the repository at this point in the history
  • Loading branch information
A-Guldborg committed Feb 13, 2024
1 parent a8b2b2a commit 75f2d0b
Show file tree
Hide file tree
Showing 7 changed files with 215 additions and 389 deletions.
218 changes: 81 additions & 137 deletions Shifty.Api/Generated/AnalogCoreV2/AnalogCoreV2.cs

Large diffs are not rendered by default.

44 changes: 16 additions & 28 deletions Shifty.App/Components/ProductManager.razor
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
@using LanguageExt.UnsafeValueAccess
@using Components
@using Shifty.App.DomainModels
@using System.Collections.ObjectModel
@inject ISnackbar Snackbar
@inject IProductService ProductService
@inject IJSRuntime JSRuntime
Expand Down Expand Up @@ -127,7 +128,7 @@
@code
{
private MudDataGrid<Product> _dataGrid;
private IEnumerable<Product> _products = new List<Product>();
private ObservableCollection<Product> _products = new ObservableCollection<Product>();
private Dictionary<UserGroup, bool> UserGroupDict = new();
private IEnumerable<MenuItem> _allMenuItems = new List<MenuItem>();
private Dictionary<MenuItem, bool> SelectedMenuItems = new();
Expand All @@ -148,7 +149,8 @@
var productsResult = await ProductService.GetProducts();
productsResult.Match(
Succ: products => {
_products = products;
_products = new ObservableCollection<Product>(products);
StateHasChanged();
},
Fail: error => {
Snackbar.Add(error.Message, Severity.Error);
Expand Down Expand Up @@ -194,22 +196,16 @@
var result = await ProductService.AddProduct(item);

result.Match(
Succ: async product =>
Succ: product =>
{
// Succesfully added product
Snackbar.Add("Product added", Severity.Success);

// Retrieve all items again in order to update id
var retrieveItems = await ProductService.GetProducts();
retrieveItems.Match(
Succ: items => {
_products = items;
},
Fail: error => {
// Errors while re-retrieving items, non-fatal (just means _products are slightly outdated)
Snackbar.Add(error.Message, Severity.Warning);
}
);
// Override the created product with the placeholder item
_products.Remove(item);
_products.Add(product);

StateHasChanged();
},
Fail: error => {
Snackbar.Add(error.Message, Severity.Error);
Expand All @@ -221,20 +217,10 @@
var result = await ProductService.UpdateProduct(item, item.Id);

result.Match(
Succ: async result =>
Succ: product =>
{
Snackbar.Add("Product updated", Severity.Success);

var retrieveItems = await ProductService.GetProducts();
retrieveItems.Match(
Succ: items => {
_products = items;
},
Fail: error => {
// Errors while re-retrieving items, non-fatal (just means _products are slightly outdated)
Snackbar.Add(error.Message, Severity.Warning);
}
);
_products.FirstOrDefault(p => p.Id == item.Id).IsPerk = product.IsPerk;
},
Fail: error =>
{
Expand All @@ -246,16 +232,18 @@

void AddItemToDataGrid()
{
_products = _products.Append<Product>(new Product{
_products.Add(new Product{
Id = 0,
Name = "",
Description = "",
IsPerk = false,
NumberOfTickets = 1,
Price = 0,
Visible = true,
AllowedUserGroups = new List<UserGroup>()
AllowedUserGroups = new List<UserGroup>(),
EligibleMenuItems = new List<MenuItem>(),
});
StateHasChanged();
_dataGrid.SetEditingItemAsync(_products.Last());
}

Expand Down
16 changes: 0 additions & 16 deletions Shifty.App/DomainModels/Product.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,6 @@ public static Product FromDto(ProductResponse dto)
IsPerk = dto.IsPerk
};
}
public static Product FromChangedProduct(ChangedProductResponse dto, int id, bool isPerk)
{
return new Product()
{
Name = dto.Name,
Price = dto.Price,
Description = dto.Description,
NumberOfTickets = dto.NumberOfTickets,
EligibleMenuItems = dto.MenuItems.Map(MenuItem.FromDto),
AllowedUserGroups = dto.AllowedUserGroups,
Visible = dto.Visible,
Id = id,
IsPerk = isPerk
};
}

public static AddProductRequest ToAddRequest(Product product)
{
Expand All @@ -70,7 +55,6 @@ public static UpdateProductRequest ToUpdateRequest(Product product)
AllowedUserGroups = product.AllowedUserGroups.ToList(),
Visible = product.Visible,
Price = product.Price,
Id = product.Id,
};
}

Expand Down
4 changes: 2 additions & 2 deletions Shifty.App/Repositories/IProductRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ namespace Shifty.App.Repositories
{
public interface IProductRepository
{
Task<Try<ChangedProductResponse>> AddProduct(AddProductRequest addProductRequest);
Task<Try<ProductResponse>> AddProduct(AddProductRequest addProductRequest);
public Task<Try<System.Collections.Generic.IEnumerable<ProductResponse>>> GetProducts();
Task<Try<ChangedProductResponse>> UpdateProduct(UpdateProductRequest product);
Task<Try<ProductResponse>> UpdateProduct(int productId, UpdateProductRequest product);
}
}
6 changes: 3 additions & 3 deletions Shifty.App/Repositories/ProductRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ public ProductRepository(AnalogCoreV2 client)
_client = client;
}

public async Task<Try<ChangedProductResponse>> AddProduct(AddProductRequest addProductRequest)
public async Task<Try<ProductResponse>> AddProduct(AddProductRequest addProductRequest)
{
return await TryAsync(async () => await _client.ApiV2ProductsPostAsync(addProductRequest));
}

public async Task<Try<ChangedProductResponse>> UpdateProduct(UpdateProductRequest product)
public async Task<Try<ProductResponse>> UpdateProduct(int productId, UpdateProductRequest product)
{
return await TryAsync(async () => await _client.ApiV2ProductsPutAsync(product));
return await TryAsync(async () => await _client.ApiV2ProductsPutAsync(productId, product));
}

async Task<Try<IEnumerable<ProductResponse>>> IProductRepository.GetProducts()
Expand Down
37 changes: 5 additions & 32 deletions Shifty.App/Services/ProductService.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Blazored.LocalStorage;
using LanguageExt;
using LanguageExt.Common;
using LanguageExt.UnsafeValueAccess;
using Shifty.Api.Generated.AnalogCoreV1;
using Shifty.Api.Generated.AnalogCoreV2;
using Shifty.App.Authentication;
using Shifty.App.DomainModels;
using Shifty.App.Repositories;

Expand All @@ -32,36 +24,17 @@ public async Task<Try<IEnumerable<Product>>> GetProducts()

public async Task<Try<Product>> UpdateProduct(Product product, int id)
{
var productrequest = new UpdateProductRequest(){
Id = id,
Name = product.Name,
Price = product.Price,
Description = product.Description,
AllowedUserGroups = product.AllowedUserGroups.ToList(),
MenuItemIds = product.EligibleMenuItems.Map(x => x.Id).ToList(),
NumberOfTickets = product.NumberOfTickets,
Visible = product.Visible
};
var productrequest = Product.ToUpdateRequest(product);

return await _productRepository.UpdateProduct(productrequest)
.Map(p => Product.FromChangedProduct(p, id, false)); // TODO: Fix when UpdateProduct returns IsPerk property
return await _productRepository.UpdateProduct(id, productrequest)
.Map(p => Product.FromDto(p));
}

public async Task<Try<Product>> AddProduct(Product product)
{
var productrequest = new AddProductRequest(){
Name = product.Name,
Price = product.Price,
Description = product.Description,
AllowedUserGroups = product.AllowedUserGroups.ToList(),
MenuItemIds = product.EligibleMenuItems.Map(x => x.Id).ToList(),
NumberOfTickets = product.NumberOfTickets,
Visible = product.Visible
};
var newproduct = await _productRepository.AddProduct(Product.ToAddRequest(product));

var changedproduct = await _productRepository.AddProduct(productrequest);

return changedproduct.Map(p => Product.FromChangedProduct(p, 0, false)); // TODO: Fix when AddProduct no longer returns a ChangedProductResponse
return newproduct.Map(p => Product.FromDto(p));
}
}
}
Loading

0 comments on commit 75f2d0b

Please sign in to comment.