using Newtonsoft.Json; using ShopOnline.Models.Dtos; using ShopOnline.Web.Services.Contracts; using System.Net.Http.Json; using System.Text; using System.Text.Json.Serialization; namespace ShopOnline.Web.Services { public class ShoppingCartService : IShoppingCartService { private readonly HttpClient httpClient; public ShoppingCartService(HttpClient httpClient) { this.httpClient = httpClient; } public async Task AddItem(CartItemToAddDto cartItemToAddDto) { try { var response = await httpClient.PostAsJsonAsync("api/ShoppingCart", cartItemToAddDto); if (response.IsSuccessStatusCode) { if(response.StatusCode == System.Net.HttpStatusCode.NoContent) { return default(CartItemDto); } return await response.Content.ReadFromJsonAsync(); } else { var message = await response.Content.ReadAsStringAsync(); throw new Exception($"Http status: {response.StatusCode}\n\tMessage: {message}"); } } catch { throw; } } public async Task DeleteItem(int id) { try { var response = await httpClient.DeleteAsync($"api/ShoppingCart/{id}"); if (response.IsSuccessStatusCode) { return await response.Content.ReadFromJsonAsync(); } return default(CartItemDto); } catch (Exception) { throw; } } public async Task> GetItems(int userId) { try { var response = await httpClient.GetAsync($"api/ShoppingCart/{userId}/GetItems"); if(response.IsSuccessStatusCode) { if(response.StatusCode == System.Net.HttpStatusCode.NoContent) { return Enumerable.Empty().ToList(); } return await response.Content.ReadFromJsonAsync>(); } else { var message = await response.Content.ReadAsStringAsync(); throw new Exception($"Http status: {response.StatusCode}\n\tMessage: {message}"); } } catch(Exception) { throw; } } public async Task UpdateQuantity(CartItemQuantityUpdateDto cartItemQuantityUpdateDto) { try { var jsonRequest = JsonConvert.SerializeObject(cartItemQuantityUpdateDto); var content = new StringContent(jsonRequest, Encoding.UTF8, "application/json-patch+json"); var response = await httpClient.PatchAsync($"api/ShoppingCart/{cartItemQuantityUpdateDto.CartItemId}", content); if (response.IsSuccessStatusCode) { return await response.Content.ReadFromJsonAsync(); } return null; } catch (Exception) { throw; } } } }