using Blazored.LocalStorage; using BlazorTp1.Factories; using BlazorTp1.Models; using Microsoft.AspNetCore.Components; public class DataLocalService : IDataService { private readonly HttpClient _http; private readonly ILocalStorageService _localStorage; private readonly NavigationManager _navigationManager; private readonly IWebHostEnvironment _webHostEnvironment; public DataLocalService( ILocalStorageService localStorage, HttpClient http, IWebHostEnvironment webHostEnvironment, NavigationManager navigationManager) { _localStorage = localStorage; _http = http; _webHostEnvironment = webHostEnvironment; _navigationManager = navigationManager; } public async Task Add(ItemModel model) { // Get the current data var currentData = await _localStorage.GetItemAsync>("data"); // Simulate the Id model.Id = currentData.Max(s => s.Id) + 1; // Add the item to the current data currentData.Add(ItemFactory.Create(model)); // Save the image var imagePathInfo = new DirectoryInfo($"{_webHostEnvironment.WebRootPath}/images"); // Check if the folder "images" exist if (!imagePathInfo.Exists) { imagePathInfo.Create(); } // Determine the image name var fileName = new FileInfo($"{imagePathInfo}/{model.Name}.png"); // Write the file content await File.WriteAllBytesAsync(fileName.FullName, model.ImageContent); // Save the data await _localStorage.SetItemAsync("data", currentData); } public async Task Count() { return (await _localStorage.GetItemAsync("data")).Length; } public async Task> List(int currentPage, int pageSize) { // Load data from the local storage var currentData = await _localStorage.GetItemAsync("data"); // Check if data exist in the local storage if (currentData == null) { // this code add in the local storage the fake data var originalData = await _http.GetFromJsonAsync($"{_navigationManager.BaseUri}fake-data.json"); await _localStorage.SetItemAsync("data", originalData); } return (await _localStorage.GetItemAsync("data")).Skip((currentPage - 1) * pageSize).Take(pageSize).ToList(); } //new methods public async Task GetById(int id) { // Get the current data var currentData = await _localStorage.GetItemAsync>("data"); // Get the item int the list var item = currentData.FirstOrDefault(w => w.Id == id); // Check if item exist if (item == null) { throw new Exception($"Unable to found the item with ID: {id}"); } return item; } public async Task Update(int id, ItemModel model) { // Get the current data var currentData = await _localStorage.GetItemAsync>("data"); // Get the item int the list var item = currentData.FirstOrDefault(w => w.Id == id); // Check if item exist if (item == null) { throw new Exception($"Unable to found the item with ID: {id}"); } // Save the image var imagePathInfo = new DirectoryInfo($"{_webHostEnvironment.WebRootPath}/images"); // Check if the folder "images" exist if (!imagePathInfo.Exists) { imagePathInfo.Create(); } // Delete the previous image if (item.Name != model.Name) { var oldFileName = new FileInfo($"{imagePathInfo}/{item.Name}.png"); if (oldFileName.Exists) { File.Delete(oldFileName.FullName); } } // Determine the image name var fileName = new FileInfo($"{imagePathInfo}/{model.Name}.png"); // Write the file content await File.WriteAllBytesAsync(fileName.FullName, model.ImageContent); // Modify the content of the item ItemFactory.Update(item, model); // Save the data await _localStorage.SetItemAsync("data", currentData); } }