diff --git a/Blazor/Blazor/Blazor.csproj b/Blazor/Blazor/Blazor.csproj index 6df041b..abfa41a 100644 --- a/Blazor/Blazor/Blazor.csproj +++ b/Blazor/Blazor/Blazor.csproj @@ -7,38 +7,33 @@ - - - - + - - - - - + - - - - - - - - - - - - <_ContentIncludedByDefault Remove="Pages\_Layout.cshtml" /> - - - - + + + + + + + + + + + + <_ContentIncludedByDefault Remove="Pages\_Layout.cshtml" /> + + + + + + diff --git a/Blazor/Blazor/Models/AdministratorsModel.cs b/Blazor/Blazor/Models/AdministratorModel.cs similarity index 66% rename from Blazor/Blazor/Models/AdministratorsModel.cs rename to Blazor/Blazor/Models/AdministratorModel.cs index 5a03654..618627d 100644 --- a/Blazor/Blazor/Models/AdministratorsModel.cs +++ b/Blazor/Blazor/Models/AdministratorModel.cs @@ -4,10 +4,10 @@ using System.Security.Cryptography; namespace Blazor.Models; -public class AdministratorsModel : PasswordHasher +public class AdministratorModel : PasswordHasher { public int Id { get; set; } public string Username { get; set; } - public string hashedPassword { get; set; } + public string HashedPassword { get; set; } } diff --git a/Blazor/Blazor/Models/PlayerModel.cs b/Blazor/Blazor/Models/PlayerModel.cs index 2079d18..fef9ba3 100644 --- a/Blazor/Blazor/Models/PlayerModel.cs +++ b/Blazor/Blazor/Models/PlayerModel.cs @@ -5,21 +5,7 @@ namespace Blazor.Models; public class PlayerModel { - public int Id { get; private set; } - public string Nickname { get; private set; } + public int Id { get; set; } + public string Nickname { get; set; } public string HashedPassword { get; set; } - private byte[] salt = RandomNumberGenerator.GetBytes(128 / 8); // for password hash - public PlayerModel(int id, string nickname, string password) - { - Id = id; - Nickname = nickname; - //hash password - HashedPassword = Convert.ToBase64String(KeyDerivation.Pbkdf2( - password: password!, - salt: salt, - prf: KeyDerivationPrf.HMACSHA256, - iterationCount: 100000, - numBytesRequested: 256 / 8) - ); - } } diff --git a/Blazor/Blazor/Models/QuestionsModel.cs b/Blazor/Blazor/Models/QuestionModel.cs similarity index 77% rename from Blazor/Blazor/Models/QuestionsModel.cs rename to Blazor/Blazor/Models/QuestionModel.cs index 19c395c..b4a0b22 100644 --- a/Blazor/Blazor/Models/QuestionsModel.cs +++ b/Blazor/Blazor/Models/QuestionModel.cs @@ -1,6 +1,6 @@ namespace Blazor.Models; -public class QuestionsModel +public class QuestionModel { public int Id { get; private set; } public string Content { get; set; } @@ -9,7 +9,7 @@ public class QuestionsModel public int Difficulty { get; set; } public int NbFails { get; private set; } - public QuestionsModel(int id, string content, int idChapter, int difficulty, int nbFails, int? idAnswerGood = null) + public QuestionModel(int id, string content, int idChapter, int difficulty, int nbFails, int? idAnswerGood = null) { Id = id; Content = content; diff --git a/Blazor/Blazor/Pages/Admins/AddAdministrators.razor b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor similarity index 67% rename from Blazor/Blazor/Pages/Admins/AddAdministrators.razor rename to Blazor/Blazor/Pages/Admins/AddAdministrator.razor index 1d2d431..ba127b2 100644 --- a/Blazor/Blazor/Pages/Admins/AddAdministrators.razor +++ b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor @@ -3,18 +3,18 @@

AddAdministrators

- +

diff --git a/Blazor/Blazor/Pages/Admins/AddAdministrators.razor.cs b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs similarity index 75% rename from Blazor/Blazor/Pages/Admins/AddAdministrators.razor.cs rename to Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs index 257062b..ad25b90 100644 --- a/Blazor/Blazor/Pages/Admins/AddAdministrators.razor.cs +++ b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs @@ -6,9 +6,9 @@ using Blazor.Services; namespace Blazor.Pages.Admins { - public partial class AddAdministrators + public partial class AddAdministrator { - private AdministratorsModel administratorsModel = new(); + private AdministratorModel administratorModel = new(); [Inject] public IDataService DataService { get; set; } @@ -19,7 +19,7 @@ namespace Blazor.Pages.Admins private async void HandleValidSubmit() { - await DataService.Add(administratorsModel); + await DataService.Add(administratorModel); NavigationManager.NavigateTo("administrators"); } diff --git a/Blazor/Blazor/Pages/Admins/Administrators.razor b/Blazor/Blazor/Pages/Admins/Administrators.razor index 53b79bf..6c83225 100644 --- a/Blazor/Blazor/Pages/Admins/Administrators.razor +++ b/Blazor/Blazor/Pages/Admins/Administrators.razor @@ -5,7 +5,7 @@

Administrators

- + Ajouter
@@ -26,3 +26,4 @@ + \ No newline at end of file diff --git a/Blazor/Blazor/Pages/Admins/Administrators.razor.cs b/Blazor/Blazor/Pages/Admins/Administrators.razor.cs index a55bc97..39160f9 100644 --- a/Blazor/Blazor/Pages/Admins/Administrators.razor.cs +++ b/Blazor/Blazor/Pages/Admins/Administrators.razor.cs @@ -61,13 +61,13 @@ public partial class Administrators return; } - var currentData = await LocalStorage.GetItemAsync("data"); + 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 (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($"trusting-panini.87-106-126-109.plesk.page/api/chapters").Result; await LocalStorage.SetItemAsync("data", originalData); } } diff --git a/Blazor/Blazor/Pages/Admins/EditAdministrator.razor b/Blazor/Blazor/Pages/Admins/EditAdministrator.razor index 660b5d1..3c83798 100644 --- a/Blazor/Blazor/Pages/Admins/EditAdministrator.razor +++ b/Blazor/Blazor/Pages/Admins/EditAdministrator.razor @@ -2,18 +2,18 @@

EditAdministrator

- +

diff --git a/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs b/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs index f41a5e9..1def47f 100644 --- a/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs +++ b/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs @@ -10,7 +10,7 @@ namespace Blazor.Pages.Admins [Parameter] public int Id { get; set; } - private AdministratorsModel administratorsModel = new(); + private AdministratorModel administratorModel = new(); [Inject] public IDataService DataService { get; set; } @@ -26,7 +26,7 @@ namespace Blazor.Pages.Admins var administrator = await DataService.GetAdminById(Id); // Set the model with the admin - administratorsModel = new AdministratorsModel + administratorModel = new AdministratorModel { Id = administrator.Id, Username = administrator.Username @@ -35,7 +35,7 @@ namespace Blazor.Pages.Admins private async void HandleValidSubmit() { - await DataService.Update(Id, administratorsModel); + await DataService.Update(Id, administratorModel); NavigationManager.NavigateTo("administrators"); } diff --git a/Blazor/Blazor/Pages/Chapters/Chapters.razor.cs b/Blazor/Blazor/Pages/Chapters/Chapters.razor.cs index 5aa7d2f..eec53b1 100644 --- a/Blazor/Blazor/Pages/Chapters/Chapters.razor.cs +++ b/Blazor/Blazor/Pages/Chapters/Chapters.razor.cs @@ -73,8 +73,6 @@ public partial class Chapters return; } - // When you use a real API, we use this follow code - //var response = await Http.GetFromJsonAsync( $"https://trusting-panini.87-106-126-109.plesk.page/api/chapters?page={e.Page}&pageSize={e.PageSize}" ); var response = Http.GetFromJsonAsync($"https://trusting-panini.87-106-126-109.plesk.page/api/chapters").Result; if (!e.CancellationToken.IsCancellationRequested) diff --git a/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs b/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs index 3120c07..a4ecb63 100644 --- a/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs +++ b/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs @@ -1,40 +1,40 @@ -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; } + + 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); var formData = new List>(); formData.Add(new KeyValuePair("name", chapterModel.Name)); @@ -55,7 +55,7 @@ public partial class EditChapter { var errorResponse = await response.Content.ReadAsStringAsync(); } - } - NavigationManager.NavigateTo("chapters"); - } -} + } + NavigationManager.NavigateTo("chapters"); + } +} diff --git a/Blazor/Blazor/Pages/Players/AddPlayer.razor b/Blazor/Blazor/Pages/Players/AddPlayer.razor new file mode 100644 index 0000000..c284ddd --- /dev/null +++ b/Blazor/Blazor/Pages/Players/AddPlayer.razor @@ -0,0 +1,23 @@ +@page "/addPlayer" +@using Blazor.Models + +

Add Player

+ + + + + +

+ + +

+ + + +
\ No newline at end of file diff --git a/Blazor/Blazor/Pages/Players/AddPlayer.razor.cs b/Blazor/Blazor/Pages/Players/AddPlayer.razor.cs new file mode 100644 index 0000000..a260793 --- /dev/null +++ b/Blazor/Blazor/Pages/Players/AddPlayer.razor.cs @@ -0,0 +1,45 @@ +using Microsoft.AspNetCore.Components; +using Blazor.Models; +using Blazor.Services; + +namespace Blazor.Pages.Players +{ + public partial class AddPlayer + { + private PlayerModel playerModel = new(); + + [Inject] + public IDataService DataService { get; set; } + + [Inject] + public NavigationManager NavigationManager { get; set; } + + + private async void HandleValidSubmit() + { + await DataService.Add(playerModel); + var formData = new List>(); + formData.Add(new KeyValuePair("nickname", playerModel.Nickname)); + formData.Add(new KeyValuePair("password", playerModel.HashedPassword)); + + var formContent = new FormUrlEncodedContent(formData); + + string apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/add/players/"+playerModel.Id; + + 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(); + } + } + NavigationManager.NavigateTo("players"); + } + } +} diff --git a/Blazor/Blazor/Pages/Players/EditPlayer.razor b/Blazor/Blazor/Pages/Players/EditPlayer.razor new file mode 100644 index 0000000..212a9da --- /dev/null +++ b/Blazor/Blazor/Pages/Players/EditPlayer.razor @@ -0,0 +1,21 @@ +@page "/editPlayer/{Id:int}" + +

Edit Player

+ + + + + +

+ + +

+ + +
diff --git a/Blazor/Blazor/Pages/Players/EditPlayer.razor.cs b/Blazor/Blazor/Pages/Players/EditPlayer.razor.cs new file mode 100644 index 0000000..045f21c --- /dev/null +++ b/Blazor/Blazor/Pages/Players/EditPlayer.razor.cs @@ -0,0 +1,64 @@ +using Blazor.Models; +using Blazor.Services; +using ChoETL; +using Microsoft.AspNetCore.Components; + +namespace Blazor.Pages.Players +{ + public partial class EditPlayer + { + + [Parameter] + public int Id { get; set; } + + private PlayerModel playerModel = 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 player = await DataService.GetPlayerById(Id); + + // Set the model with the admin + playerModel = new PlayerModel + { + Id = player.Id, + Nickname = player.Nickname + }; + } + + private async void HandleValidSubmit() + { + await DataService.Update(Id, playerModel); + var formData = new List>(); + formData.Add(new KeyValuePair("nickname", playerModel.Nickname)); + formData.Add(new KeyValuePair("password", playerModel.HashedPassword)); + + var formContent = new FormUrlEncodedContent(formData); + + string apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/update/"+playerModel.Id; + + 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(); + } + } + NavigationManager.NavigateTo("players"); + } + } +} diff --git a/Blazor/Blazor/Pages/Players/Players.razor b/Blazor/Blazor/Pages/Players/Players.razor new file mode 100644 index 0000000..68e60f5 --- /dev/null +++ b/Blazor/Blazor/Pages/Players/Players.razor @@ -0,0 +1,30 @@ +@page "/players" +@using Blazor.ViewClasses; +@using Blazorise.DataGrid +@using Blazored.Modal; +

Joueurs

+ +
+ + Ajouter + +
+ + + + + + + Editer + + + + + + \ No newline at end of file diff --git a/Blazor/Blazor/Pages/Players/Players.razor.cs b/Blazor/Blazor/Pages/Players/Players.razor.cs new file mode 100644 index 0000000..7cb9b95 --- /dev/null +++ b/Blazor/Blazor/Pages/Players/Players.razor.cs @@ -0,0 +1,94 @@ +using Blazored.LocalStorage; +using Blazor.Services; +using Blazored.Modal.Services; +using Blazor.ViewClasses; +using System.Text; +using Microsoft.JSInterop; +using Microsoft.AspNetCore.Components; +using Blazorise.DataGrid; +using ChoETL; +using Microsoft.AspNetCore.Components.Forms; +using Blazor.Modals; +using Blazored.Modal; +using Blazor.Pages.Admins; +using Blazor.Pages.Chapters; + +namespace Blazor.Pages.Players; + +public partial class Players +{ + public List players; + + private int totalPlayer; + + [Inject] + public NavigationManager NavigationManager { get; set; } + + [CascadingParameter] + public IModalService Modal { get; set; } + + [Inject] + public IDataService DataService { get; set; } + public IWebHostEnvironment WebHostEnvironment { get; set; } + + [Inject] + public HttpClient Http { get; set; } + + [Inject] + public ILocalStorageService LocalStorage { get; set; } + + [Inject] + public IJSRuntime IJSRuntime { get; set; } + + private async void OnDelete(int id) + { + var parameters = new ModalParameters(); + parameters.Add(nameof(Player.Id), id); + + var modal = Modal.Show("Delete Confirmation", parameters); + var result = modal.Result; + + if (result.IsCanceled) + { + return; + } + + await DataService.Delete(id); + + // Reload the page + NavigationManager.NavigateTo("Players", true); + } + + + //protected override async Task OnAfterRenderAsync(bool firstRender) + //{ + // // Do not treat this action if is not the first render + // if (!firstRender) + // { + // return; + // } + //} + + private async Task OnReadData(DataGridReadDataEventArgs e) + { + if (e.CancellationToken.IsCancellationRequested) + { + return; + } + + var response = Http.GetFromJsonAsync($"https://trusting-panini.87-106-126-109.plesk.page/api/players").Result; + + if (!e.CancellationToken.IsCancellationRequested) + { + players = new List(response); // an actual data for the current page + totalPlayer = players.Count; + var currentData = await LocalStorage.GetItemAsync("data"); + if (currentData == null || currentData.Length != players.Count) + { + var originalData = Http.GetFromJsonAsync($"https://trusting-panini.87-106-126-109.plesk.page/api/players").Result; + await LocalStorage.SetItemAsync("data", originalData); + } + } + } +} + diff --git a/Blazor/Blazor/Services/DataLocalService.cs b/Blazor/Blazor/Services/DataLocalService.cs index 624a948..d8b91cf 100644 --- a/Blazor/Blazor/Services/DataLocalService.cs +++ b/Blazor/Blazor/Services/DataLocalService.cs @@ -1,319 +1,415 @@ -using Blazor.Models; -using Blazor.ViewClasses; -using Blazored.LocalStorage; -using Microsoft.AspNetCore.Components; - -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, AdministratorsModel 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(AdministratorsModel 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, - // 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(); - } - } -} +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; + // 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, + // 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(); + } + + + + public async Task GetPlayerById(int id) + { + // Get the current data + var currentData = await _localStorage.GetItemAsync>("data"); + + // Get the player in the list + var player = currentData.FirstOrDefault(w => w.Id == id); + + // Check if player exist + if (player == null) + { + throw new Exception($"Unable to found the item with ID: {id}"); + } + + return player; + } + + public async Task Update(int id, PlayerModel model) + { + // Get the current data + var currentData = await _localStorage.GetItemAsync>("data"); + + // Get the admin int the list + var player = currentData.FirstOrDefault(w => w.Id == id); + + // Check if admin exist + if (player == null) + { + throw new Exception($"Unable to found the item with ID: {id}"); + } + + // Modify the content of the adminnistrator + player.Nickname = model.Nickname; + player.HashedPassword = model.HashedPassword; + + // Save the data + await _localStorage.SetItemAsync("data", currentData); + } + + public async Task Add(PlayerModel 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 Player + { + Id = model.Id, + Nickname = model.Nickname, + HashedPassword = model.HashedPassword + }); + + + // Save the data + await _localStorage.SetItemAsync("data", currentData); + } + + public async Task CountPlayer() + { + // 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> ListPlayer(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(); + } + } + +} \ No newline at end of file diff --git a/Blazor/Blazor/Services/IDataService.cs b/Blazor/Blazor/Services/IDataService.cs index e965c2b..b3e93ab 100644 --- a/Blazor/Blazor/Services/IDataService.cs +++ b/Blazor/Blazor/Services/IDataService.cs @@ -15,9 +15,9 @@ namespace Blazor.Services Task Update(int id, ChapterModel model); - Task Add(AdministratorsModel model); + Task Add(AdministratorModel model); - Task Update(int id, AdministratorsModel model); + Task Update(int id, AdministratorModel model); Task GetAdminById(int id); @@ -33,7 +33,16 @@ namespace Blazor.Services Task CountQuestion(); Task> ListQuestion(int currentPage, int pageSize); - Task Delete(int id); + Task Delete(int id); + + Task Add(PlayerModel model); + + Task Update(int id, PlayerModel model); + + Task GetPlayerById(int id); + + Task CountPlayer(); + Task> ListPlayer(int currentPage, int pageSize); } } diff --git a/Blazor/Blazor/Shared/NavMenu.razor b/Blazor/Blazor/Shared/NavMenu.razor index 34e70cf..08391e1 100644 --- a/Blazor/Blazor/Shared/NavMenu.razor +++ b/Blazor/Blazor/Shared/NavMenu.razor @@ -29,6 +29,11 @@ Questions + diff --git a/Blazor/Blazor/ViewClasses/Administrator.cs b/Blazor/Blazor/ViewClasses/Administrator.cs index 8abff03..93a5ceb 100644 --- a/Blazor/Blazor/ViewClasses/Administrator.cs +++ b/Blazor/Blazor/ViewClasses/Administrator.cs @@ -4,6 +4,6 @@ public class Administrator { public int Id { get; set; } public string Username { get; set; } - public string hashedPassword { get; set; } + public string HashedPassword { get; set; } } diff --git a/Blazor/Blazor/ViewClasses/Player.cs b/Blazor/Blazor/ViewClasses/Player.cs index 7fd1f4e..8ea29fd 100644 --- a/Blazor/Blazor/ViewClasses/Player.cs +++ b/Blazor/Blazor/ViewClasses/Player.cs @@ -2,15 +2,8 @@ public class Player { - public int Id { get; private set; } - public string Nickname { get; private set; } + public int Id { get; set; } + public string Nickname { get; set; } public string HashedPassword { get; set; } - public Player(int id, string nickname, string hashedPassword) - { - Id = id; - Nickname = nickname; - HashedPassword = hashedPassword; - } - }