using System; using Blazored.LocalStorage; using HeartTrack.Models; using HeartTrack.Services.UserDataService; using Microsoft.AspNetCore.Components; namespace HeartTrack.Services.UserDataServiceFactice { public class UserDataServiceFactice : IUserDataService { [Inject] private HttpClient _clientHttp { get; set; } [Inject] public ILocalStorageService _localStorage { get; set; } [Inject] public NavigationManager _navigationManager { get; set; } private String EmplacementLocalStorage { get; set; } private String EmplacementJson { get; set; } public UserDataServiceFactice(HttpClient clientHttp, ILocalStorageService localStorage, NavigationManager navigationManager) { this._clientHttp = clientHttp; this._localStorage = localStorage; this._navigationManager = navigationManager; this.EmplacementLocalStorage = "usersData"; this.EmplacementJson = $"{_navigationManager.BaseUri}data/fake-users.json"; } public async Task AddUser(User u) { List data = await getAllUsers(); data.Add(u); await this.SaveAllUsers(data); } public async Task getUserById(int id) { List users = await getAllUsers(); User? temp = null; foreach (User u in users) { if (u.Id == id) { temp = u; } } return temp; } public async Task> getAllUsers() { List lUsers = new List(); lUsers = await this.getUsersFromLocalStorage(); if (lUsers.Count == 0) { lUsers = await this.getUsersFromJson(this.EmplacementJson); await this.saveUsersLocalStorage(lUsers); } return lUsers; } private async Task> getUsersFromJson(String cheminVersJson) { List UsersDeserialiser = new List(); var data = await _clientHttp.GetFromJsonAsync(cheminVersJson); UsersDeserialiser = data.ToList(); return UsersDeserialiser; } private async Task> getUsersFromLocalStorage() { List UsersFromLocalStorage = null; var data = await _localStorage.GetItemAsync(EmplacementLocalStorage); if (data == null) { UsersFromLocalStorage = new List(); } else { UsersFromLocalStorage = data.ToList(); } return UsersFromLocalStorage; } public async Task RemoveUser(User u) { List data = await getAllUsers(); int index = -1; foreach (User temp in data) { if (temp.Id == u.Id) { index = data.IndexOf(temp); } } if (index != -1) { data.RemoveAt(index); } await this.SaveAllUsers(data); data = await this.getAllUsers(); } public async Task SaveAllUsers(List list) { await this.saveUsersLocalStorage(list); } private async Task saveUsersLocalStorage(List lUsers) { await _localStorage.SetItemAsync(this.EmplacementLocalStorage, lUsers); } public async Task UpdateUser(User u) { await this.RemoveUser(u); await this.AddUser(u); } } }