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