diff --git a/Blazor/Blazor/Blazor.csproj b/Blazor/Blazor/Blazor.csproj index abfa41a..aca3f8b 100644 --- a/Blazor/Blazor/Blazor.csproj +++ b/Blazor/Blazor/Blazor.csproj @@ -7,31 +7,39 @@ - + + + + + + + + - + - - - - - - - - - - - - <_ContentIncludedByDefault Remove="Pages\_Layout.cshtml" /> - - - - + + + + + + + + + + + + + <_ContentIncludedByDefault Remove="Pages\_Layout.cshtml" /> + + + + diff --git a/Blazor/Blazor/Models/AdministratorModel.cs b/Blazor/Blazor/Models/AdministratorModel.cs index 618627d..89e5042 100644 --- a/Blazor/Blazor/Models/AdministratorModel.cs +++ b/Blazor/Blazor/Models/AdministratorModel.cs @@ -1,13 +1,30 @@ -using Microsoft.AspNetCore.Cryptography.KeyDerivation; -using Microsoft.AspNetCore.Identity; -using System.Security.Cryptography; - -namespace Blazor.Models; - -public class AdministratorModel : PasswordHasher -{ - public int Id { get; set; } - public string Username { get; set; } - public string HashedPassword { get; set; } - -} +using Microsoft.AspNetCore.Cryptography.KeyDerivation; +using Microsoft.AspNetCore.Identity; +using System.Security.Cryptography; +using System.Text; + +namespace Blazor.Models; + +public class AdministratorModel +{ + public int Id { get; set; } + public string Username { get; set; } + public string HashedPassword { get; set; } + + public void HashPassword(string password) + { + using (MD5 md5 = MD5.Create()) + { + byte[] inputBytes = Encoding.UTF8.GetBytes(password); + byte[] hashBytes = md5.ComputeHash(inputBytes); + + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < hashBytes.Length; i++) + { + sb.Append(hashBytes[i].ToString("x2")); + } + + HashedPassword = sb.ToString(); + } + } +} diff --git a/Blazor/Blazor/Pages/Admins/AddAdministrator.razor b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor index ba127b2..5a940e3 100644 --- a/Blazor/Blazor/Pages/Admins/AddAdministrator.razor +++ b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor @@ -1,7 +1,7 @@ -@page "/addAdministrators" +@page "/addAdministrator" @using Blazor.Models -

AddAdministrators

+

AddAdministrator

