From e2fcefddeaf93ab5751260d119bd6443f8f91042 Mon Sep 17 00:00:00 2001 From: "Jade.VAN_BRABANDT" Date: Sat, 16 Dec 2023 11:52:01 +0100 Subject: [PATCH] feat : import chapters from CSV --- Blazor/Blazor/Blazor.csproj | 4 + Blazor/Blazor/Pages/AddChapter.razor.cs | 28 ------ Blazor/Blazor/Pages/Administrators.razor.cs | 37 -------- Blazor/Blazor/Pages/Admins.razor | 47 --------- Blazor/Blazor/Pages/Admins.razor.cs | 61 ------------ .../Pages/{ => Admins}/Administrators.razor | 0 .../Pages/Admins/Administrators.razor.cs | 36 +++++++ .../Pages/{ => Chapters}/AddChapter.razor | 0 .../Blazor/Pages/Chapters/AddChapter.razor.cs | 27 ++++++ .../Pages/{ => Chapters}/Chapters.razor | 4 + .../Pages/{ => Chapters}/Chapters.razor.cs | 95 ++++++++++++++++--- .../Pages/{ => Chapters}/Chapters.razor.js | 0 .../Pages/{ => Chapters}/EditChapter.razor | 0 .../Pages/Chapters/EditChapter.razor.cs | 41 ++++++++ Blazor/Blazor/Pages/Counter.razor | 18 ---- Blazor/Blazor/Pages/EditChapter.razor.cs | 42 -------- Blazor/Blazor/Pages/Questions.razor.cs | 6 -- .../Pages/{ => Questions}/Questions.razor | 0 .../Blazor/Pages/Questions/Questions.razor.cs | 6 ++ 19 files changed, 200 insertions(+), 252 deletions(-) delete mode 100644 Blazor/Blazor/Pages/AddChapter.razor.cs delete mode 100644 Blazor/Blazor/Pages/Administrators.razor.cs delete mode 100644 Blazor/Blazor/Pages/Admins.razor delete mode 100644 Blazor/Blazor/Pages/Admins.razor.cs rename Blazor/Blazor/Pages/{ => Admins}/Administrators.razor (100%) create mode 100644 Blazor/Blazor/Pages/Admins/Administrators.razor.cs rename Blazor/Blazor/Pages/{ => Chapters}/AddChapter.razor (100%) create mode 100644 Blazor/Blazor/Pages/Chapters/AddChapter.razor.cs rename Blazor/Blazor/Pages/{ => Chapters}/Chapters.razor (80%) rename Blazor/Blazor/Pages/{ => Chapters}/Chapters.razor.cs (51%) rename Blazor/Blazor/Pages/{ => Chapters}/Chapters.razor.js (100%) rename Blazor/Blazor/Pages/{ => Chapters}/EditChapter.razor (100%) create mode 100644 Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs delete mode 100644 Blazor/Blazor/Pages/Counter.razor delete mode 100644 Blazor/Blazor/Pages/EditChapter.razor.cs delete mode 100644 Blazor/Blazor/Pages/Questions.razor.cs rename Blazor/Blazor/Pages/{ => Questions}/Questions.razor (100%) create mode 100644 Blazor/Blazor/Pages/Questions/Questions.razor.cs diff --git a/Blazor/Blazor/Blazor.csproj b/Blazor/Blazor/Blazor.csproj index a975a06..50f43ea 100644 --- a/Blazor/Blazor/Blazor.csproj +++ b/Blazor/Blazor/Blazor.csproj @@ -16,4 +16,8 @@ + + + + diff --git a/Blazor/Blazor/Pages/AddChapter.razor.cs b/Blazor/Blazor/Pages/AddChapter.razor.cs deleted file mode 100644 index 20e75cf..0000000 --- a/Blazor/Blazor/Pages/AddChapter.razor.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Blazored.LocalStorage; -using Microsoft.AspNetCore.Components.Forms; -using Microsoft.AspNetCore.Components; -using Blazor.Models; -using Blazor.Services; - -namespace Blazor.Pages -{ - public partial class AddChapter - { - private ChapterModel chapterModel = new(); - - [Inject] - public IDataService DataService { get; set; } - - [Inject] - public NavigationManager NavigationManager { get; set; } - - - private async void HandleValidSubmit() - { - await DataService.Add(chapterModel); - - NavigationManager.NavigateTo("chapters"); - } - - } -} diff --git a/Blazor/Blazor/Pages/Administrators.razor.cs b/Blazor/Blazor/Pages/Administrators.razor.cs deleted file mode 100644 index 82fb218..0000000 --- a/Blazor/Blazor/Pages/Administrators.razor.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Microsoft.AspNetCore.Components; -using Blazorise.DataGrid; -using Blazor.ViewClasses; - -namespace Blazor.Pages -{ - public partial class Administrators - { - public List administrators; - - private int totalItem; - - [Inject] - public HttpClient Http { get; set; } - - [Inject] - public NavigationManager NavigationManager { get; set; } - - private async Task OnReadData(DataGridReadDataEventArgs e) - { - if (e.CancellationToken.IsCancellationRequested) - { - return; - } - - // 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(); - - 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 - } - } - } -} diff --git a/Blazor/Blazor/Pages/Admins.razor b/Blazor/Blazor/Pages/Admins.razor deleted file mode 100644 index 74ddbb0..0000000 --- a/Blazor/Blazor/Pages/Admins.razor +++ /dev/null @@ -1,47 +0,0 @@ -@page "/admins" -@using Blazor.Data -@inject WeatherForecastService ForecastService - -Weather forecast - -

Weather forecast

- -

This component demonstrates fetching data from a service.

- -@if (forecasts == null) -{ -

Loading...

-} -else -{ - - - - - - - - - - - @foreach (var forecast in forecasts) - { - - - - - - - } - -
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
-} - -@code { - private WeatherForecast[]? forecasts; - - protected override async Task OnInitializedAsync() - { - forecasts = await ForecastService.GetForecastAsync(DateOnly.FromDateTime(DateTime.Now)); - } -} diff --git a/Blazor/Blazor/Pages/Admins.razor.cs b/Blazor/Blazor/Pages/Admins.razor.cs deleted file mode 100644 index af73c75..0000000 --- a/Blazor/Blazor/Pages/Admins.razor.cs +++ /dev/null @@ -1,61 +0,0 @@ -using Blazor.Models; -using Blazored.LocalStorage; -using Blazorise.DataGrid; -using Microsoft.AspNetCore.Components; - -namespace Blazor.Pages; -public partial class Admins -{ - private List items; - - private int totalItem; - - [Inject] - public IWebHostEnvironment WebHostEnvironment { get; set; } - - [Inject] - public HttpClient Http { get; set; } - - [Inject] - public ILocalStorageService LocalStorage { get; set; } - - [Inject] - public NavigationManager NavigationManager { get; set; } - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - // Do not treat this action if is not the first render - if (!firstRender) - { - return; - } - - 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; - await LocalStorage.SetItemAsync("data", originalData); - } - } - - private async Task OnReadData(DataGridReadDataEventArgs e) - { - if (e.CancellationToken.IsCancellationRequested) - { - return; - } - - // 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 LocalStorage.GetItemAsync("data")).Skip((e.Page - 1) * e.PageSize).Take(e.PageSize).ToList(); - - if (!e.CancellationToken.IsCancellationRequested) - { - totalItem = (await LocalStorage.GetItemAsync>("data")).Count; - items = new List(response); // an actual data for the current page - } - } -} \ No newline at end of file diff --git a/Blazor/Blazor/Pages/Administrators.razor b/Blazor/Blazor/Pages/Admins/Administrators.razor similarity index 100% rename from Blazor/Blazor/Pages/Administrators.razor rename to Blazor/Blazor/Pages/Admins/Administrators.razor diff --git a/Blazor/Blazor/Pages/Admins/Administrators.razor.cs b/Blazor/Blazor/Pages/Admins/Administrators.razor.cs new file mode 100644 index 0000000..f76c86a --- /dev/null +++ b/Blazor/Blazor/Pages/Admins/Administrators.razor.cs @@ -0,0 +1,36 @@ +using Microsoft.AspNetCore.Components; +using Blazorise.DataGrid; +using Blazor.ViewClasses; + +namespace Blazor.Pages.Admins; + +public partial class Administrators +{ + public List administrators; + + private int totalItem; + + [Inject] + public HttpClient Http { get; set; } + + [Inject] + public NavigationManager NavigationManager { get; set; } + + private async Task OnReadData(DataGridReadDataEventArgs e) + { + if (e.CancellationToken.IsCancellationRequested) + { + return; + } + + // 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(); + + 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 + } + } +} diff --git a/Blazor/Blazor/Pages/AddChapter.razor b/Blazor/Blazor/Pages/Chapters/AddChapter.razor similarity index 100% rename from Blazor/Blazor/Pages/AddChapter.razor rename to Blazor/Blazor/Pages/Chapters/AddChapter.razor diff --git a/Blazor/Blazor/Pages/Chapters/AddChapter.razor.cs b/Blazor/Blazor/Pages/Chapters/AddChapter.razor.cs new file mode 100644 index 0000000..67e2c17 --- /dev/null +++ b/Blazor/Blazor/Pages/Chapters/AddChapter.razor.cs @@ -0,0 +1,27 @@ +using Blazored.LocalStorage; +using Microsoft.AspNetCore.Components.Forms; +using Microsoft.AspNetCore.Components; +using Blazor.Models; +using Blazor.Services; + +namespace Blazor.Pages.Chapters; + +public partial class AddChapter +{ + private ChapterModel chapterModel = new(); + + [Inject] + public IDataService DataService { get; set; } + + [Inject] + public NavigationManager NavigationManager { get; set; } + + + private async void HandleValidSubmit() + { + await DataService.Add(chapterModel); + + NavigationManager.NavigateTo("chapters"); + } + +} diff --git a/Blazor/Blazor/Pages/Chapters.razor b/Blazor/Blazor/Pages/Chapters/Chapters.razor similarity index 80% rename from Blazor/Blazor/Pages/Chapters.razor rename to Blazor/Blazor/Pages/Chapters/Chapters.razor index f705ba1..fd6c3cb 100644 --- a/Blazor/Blazor/Pages/Chapters.razor +++ b/Blazor/Blazor/Pages/Chapters/Chapters.razor @@ -10,6 +10,10 @@ Exporter + + Importer + + chapters; +{ + public List chapters; private int totalChapter; - [Inject] - public IDataService DataService { get; set; } + [Inject] + public IDataService DataService { get; set; } public IWebHostEnvironment WebHostEnvironment { get; set; } - [Inject] + [Inject] public HttpClient Http { get; set; } [Inject] @@ -51,18 +53,18 @@ public partial class Chapters } private async Task OnReadData(DataGridReadDataEventArgs e) + { + if (e.CancellationToken.IsCancellationRequested) { - if (e.CancellationToken.IsCancellationRequested) - { - return; - } + 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) - { + if (!e.CancellationToken.IsCancellationRequested) + { totalChapter = (await LocalStorage.GetItemAsync>("data")).Count; chapters = new List(response); // an actual data for the current page } @@ -79,7 +81,7 @@ public partial class Chapters { csvFile.Write(jsonFile); } - } + } var sentFile = new MemoryStream(Encoding.UTF32.GetBytes(sb.ToString())); @@ -88,4 +90,71 @@ public partial class Chapters await IJSRuntime.InvokeVoidAsync("downloadFileFromStream", "data.csv", streamRef); } } + private async void Import() + { + + // for + // { + // var formData = new MultipartFormDataContent(); + // } + } + private async Task SingleUpload(InputFileChangeEventArgs e) + { + using (MemoryStream ms = new MemoryStream()) + { + await e.File.OpenReadStream().CopyToAsync(ms); + var bytes = ms.ToArray(); + string s = Encoding.UTF8.GetString(bytes); + + char[] invalidChars = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '\r', '\n', ',', ' ' }; + + List filteredStrings = new List(); + StringBuilder filteredString = new StringBuilder(); + + foreach (var c in s) + { + if (!invalidChars.Contains(c)) + { + filteredString.Append(c); + } + else + { + if (filteredString.Length > 0) + { + filteredStrings.Add(filteredString.ToString()); + filteredString.Clear(); + } + } + } + + if (filteredString.Length > 0) + { + filteredStrings.Add(filteredString.ToString()); + } + foreach (var filteredStr in filteredStrings) + { + var formData = new List>(); + formData.Add(new KeyValuePair("name", filteredStr)); + + + var formContent = new FormUrlEncodedContent(formData); + + string apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/add/chapters"; + + 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(); + } + } + } + } + } } diff --git a/Blazor/Blazor/Pages/Chapters.razor.js b/Blazor/Blazor/Pages/Chapters/Chapters.razor.js similarity index 100% rename from Blazor/Blazor/Pages/Chapters.razor.js rename to Blazor/Blazor/Pages/Chapters/Chapters.razor.js diff --git a/Blazor/Blazor/Pages/EditChapter.razor b/Blazor/Blazor/Pages/Chapters/EditChapter.razor similarity index 100% rename from Blazor/Blazor/Pages/EditChapter.razor rename to Blazor/Blazor/Pages/Chapters/EditChapter.razor diff --git a/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs b/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs new file mode 100644 index 0000000..6fb7e9c --- /dev/null +++ b/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs @@ -0,0 +1,41 @@ +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); + + NavigationManager.NavigateTo("chapters"); + } +} diff --git a/Blazor/Blazor/Pages/Counter.razor b/Blazor/Blazor/Pages/Counter.razor deleted file mode 100644 index ef23cb3..0000000 --- a/Blazor/Blazor/Pages/Counter.razor +++ /dev/null @@ -1,18 +0,0 @@ -@page "/counter" - -Counter - -

Counter

- -

Current count: @currentCount

- - - -@code { - private int currentCount = 0; - - private void IncrementCount() - { - currentCount++; - } -} diff --git a/Blazor/Blazor/Pages/EditChapter.razor.cs b/Blazor/Blazor/Pages/EditChapter.razor.cs deleted file mode 100644 index 52af970..0000000 --- a/Blazor/Blazor/Pages/EditChapter.razor.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Blazor.Models; -using Blazor.Services; -using Microsoft.AspNetCore.Components; - -namespace Blazor.Pages -{ - 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); - - NavigationManager.NavigateTo("chapters"); - } - } -} diff --git a/Blazor/Blazor/Pages/Questions.razor.cs b/Blazor/Blazor/Pages/Questions.razor.cs deleted file mode 100644 index 2a62003..0000000 --- a/Blazor/Blazor/Pages/Questions.razor.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Blazor.Pages; - -public partial class Questions -{ -} - diff --git a/Blazor/Blazor/Pages/Questions.razor b/Blazor/Blazor/Pages/Questions/Questions.razor similarity index 100% rename from Blazor/Blazor/Pages/Questions.razor rename to Blazor/Blazor/Pages/Questions/Questions.razor diff --git a/Blazor/Blazor/Pages/Questions/Questions.razor.cs b/Blazor/Blazor/Pages/Questions/Questions.razor.cs new file mode 100644 index 0000000..86bf53b --- /dev/null +++ b/Blazor/Blazor/Pages/Questions/Questions.razor.cs @@ -0,0 +1,6 @@ +namespace Blazor.Pages.Questions; + +public partial class Questions +{ +} +