diff --git a/.drone.yml b/.drone.yml index 05bc48e..53d61fd 100755 --- a/.drone.yml +++ b/.drone.yml @@ -19,14 +19,15 @@ steps: commands: - cd Blazor/ - dotnet restore Blazor.sln - - dotnet test Blazor.sln --no-restore + - dotnet sonarscanner begin /k:MuscuMaths /d:sonar.host.url=$${PLUGIN_SONAR_HOST} /d:sonar.login=$${PLUGIN_SONAR_TOKEN} + - dotnet test Blazor.sln --logger trx --no-restore /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --collect "XPlat Code Coverage" + - reportgenerator -reports:"/coverage.cobertura.xml" -reporttypes:SonarQube -targetdir:"coveragereport" -verbosity:Verbose + depends_on: [build] - name: code-analysis image: hub.codefirst.iut.uca.fr/marc.chevaldonne/codefirst-dronesonarplugin-dotnet7 commands: - - echo $$PLUGIN_SONAR_TOKEN - - echo $$PLUGIN_SONAR_HOST - cd Blazor/ - dotnet restore Blazor.sln - dotnet sonarscanner begin /k:MuscuMaths /d:sonar.host.url=$${PLUGIN_SONAR_HOST} /d:sonar.login=$${PLUGIN_SONAR_TOKEN} diff --git a/Blazor/Blazor/Components/DisplayQuestions.razor.cs b/Blazor/Blazor/Components/DisplayQuestions.razor.cs index 91383e1..af7486b 100644 --- a/Blazor/Blazor/Components/DisplayQuestions.razor.cs +++ b/Blazor/Blazor/Components/DisplayQuestions.razor.cs @@ -15,10 +15,10 @@ namespace Blazor.Components public Question question = new(); private List answers = new(); - public List questions; + public List questions = new(); [Inject] - public HttpClient Http { get; set; } + public required HttpClient Http { get; set; } protected override async Task OnInitializedAsync() { diff --git a/Blazor/Blazor/Modals/DeleteConfirmation.razor.cs b/Blazor/Blazor/Modals/DeleteConfirmation.razor.cs index b6f8431..4ff91c2 100644 --- a/Blazor/Blazor/Modals/DeleteConfirmation.razor.cs +++ b/Blazor/Blazor/Modals/DeleteConfirmation.razor.cs @@ -9,22 +9,14 @@ namespace Blazor.Modals public partial class DeleteConfirmation { [CascadingParameter] - public BlazoredModalInstance ModalInstance { get; set; } + public required BlazoredModalInstance ModalInstance { get; set; } [Inject] - public IDataService DataService { get; set; } + public required IDataService DataService { get; set; } [Parameter] public int Id { get; set; } - //private Chapter chapter = new Chapter(); - - //protected override async Task OnInitializedAsync() - - // // Get the chapter - // chapter = await DataService.GetById(Id); - //} - void ConfirmDelete() { ModalInstance.CloseAsync(ModalResult.Ok(true)); diff --git a/Blazor/Blazor/Models/AdministratorModel.cs b/Blazor/Blazor/Models/AdministratorModel.cs index 89e5042..7331a39 100644 --- a/Blazor/Blazor/Models/AdministratorModel.cs +++ b/Blazor/Blazor/Models/AdministratorModel.cs @@ -8,8 +8,8 @@ namespace Blazor.Models; public class AdministratorModel { public int Id { get; set; } - public string Username { get; set; } - public string HashedPassword { get; set; } + public required string Username { get; set; } + public required string HashedPassword { get; set; } public void HashPassword(string password) { diff --git a/Blazor/Blazor/Models/AnswerModel.cs b/Blazor/Blazor/Models/AnswerModel.cs index 2afbb19..6b59e83 100644 --- a/Blazor/Blazor/Models/AnswerModel.cs +++ b/Blazor/Blazor/Models/AnswerModel.cs @@ -4,8 +4,8 @@ public class AnswerModel { public int Id { get; set; } - public string Content { get; set; } - public int IdQuestion { get; set; } + public string? Content { get; set; } + public int? IdQuestion { get; set; } public AnswerModel(int id) { Id = id; diff --git a/Blazor/Blazor/Models/ChapterModel.cs b/Blazor/Blazor/Models/ChapterModel.cs index 44915a5..7a6d9bc 100644 --- a/Blazor/Blazor/Models/ChapterModel.cs +++ b/Blazor/Blazor/Models/ChapterModel.cs @@ -8,6 +8,6 @@ namespace Blazor.Models [Required(ErrorMessage = "Name is required")] [StringLength(50, ErrorMessage = "Name is too long.")] - public string Name { get; set; } + public required string Name { get; set; } } } diff --git a/Blazor/Blazor/Models/PlayerModel.cs b/Blazor/Blazor/Models/PlayerModel.cs index 43c37a0..84572aa 100644 --- a/Blazor/Blazor/Models/PlayerModel.cs +++ b/Blazor/Blazor/Models/PlayerModel.cs @@ -7,8 +7,8 @@ namespace Blazor.Models; public class PlayerModel { public int Id { get; set; } - public string Nickname { get; set; } - public string HashedPassword { get; set; } + public required string Nickname { get; set; } + public required string HashedPassword { get; set; } public void HashPassword(string password) { diff --git a/Blazor/Blazor/Models/QuestionModel.cs b/Blazor/Blazor/Models/QuestionModel.cs index ecdc5df..586a456 100644 --- a/Blazor/Blazor/Models/QuestionModel.cs +++ b/Blazor/Blazor/Models/QuestionModel.cs @@ -3,13 +3,12 @@ public class QuestionModel { public int Id { get; set; } - public string Content { get; set; } + public required string Content { get; set; } public int IdChapter { get; set; } - public int? IdAnswerGood { get; set; } + public int IdAnswerGood { get; set; } public int Difficulty { get; set; } public int NbFails { get; set; } - public void addFails(int nb) { NbFails += nb; } public void removeFails(int nb) { NbFails -= nb; } } diff --git a/Blazor/Blazor/Pages/Admins/AddAdministrator.razor b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor index b198619..7742c74 100644 --- a/Blazor/Blazor/Pages/Admins/AddAdministrator.razor +++ b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor @@ -2,7 +2,6 @@ @using Blazor.Models

AddAdministrator

- diff --git a/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs index 23b3d6a..e73d03a 100644 --- a/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs +++ b/Blazor/Blazor/Pages/Admins/AddAdministrator.razor.cs @@ -6,47 +6,50 @@ namespace Blazor.Pages.Admins { public partial class AddAdministrator { - private AdministratorModel administratorModel = new(); + private AdministratorModel? administratorModel; [Inject] - public IDataService DataService { get; set; } + public required IDataService DataService { get; set; } [Inject] - public NavigationManager NavigationManager { get; set; } + public required NavigationManager NavigationManager { get; set; } [Inject] - public ILogger Logger { get; set; } + public required ILogger Logger { get; set; } private async Task HandleValidSubmit() { - administratorModel.HashPassword(administratorModel.HashedPassword); - - 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 = API.API_URL+"add/administrator/"+API.TOKEN; - - 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(); - } + if (administratorModel != null) + { + administratorModel.HashPassword(administratorModel.HashedPassword); + + 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 = API.API_URL + "add/administrator/" + API.TOKEN; + + 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"); } - - 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 d99d06e..891f1f8 100644 --- a/Blazor/Blazor/Pages/Admins/Administrators.razor.cs +++ b/Blazor/Blazor/Pages/Admins/Administrators.razor.cs @@ -11,26 +11,26 @@ namespace Blazor.Pages.Admins; public partial class Administrators { - public List administrators; + public List administrators = new(); private int totalItem; [CascadingParameter] - public IModalService Modal { get; set; } + public required IModalService Modal { get; set; } [Inject] - public IDataService DataService { get; set; } + public required IDataService DataService { get; set; } [Inject] - public IWebHostEnvironment WebHostEnvironment { get; set; } + public required IWebHostEnvironment WebHostEnvironment { get; set; } [Inject] - public ILocalStorageService LocalStorage { get; set; } + public required ILocalStorageService LocalStorage { get; set; } [Inject] - public HttpClient Http { get; set; } + public required HttpClient Http { get; set; } [Inject] - public NavigationManager NavigationManager { get; set; } + public required NavigationManager NavigationManager { get; set; } private async Task OnReadData(DataGridReadDataEventArgs e) { @@ -41,7 +41,7 @@ public partial class Administrators var response = Http.GetFromJsonAsync(API.API_URL+"administrators/"+API.TOKEN).Result; - if (!e.CancellationToken.IsCancellationRequested) + if (!e.CancellationToken.IsCancellationRequested && response != null) { administrators = new List(response); // an actual data for the current page totalItem = administrators.Count; diff --git a/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs b/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs index 3d91c64..c5fd294 100644 --- a/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs +++ b/Blazor/Blazor/Pages/Admins/EditAdministrator.razor.cs @@ -10,21 +10,21 @@ namespace Blazor.Pages.Admins [Parameter] public int Id { get; set; } - private AdministratorModel administratorModel = new(); + private AdministratorModel? administratorModel; [Inject] - public IDataService DataService { get; set; } + public required IDataService DataService { get; set; } [Inject] - public NavigationManager NavigationManager { get; set; } + public required NavigationManager NavigationManager { get; set; } [Inject] - public IWebHostEnvironment WebHostEnvironment { get; set; } + public required IWebHostEnvironment WebHostEnvironment { get; set; } [Inject] - public ILogger Logger { get; set; } + public required ILogger Logger { get; set; } - private string OldAdminName { get; set; } + private string OldAdminName { get; set; } = ""; protected override async Task OnInitializedAsync() { @@ -41,33 +41,36 @@ namespace Blazor.Pages.Admins private async Task HandleValidSubmit() { - administratorModel.HashPassword(administratorModel.HashedPassword); - - 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 = API.API_URL+"update/administrator/" + administratorModel.Id + "/" + API.TOKEN; - - 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(); - } + if (administratorModel != null) + { + administratorModel.HashPassword(administratorModel.HashedPassword); + + 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 = API.API_URL + "update/administrator/" + administratorModel.Id + "/" + API.TOKEN; + + 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 '{OldAdminModelName}' edited in '{NewAdminModelName}'", OldAdminName, administratorModel.Username); + + NavigationManager.NavigateTo("administrators"); } - - Logger.LogInformation("Admin '{OldAdminModelName}' edited in '{NewAdminModelName}'",OldAdminName,administratorModel.Username); - - NavigationManager.NavigateTo("administrators"); } } } diff --git a/Blazor/Blazor/Pages/Chapters/AddChapter.razor.cs b/Blazor/Blazor/Pages/Chapters/AddChapter.razor.cs index 098045b..150dd2a 100644 --- a/Blazor/Blazor/Pages/Chapters/AddChapter.razor.cs +++ b/Blazor/Blazor/Pages/Chapters/AddChapter.razor.cs @@ -6,47 +6,49 @@ namespace Blazor.Pages.Chapters; public partial class AddChapter { - private ChapterModel chapterModel = new(); + private ChapterModel? chapterModel; [Inject] - public IDataService DataService { get; set; } + public required IDataService DataService { get; set; } [Inject] - public NavigationManager NavigationManager { get; set; } + public required NavigationManager NavigationManager { get; set; } [Inject] - public ILogger Logger { get; set; } + public required ILogger Logger { get; set; } private async Task HandleValidSubmit() { - var formData = new List>(); - formData.Add(new KeyValuePair("name", chapterModel.Name)); - - - var formContent = new FormUrlEncodedContent(formData); - - string apiUri = API.API_URL+"add/chapter/"+API.TOKEN; - - 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(); - } + if (chapterModel != null) + { + var formData = new List>(); + formData.Add(new KeyValuePair("name", chapterModel.Name)); + + + var formContent = new FormUrlEncodedContent(formData); + + string apiUri = API.API_URL + "add/chapter/" + API.TOKEN; + + 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("Chapter '{chapterModelName}' added", chapterModel.Name); + + NavigationManager.NavigateTo("chapters"); } - - 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 17b71cd..c2dc0d2 100644 --- a/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs +++ b/Blazor/Blazor/Pages/Chapters/EditChapter.razor.cs @@ -9,7 +9,7 @@ public partial class EditChapter [Parameter] public int Id { get; set; } - private ChapterModel chapterModel = new(); + private ChapterModel? chapterModel; [Inject] public IDataService DataService { get; set; } diff --git a/Blazor/Blazor/Pages/Players/AddPlayer.razor.cs b/Blazor/Blazor/Pages/Players/AddPlayer.razor.cs index e46e775..ffce2cc 100644 --- a/Blazor/Blazor/Pages/Players/AddPlayer.razor.cs +++ b/Blazor/Blazor/Pages/Players/AddPlayer.razor.cs @@ -6,41 +6,44 @@ namespace Blazor.Pages.Players { public partial class AddPlayer { - private PlayerModel playerModel = new(); + private PlayerModel? playerModel; [Inject] - public IDataService DataService { get; set; } + public required IDataService DataService { get; set; } [Inject] - public NavigationManager NavigationManager { get; set; } + public required NavigationManager NavigationManager { get; set; } private async Task HandleValidSubmit() { - playerModel.HashPassword(playerModel.HashedPassword); - - var formData = new List>(); - formData.Add(new KeyValuePair("nickname", playerModel.Nickname)); - formData.Add(new KeyValuePair("password", playerModel.HashedPassword)); + if (playerModel != null) + { + playerModel.HashPassword(playerModel.HashedPassword); - var formContent = new FormUrlEncodedContent(formData); + var formData = new List>(); + formData.Add(new KeyValuePair("nickname", playerModel.Nickname)); + formData.Add(new KeyValuePair("password", playerModel.HashedPassword)); - string apiUri =API.API_URL+"add/player/"+API.TOKEN; + var formContent = new FormUrlEncodedContent(formData); - using (var httpClient = new HttpClient()) - { - var response = await httpClient.PostAsync(apiUri, formContent); + string apiUri = API.API_URL + "add/player/" + API.TOKEN; - if (response.IsSuccessStatusCode) - { - var responseBody = await response.Content.ReadAsStringAsync(); - } - else + using (var httpClient = new HttpClient()) { - var errorResponse = await response.Content.ReadAsStringAsync(); + 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"); } - NavigationManager.NavigateTo("players"); } } } diff --git a/Blazor/Blazor/Pages/Players/EditPlayer.razor.cs b/Blazor/Blazor/Pages/Players/EditPlayer.razor.cs index 1dd4d4a..515e8a6 100644 --- a/Blazor/Blazor/Pages/Players/EditPlayer.razor.cs +++ b/Blazor/Blazor/Pages/Players/EditPlayer.razor.cs @@ -10,16 +10,16 @@ namespace Blazor.Pages.Players [Parameter] public int Id { get; set; } - private PlayerModel playerModel = new(); + private PlayerModel? playerModel; [Inject] - public IDataService DataService { get; set; } + public required IDataService DataService { get; set; } [Inject] - public NavigationManager NavigationManager { get; set; } + public required NavigationManager NavigationManager { get; set; } [Inject] - public IWebHostEnvironment WebHostEnvironment { get; set; } + public required IWebHostEnvironment WebHostEnvironment { get; set; } protected override async Task OnInitializedAsync() { diff --git a/Blazor/Blazor/Pages/Players/Players.razor.cs b/Blazor/Blazor/Pages/Players/Players.razor.cs index 5035e2e..36a5214 100644 --- a/Blazor/Blazor/Pages/Players/Players.razor.cs +++ b/Blazor/Blazor/Pages/Players/Players.razor.cs @@ -17,23 +17,24 @@ public partial class Players private int totalPlayer; [Inject] - public NavigationManager NavigationManager { get; set; } + public required NavigationManager NavigationManager { get; set; } [CascadingParameter] - public IModalService Modal { get; set; } + public required IModalService Modal { get; set; } [Inject] - public IDataService DataService { get; set; } - public IWebHostEnvironment WebHostEnvironment { get; set; } + public required IDataService DataService { get; set; } + [Inject] + public required IWebHostEnvironment WebHostEnvironment { get; set; } [Inject] - public HttpClient Http { get; set; } + public required HttpClient Http { get; set; } [Inject] - public ILocalStorageService LocalStorage { get; set; } + public required ILocalStorageService LocalStorage { get; set; } [Inject] - public IJSRuntime IJSRuntime { get; set; } + public required IJSRuntime IJSRuntime { get; set; } private async void OnDelete(int id) { diff --git a/Blazor/Blazor/Pages/Questions/AddQuestion.razor.cs b/Blazor/Blazor/Pages/Questions/AddQuestion.razor.cs index 7c5f149..b67ed9d 100644 --- a/Blazor/Blazor/Pages/Questions/AddQuestion.razor.cs +++ b/Blazor/Blazor/Pages/Questions/AddQuestion.razor.cs @@ -9,13 +9,13 @@ namespace Blazor.Pages.Questions { public partial class AddQuestion { - private QuestionModel questionModel = new(); + private QuestionModel? questionModel; - public List chapters; + public List chapters = new(); - private List answerModels; + private List answerModels = new(); - private List checkboxs; + public List checkboxs = new(); [Inject] public required IDataService DataService { get; set; } @@ -24,10 +24,10 @@ namespace Blazor.Pages.Questions public required NavigationManager NavigationManager { get; set; } [Inject] - public HttpClient Http { get; set; } + public required HttpClient Http { get; set; } [Inject] - public ILogger Logger { get; set; } + public required ILogger Logger { get; set; } public class Checkbox { public int Id { get; set; } @@ -50,10 +50,18 @@ namespace Blazor.Pages.Questions checkboxs.Add(new Checkbox(i)); } } - private async void HandleValidSubmit() - { - await DataService.Add(questionModel); + protected override async Task OnInitializedAsync() + { + var response = Http.GetFromJsonAsync(API.API_URL + "chapters/" + API.TOKEN).Result; + if (response == null) chapters = new List(); + else chapters = new List(response); + } + private async Task HandleValidSubmit() + { + if (questionModel != null) + { + await DataService.Add(questionModel); var formData = new List>(); formData.Add(new KeyValuePair("content", questionModel.Content)); @@ -75,23 +83,24 @@ namespace Blazor.Pages.Questions var formContent = new FormUrlEncodedContent(formData); - string apiUri = API.API_URL+"add/question/"+API.TOKEN; + string apiUri = API.API_URL + "add/question/" + API.TOKEN; - using (var httpClient = new HttpClient()) - { - var response = await httpClient.PostAsync(apiUri, formContent); - - if (response.IsSuccessStatusCode) - { - var responseBody = await response.Content.ReadAsStringAsync(); - } - else + using (var httpClient = new HttpClient()) { - var errorResponse = await response.Content.ReadAsStringAsync(); + 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("questions"); + NavigationManager.NavigateTo("questions"); + } } } } diff --git a/Blazor/Blazor/Pages/Questions/EditQuestion.razor.cs b/Blazor/Blazor/Pages/Questions/EditQuestion.razor.cs index 50a0e94..948ce85 100644 --- a/Blazor/Blazor/Pages/Questions/EditQuestion.razor.cs +++ b/Blazor/Blazor/Pages/Questions/EditQuestion.razor.cs @@ -11,7 +11,7 @@ namespace Blazor.Pages.Questions [Parameter] public int Id { get; set; } - private QuestionModel questionModel = new(); + private QuestionModel? questionModel; [Inject] public required IDataService DataService { get; set; }