diff --git a/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs index ad25b90..b44b4bc 100644 --- a/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs +++ b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs @@ -16,11 +16,40 @@ namespace Blazor.Pages.Admins [Inject] public NavigationManager NavigationManager { get; set; } + [Inject] + public ILogger Logger { get; set; } + private async void HandleValidSubmit() { + administratorModel.HashPassword(administratorModel.HashedPassword); + await DataService.Add(administratorModel); + var formData = new List>(); + formData.Add(new KeyValuePair("username", administratorModel.Username)); + formData.Add(new KeyValuePair("password", administratorModel.HashedPassword)); + + var formContent = new FormUrlEncodedContent(formData); + + string apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/add/administrators"; + + using (var httpClient = new HttpClient()) + { + var response = await httpClient.PostAsync(apiUri, formContent); + + if (response.IsSuccessStatusCode) + { + var responseBody = await response.Content.ReadAsStringAsync(); + } + else + { + var errorResponse = await response.Content.ReadAsStringAsync(); + } + } + + Logger.LogInformation("Admin '{administratorsModelName}' added", administratorModel.Username); + NavigationManager.NavigateTo("administrators"); } } diff --git a/Blazor/Blazor/Pages/Admins/Administrators.razor.cs b/Blazor/Blazor/Pages/Admins/Administrators.razor.cs index 39160f9..c86a07f 100644 --- a/Blazor/Blazor/Pages/Admins/Administrators.razor.cs +++ b/Blazor/Blazor/Pages/Admins/Administrators.razor.cs @@ -9,6 +9,7 @@ using Blazor.Modals; using Blazor.Services; using Blazored.Modal; using Blazored.Modal; +using Blazor.Pages.Chapters; namespace Blazor.Pages.Admins; @@ -43,13 +44,13 @@ public partial class Administrators } // When you use a real API, we use this follow code - //var response = await Http.GetJsonAsync( $"http://my-api/api/data?page={e.Page}&pageSize={e.PageSize}" ); - var response = (await Http.GetFromJsonAsync($"{NavigationManager.BaseUri}fake-administrator.json")).Skip((e.Page - 1) * e.PageSize).Take(e.PageSize).ToList(); + //var response = await Http.GetFromJsonAsync( $"https://trusting-panini.87-106-126-109.plesk.page/api/administrators?page={e.Page}&pageSize={e.PageSize}" ); + var response = Http.GetFromJsonAsync($"https://trusting-panini.87-106-126-109.plesk.page/api/administrators").Result; if (!e.CancellationToken.IsCancellationRequested) { - totalItem = (await Http.GetFromJsonAsync>($"{NavigationManager.BaseUri}fake-administrator.json")).Count; administrators = new List(response); // an actual data for the current page + totalItem = administrators.Count; } } @@ -67,7 +68,7 @@ public partial class Administrators if (currentData == null) { // this code add in the local storage the fake data (we load the data sync for initialize the data before load the OnReadData method) - var originalData = Http.GetFromJsonAsync($"trusting-panini.87-106-126-109.plesk.page/api/chapters").Result; + var originalData = Http.GetFromJsonAsync($"https://trusting-panini.87-106-126-109.plesk.page/api/administrators").Result; await LocalStorage.SetItemAsync("data", originalData); } } diff --git a/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs b/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs index 1def47f..ed2578f 100644 --- a/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs +++ b/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs @@ -1,4 +1,5 @@ using Blazor.Models; +using Blazor.Pages.Chapters; using Blazor.Services; using Microsoft.AspNetCore.Components; @@ -21,9 +22,15 @@ namespace Blazor.Pages.Admins [Inject] public IWebHostEnvironment WebHostEnvironment { get; set; } + [Inject] + public ILogger Logger { get; set; } + + private string OldAdminName { get; set; } + protected override async Task OnInitializedAsync() { var administrator = await DataService.GetAdminById(Id); + OldAdminName = administrator.Username; // Set the model with the admin administratorModel = new AdministratorModel @@ -37,6 +44,9 @@ namespace Blazor.Pages.Admins { await DataService.Update(Id, administratorModel); + + Logger.LogInformation("Admin '{OldAdminModelName}' edited in '{NewAdminModelName}'",OldAdminName,administratorsModel.Username); + NavigationManager.NavigateTo("administrators"); } } diff --git a/Blazor/Blazor/Pages/Chapters/AddChapter.razor.cs b/Blazor/Blazor/Pages/Chapters/AddChapter.razor.cs index 74c863d..da8834c 100644 --- a/Blazor/Blazor/Pages/Chapters/AddChapter.razor.cs +++ b/Blazor/Blazor/Pages/Chapters/AddChapter.razor.cs @@ -14,6 +14,10 @@ public partial class AddChapter [Inject] public NavigationManager NavigationManager { get; set; } + [Inject] + public ILogger Logger { get; set; } + + private async void HandleValidSubmit() { @@ -40,6 +44,9 @@ public partial class AddChapter var errorResponse = await response.Content.ReadAsStringAsync(); } } + + Logger.LogInformation("Chapter '{chapterModelName}' added",chapterModel.Name); + NavigationManager.NavigateTo("chapters"); } diff --git a/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs b/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs index a4ecb63..4796468 100644 --- a/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs +++ b/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs @@ -1,40 +1,47 @@ -using Blazor.Models; -using Blazor.Services; -using Microsoft.AspNetCore.Components; - -namespace Blazor.Pages.Chapters; - -public partial class EditChapter -{ - [Parameter] - public int Id { get; set; } - - private ChapterModel chapterModel = new(); - - [Inject] - public IDataService DataService { get; set; } - - [Inject] - public NavigationManager NavigationManager { get; set; } - - [Inject] - public IWebHostEnvironment WebHostEnvironment { get; set; } - - protected override async Task OnInitializedAsync() - { - var chapter = await DataService.GetById(Id); - - // Set the model with the chapter - chapterModel = new ChapterModel - { - Id = chapter.Id, - Name = chapter.Name - }; - } - - private async void HandleValidSubmit() - { - await DataService.Update(Id, chapterModel); +using Blazor.Models; +using Blazor.Services; +using Microsoft.AspNetCore.Components; + +namespace Blazor.Pages.Chapters; + +public partial class EditChapter +{ + [Parameter] + public int Id { get; set; } + + private ChapterModel chapterModel = new(); + + [Inject] + public IDataService DataService { get; set; } + + [Inject] + public NavigationManager NavigationManager { get; set; } + + [Inject] + public IWebHostEnvironment WebHostEnvironment { get; set; } + + [Inject] + public ILogger Logger { get; set; } + + private string OldChapterName { get; set; } + + protected override async Task OnInitializedAsync() + { + var chapter = await DataService.GetById(Id); + OldChapterName = chapter.Name; + + // Set the model with the chapter + chapterModel = new ChapterModel + { + Id = chapter.Id, + Name = chapter.Name + }; + } + + private async void HandleValidSubmit() + { + await DataService.Update(Id, chapterModel); + var formData = new List>(); formData.Add(new KeyValuePair("name", chapterModel.Name)); @@ -47,6 +54,7 @@ public partial class EditChapter { var response = await httpClient.PostAsync(apiUri, formContent); + if (response.IsSuccessStatusCode) { var responseBody = await response.Content.ReadAsStringAsync(); @@ -55,7 +63,9 @@ public partial class EditChapter { var errorResponse = await response.Content.ReadAsStringAsync(); } - } - NavigationManager.NavigateTo("chapters"); - } -} + } + + Logger.LogInformation("Chapter '{OldChapterModelName}' edited in '{NewChapterModelName}'", OldChapterName, chapterModel.Name); + NavigationManager.NavigateTo("chapters"); + } +} diff --git a/Blazor/Blazor/Pages/Questions/Questions.razor b/Blazor/Blazor/Pages/Questions/Questions.razor index eb87f83..5ae8448 100644 --- a/Blazor/Blazor/Pages/Questions/Questions.razor +++ b/Blazor/Blazor/Pages/Questions/Questions.razor @@ -5,7 +5,7 @@

Chapters

- + Ajouter
diff --git a/Blazor/Blazor/Program.cs b/Blazor/Blazor/Program.cs index 2ccc758..12120ef 100644 --- a/Blazor/Blazor/Program.cs +++ b/Blazor/Blazor/Program.cs @@ -7,6 +7,7 @@ using Blazorise.Icons.FontAwesome; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; using Blazored.Modal; +using Microsoft.Extensions.Logging; var builder = WebApplication.CreateBuilder(args); @@ -36,6 +37,8 @@ builder.Services.AddBlazoredModal(); builder.Services.AddScoped(); +builder.Logging.AddConfiguration(builder.Configuration.GetSection("Logging")); + var app = builder.Build(); // Configure the HTTP request pipeline. diff --git a/Blazor/Blazor/Services/DataLocalService.cs b/Blazor/Blazor/Services/DataLocalService.cs index d8b91cf..f09b693 100644 --- a/Blazor/Blazor/Services/DataLocalService.cs +++ b/Blazor/Blazor/Services/DataLocalService.cs @@ -1,321 +1,321 @@ -using Blazor.Models; -using Blazor.ViewClasses; -using Blazored.LocalStorage; -using Microsoft.AspNetCore.Components; +using Blazor.Models; +using Blazor.ViewClasses; +using Blazored.LocalStorage; +using Microsoft.AspNetCore.Components; using static System.Net.WebRequestMethods; - -namespace Blazor.Services -{ - 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 GetById(int id) - { - // Get the current data - var currentData = await _localStorage.GetItemAsync>("data"); - - // Get the chapter int the list - var chapter = currentData.FirstOrDefault(w => w.Id == id); - - // Check if chapter exist - if (chapter == null) - { - throw new Exception($"Unable to found the item with ID: {id}"); - } - - return chapter; - } - - public async Task Update(int id, ChapterModel model) - { - // Get the current data - var currentData = await _localStorage.GetItemAsync>("data"); - - // Get the chapter int the list - var chapter = currentData.FirstOrDefault(w => w.Id == id); - - // Check if chapter exist - if (chapter == null) - { - throw new Exception($"Unable to found the item with ID: {id}"); - } - - // Modify the content of the chapter - chapter.Name = model.Name; - - // Save the data - await _localStorage.SetItemAsync("data", currentData); - } - - - public async Task Add(ChapterModel model) - { - // Get the current data - var currentData = await _localStorage.GetItemAsync>("data"); - - // Simulate the Id - model.Id = currentData.Max(s => s.Id) + 1; - - // Add the chapter to the current data - currentData.Add(new Chapter - { - Id = model.Id, - Name = model.Name - }); - - - // Save the data - await _localStorage.SetItemAsync("data", currentData); - } - - public async Task Delete(int id) - { - // Get the current data - //var currentData = await _localStorage.GetItemAsync>("data"); - var currentData = _http.GetFromJsonAsync>($"https://trusting-panini.87-106-126-109.plesk.page/api/chapters").Result; - - // Get the chapter int the list - var chapter = currentData.FirstOrDefault(w => w.Id == id); - - // Delete chapter in - currentData.Remove(chapter); - - // Save the data - await _localStorage.SetItemAsync("data", currentData); - } - - public async Task Count() - { - // 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")).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(); - } - - public async Task GetAdminById(int id) - { - // Get the current data - var currentData = await _localStorage.GetItemAsync>("data"); - - // Get the admin int the list - var admin = currentData.FirstOrDefault(w => w.Id == id); - - // Check if admin exist - if (admin == null) - { - throw new Exception($"Unable to found the item with ID: {id}"); - } - - return admin; - } - - public async Task Update(int id, AdministratorModel model) - { - // Get the current data - var currentData = await _localStorage.GetItemAsync>("data"); - - // Get the admin int the list - var admin = currentData.FirstOrDefault(w => w.Id == id); - - // Check if admin exist - if (admin == null) - { - throw new Exception($"Unable to found the item with ID: {id}"); - } - - // Modify the content of the adminnistrator - admin.Username = model.Username; - admin.HashedPassword = model.HashedPassword; - - // Save the data - await _localStorage.SetItemAsync("data", currentData); - } - - public async Task Add(AdministratorModel model) - { - // Get the current data - var currentData = await _localStorage.GetItemAsync>("data"); - - // Simulate the Id - model.Id = currentData.Max(s => s.Id) + 1; - - // Add the admin to the current data - currentData.Add(new Administrator - { - Id = model.Id, - Username = model.Username, - HashedPassword = model.HashedPassword - }); - - - // Save the data - await _localStorage.SetItemAsync("data", currentData); - } - - public async Task CountAdmin() - { - // 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-administrator.json"); - await _localStorage.SetItemAsync("data", originalData); - } - - return (await _localStorage.GetItemAsync("data")).Length; - } - - public async Task> ListAdmin(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-administrator.json"); - await _localStorage.SetItemAsync("data", originalData); - } - - return (await _localStorage.GetItemAsync("data")).Skip((currentPage - 1) * pageSize).Take(pageSize).ToList(); - } - - - public async Task GetQuestionById(int id) - { - // Get the current data - var currentData = await _localStorage.GetItemAsync>("data"); - - // Get the question int the list - var question = currentData.FirstOrDefault(w => w.Id == id); - - // Check if question exist - if (question == null) - { - throw new Exception($"Unable to found the item with ID: {id}"); - } - - return question; - } - - //public async Task Update(int id, QuestionsModel model) - //{ - // // Get the current data - // var currentData = await _localStorage.GetItemAsync>("data"); - - // // Get the admin int the list - // var question = currentData.FirstOrDefault(w => w.Id == id); - - // // Check if admin exist - // if (question == null) - // { - // throw new Exception($"Unable to found the item with ID: {id}"); - // } - - // // Modify the content of the adminnistrator - // question.Username = model.Username; + +namespace Blazor.Services +{ + 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 GetById(int id) + { + // Get the current data + var currentData = await _localStorage.GetItemAsync>("data"); + + // Get the chapter int the list + var chapter = currentData.FirstOrDefault(w => w.Id == id); + + // Check if chapter exist + if (chapter == null) + { + throw new Exception($"Unable to found the item with ID: {id}"); + } + + return chapter; + } + + public async Task Update(int id, ChapterModel model) + { + // Get the current data + var currentData = await _localStorage.GetItemAsync>("data"); + + // Get the chapter int the list + var chapter = currentData.FirstOrDefault(w => w.Id == id); + + // Check if chapter exist + if (chapter == null) + { + throw new Exception($"Unable to found the item with ID: {id}"); + } + + // Modify the content of the chapter + chapter.Name = model.Name; + + // Save the data + await _localStorage.SetItemAsync("data", currentData); + } + + + public async Task Add(ChapterModel model) + { + // Get the current data + var currentData = await _localStorage.GetItemAsync>("data"); + + // Simulate the Id + model.Id = currentData.Max(s => s.Id) + 1; + + // Add the chapter to the current data + currentData.Add(new Chapter + { + Id = model.Id, + Name = model.Name + }); + + + // Save the data + await _localStorage.SetItemAsync("data", currentData); + } + + public async Task Delete(int id) + { + // Get the current data + //var currentData = await _localStorage.GetItemAsync>("data"); + var currentData = _http.GetFromJsonAsync>($"https://trusting-panini.87-106-126-109.plesk.page/api/chapters").Result; + + // Get the chapter int the list + var chapter = currentData.FirstOrDefault(w => w.Id == id); + + // Delete chapter in + currentData.Remove(chapter); + + // Save the data + await _localStorage.SetItemAsync("data", currentData); + } + + public async Task Count() + { + // 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")).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(); + } + + public async Task GetAdminById(int id) + { + // Get the current data + var currentData = await _localStorage.GetItemAsync>("data"); + + // Get the admin int the list + var admin = currentData.FirstOrDefault(w => w.Id == id); + + // Check if admin exist + if (admin == null) + { + throw new Exception($"Unable to found the item with ID: {id}"); + } + + return admin; + } + + public async Task Update(int id, AdministratorModel model) + { + // Get the current data + var currentData = await _localStorage.GetItemAsync>("data"); + + // Get the admin int the list + var admin = currentData.FirstOrDefault(w => w.Id == id); + + // Check if admin exist + if (admin == null) + { + throw new Exception($"Unable to found the item with ID: {id}"); + } + + // Modify the content of the adminnistrator + admin.Username = model.Username; + admin.HashedPassword = model.HashedPassword; + + // Save the data + await _localStorage.SetItemAsync("data", currentData); + } + + public async Task Add(AdministratorModel model) + { + // Get the current data + var currentData = await _localStorage.GetItemAsync>("data"); + + // Simulate the Id + model.Id = currentData.Max(s => s.Id) + 1; + + // Add the admin to the current data + currentData.Add(new Administrator + { + Id = model.Id, + Username = model.Username, + HashedPassword = model.HashedPassword + }); + + + // Save the data + await _localStorage.SetItemAsync("data", currentData); + } + + public async Task CountAdmin() + { + // 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-administrator.json"); + await _localStorage.SetItemAsync("data", originalData); + } + + return (await _localStorage.GetItemAsync("data")).Length; + } + + public async Task> ListAdmin(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-administrator.json"); + await _localStorage.SetItemAsync("data", originalData); + } + + return (await _localStorage.GetItemAsync("data")).Skip((currentPage - 1) * pageSize).Take(pageSize).ToList(); + } + + + public async Task GetQuestionById(int id) + { + // Get the current data + var currentData = await _localStorage.GetItemAsync>("data"); + + // Get the question int the list + var question = currentData.FirstOrDefault(w => w.Id == id); + + // Check if question exist + if (question == null) + { + throw new Exception($"Unable to found the item with ID: {id}"); + } + + return question; + } + + //public async Task Update(int id, QuestionsModel model) + //{ + // // Get the current data + // var currentData = await _localStorage.GetItemAsync>("data"); + + // // Get the admin int the list + // var question = currentData.FirstOrDefault(w => w.Id == id); + + // // Check if admin exist + // if (question == null) + // { + // throw new Exception($"Unable to found the item with ID: {id}"); + // } + + // // Modify the content of the adminnistrator + // question.Username = model.Username; // question.HashedPassword = model.HashedPassword; - - // // Save the data - // await _localStorage.SetItemAsync("data", currentData); - //} - - //public async Task Add(QuestionsModel model) - //{ - // // Get the current data - // var currentData = await _localStorage.GetItemAsync>("data"); - - // // Simulate the Id - // model.Id = currentData.Max(s => s.Id) + 1; - - // // Add the admin to the current data - // currentData.Add(new Question - // { - // Id = model.Id, - // Username = model.Username, + + // // Save the data + // await _localStorage.SetItemAsync("data", currentData); + //} + + //public async Task Add(QuestionsModel model) + //{ + // // Get the current data + // var currentData = await _localStorage.GetItemAsync>("data"); + + // // Simulate the Id + // model.Id = currentData.Max(s => s.Id) + 1; + + // // Add the admin to the current data + // currentData.Add(new Question + // { + // Id = model.Id, + // Username = model.Username, // HashedPassword = model.HashedPassword - // }); - - - // // Save the data - // await _localStorage.SetItemAsync("data", currentData); - //} - - public async Task CountQuestion() - { - // 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-question.json"); - await _localStorage.SetItemAsync("data", originalData); - } - - return (await _localStorage.GetItemAsync("data")).Length; - } - - public async Task> ListQuestion(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-question.json"); - await _localStorage.SetItemAsync("data", originalData); - } - - return (await _localStorage.GetItemAsync("data")).Skip((currentPage - 1) * pageSize).Take(pageSize).ToList(); - } + // }); + + + // // Save the data + // await _localStorage.SetItemAsync("data", currentData); + //} + + public async Task CountQuestion() + { + // 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-question.json"); + await _localStorage.SetItemAsync("data", originalData); + } + + return (await _localStorage.GetItemAsync("data")).Length; + } + + public async Task> ListQuestion(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-question.json"); + await _localStorage.SetItemAsync("data", originalData); + } + + return (await _localStorage.GetItemAsync("data")).Skip((currentPage - 1) * pageSize).Take(pageSize).ToList(); + } diff --git a/Blazor/Blazor/appsettings.json b/Blazor/Blazor/appsettings.json index 10f68b8..45fe774 100644 --- a/Blazor/Blazor/appsettings.json +++ b/Blazor/Blazor/appsettings.json @@ -2,8 +2,8 @@ "Logging": { "LogLevel": { "Default": "Information", - "Microsoft.AspNetCore": "Warning" + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" } - }, - "AllowedHosts": "*" -} + } +} \ No newline at end of file