diff --git a/WF-WebAdmin/WF-WebAdmin/Model/Quiz.cs b/WF-WebAdmin/WF-WebAdmin/Model/Quiz.cs index c6035df..0e08045 100644 --- a/WF-WebAdmin/WF-WebAdmin/Model/Quiz.cs +++ b/WF-WebAdmin/WF-WebAdmin/Model/Quiz.cs @@ -9,6 +9,7 @@ namespace WF_WebAdmin.Model public string AnswerC { get; set; } public string AnswerD { get; set; } public string CAnswer { get; set; } + public bool IsValid { get; set; } public string UserProposition { get; set; } } } \ No newline at end of file diff --git a/WF-WebAdmin/WF-WebAdmin/Pages/ValidQuiz.razor.cs b/WF-WebAdmin/WF-WebAdmin/Pages/ValidQuiz.razor.cs index d907e84..76b5d55 100644 --- a/WF-WebAdmin/WF-WebAdmin/Pages/ValidQuiz.razor.cs +++ b/WF-WebAdmin/WF-WebAdmin/Pages/ValidQuiz.razor.cs @@ -1,23 +1,27 @@ using Blazorise.DataGrid; using Microsoft.AspNetCore.Components; using WF_WebAdmin.Model; +using WF_WebAdmin.Service; namespace WF_WebAdmin.Pages { public partial class ValidQuiz { - private Quiz[] quizzes; - private int totalQuizzes; + private List quizzes; + [Inject] public HttpClient Http { get; set; } [Inject] public NavigationManager NavigationManager { get; set; } + + [Inject] + public IQuizServiceJson QuizService { get; set; } protected override async Task OnInitializedAsync() { - quizzes = await Http.GetFromJsonAsync($"{NavigationManager.BaseUri}fake-dataQuiz.json"); + quizzes = await QuizService.getQuizzesToValidateJson(); } private void OnValidButton(Quiz quiz) @@ -28,6 +32,12 @@ namespace WF_WebAdmin.Pages private void ValidateQuiz(Quiz quiz) { Console.WriteLine($"Quiz {quiz.Id} validated!"); + + Quiz newQuiz = quiz; + newQuiz.IsValid = true; + + // Mis à jour de l'état du quiz + QuizService.updateQuizJson(quiz); } private void OnRejectButton(Quiz quiz) @@ -38,6 +48,8 @@ namespace WF_WebAdmin.Pages private void RejectQuiz(Quiz quiz) { Console.WriteLine($"Quiz {quiz.Id} rejected!"); + + QuizService.removeQuizJson(quiz.Id); } } } \ No newline at end of file diff --git a/WF-WebAdmin/WF-WebAdmin/Program.cs b/WF-WebAdmin/WF-WebAdmin/Program.cs index 2a03f66..8ce6fde 100644 --- a/WF-WebAdmin/WF-WebAdmin/Program.cs +++ b/WF-WebAdmin/WF-WebAdmin/Program.cs @@ -14,6 +14,7 @@ builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddSingleton(); builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Services.AddHttpClient(); builder.Services.AddScoped(); diff --git a/WF-WebAdmin/WF-WebAdmin/Service/IQuizService.cs b/WF-WebAdmin/WF-WebAdmin/Service/IQuizService.cs new file mode 100644 index 0000000..bc7bb44 --- /dev/null +++ b/WF-WebAdmin/WF-WebAdmin/Service/IQuizService.cs @@ -0,0 +1,24 @@ +using WF_WebAdmin.Model; + +namespace WF_WebAdmin.Service +{ + public interface IQuizService + { + public Task addQuiz(Quiz quiz); + + public Task updateQuiz(Quiz quiz); + + public Task removeQuiz(int id); + + public Task validateQuiz(int id); + + public Task> getQuizzes(); + + public Task> getQuizzesToValidate(); + + public Task getQuiz(int id); + + public Task getNbQuiz(); + } +} + \ No newline at end of file diff --git a/WF-WebAdmin/WF-WebAdmin/Service/IQuizServiceJson.cs b/WF-WebAdmin/WF-WebAdmin/Service/IQuizServiceJson.cs new file mode 100644 index 0000000..9d51396 --- /dev/null +++ b/WF-WebAdmin/WF-WebAdmin/Service/IQuizServiceJson.cs @@ -0,0 +1,17 @@ +using WF_WebAdmin.Model; + +namespace WF_WebAdmin.Service +{ + public interface IQuizServiceJson + { + public Task> getQuizzesJson(); + + public Task> getQuizzesToValidateJson(); + + public Task removeQuizJson(int id); + + public Task updateQuizJson(Quiz quiz); + + public Task saveQuizJson(List quiz); + } +} \ No newline at end of file diff --git a/WF-WebAdmin/WF-WebAdmin/Service/QuizService.cs b/WF-WebAdmin/WF-WebAdmin/Service/QuizService.cs deleted file mode 100644 index 2a6c75f..0000000 --- a/WF-WebAdmin/WF-WebAdmin/Service/QuizService.cs +++ /dev/null @@ -1,25 +0,0 @@ -using WF_WebAdmin.Model; - -namespace WF_WebAdmin.Service; - -public class QuizService -{ - public List GetQuizToConfirm() - { - var res = new List(); - - return res; - } - - public bool AddQuiz(Quiz quiz) - { - var res = false; - return res; - } - - public bool RemoveQuiz(Quiz quiz) - { - var res = false; - return res; - } -} \ No newline at end of file diff --git a/WF-WebAdmin/WF-WebAdmin/Service/QuizServiceStub.cs b/WF-WebAdmin/WF-WebAdmin/Service/QuizServiceStub.cs new file mode 100644 index 0000000..b34a439 --- /dev/null +++ b/WF-WebAdmin/WF-WebAdmin/Service/QuizServiceStub.cs @@ -0,0 +1,63 @@ +using System.Text.Json; +using WF_WebAdmin.Model; + +namespace WF_WebAdmin.Service; + +public class QuizServiceStub: IQuizServiceJson +{ + private readonly string _jsonFilePath = + Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake_data_quiz.json"); + + public async Task> getQuizzesJson() + { + if (!File.Exists(_jsonFilePath)) + { + Console.Out.WriteLine($"{_jsonFilePath} not found"); + return new List(); + } + + var json = await File.ReadAllTextAsync(_jsonFilePath); + return JsonSerializer.Deserialize>(json) ?? new List(); + } + + public async Task> getQuizzesToValidateJson() + { + var quizzes = await getQuizzesJson(); + return quizzes.Where(quiz => quiz.IsValid == false).ToList();; + } + + public async Task removeQuizJson(int id) + { + var data = await getQuizzesJson(); + var quiz = data.FirstOrDefault(q => q.Id == id); + if (quiz != null) + { + data.Remove(quiz); + await saveQuizJson(data); + } + } + + public async Task updateQuizJson(Quiz quiz) + { + var data = await getQuizzesJson(); + var existingQuiz = data.FirstOrDefault(q => q.Id == quiz.Id); + if (existingQuiz != null) + { + existingQuiz.Question = quiz.Question; + existingQuiz.AnswerA = quiz.AnswerA; + existingQuiz.AnswerB = quiz.AnswerB; + existingQuiz.AnswerC = quiz.AnswerC; + existingQuiz.AnswerD = quiz.AnswerD; + existingQuiz.CAnswer = quiz.CAnswer; + existingQuiz.IsValid = quiz.IsValid; + existingQuiz.UserProposition = quiz.UserProposition; + await saveQuizJson(data); + } + } + + public async Task saveQuizJson(List quizzes) + { + var json = JsonSerializer.Serialize(quizzes, new JsonSerializerOptions { WriteIndented = true }); + await File.WriteAllTextAsync(_jsonFilePath, json); + } +} diff --git a/WF-WebAdmin/WF-WebAdmin/wwwroot/fake-dataQuiz.json b/WF-WebAdmin/WF-WebAdmin/wwwroot/fake-dataQuiz.json deleted file mode 100644 index 24eb012..0000000 --- a/WF-WebAdmin/WF-WebAdmin/wwwroot/fake-dataQuiz.json +++ /dev/null @@ -1,282 +0,0 @@ -[ - { - "id": 1, - "question": "Voluptate nulla laborum pariatur excepteur consequat officia ea esse ut nisi amet non.", - "answerA": "sit ullamco", - "answerB": "deserunt reprehenderit", - "answerC": "cupidatat deserunt", - "answerD": "ullamco aliqua", - "cAnswer": "B", - "userProposition": "Lori Myers" - }, - { - "id": 2, - "question": "Ea elit esse minim aute aliquip cillum amet cupidatat fugiat exercitation.", - "answerA": "ullamco excepteur", - "answerB": "aliquip occaecat", - "answerC": "incididunt duis", - "answerD": "sunt dolor", - "cAnswer": "A", - "userProposition": "Louella Robinson" - }, - { - "id": 3, - "question": "Aute commodo est proident sunt nulla est cillum eiusmod est voluptate dolore sit aliqua incididunt.", - "answerA": "reprehenderit mollit", - "answerB": "laboris consectetur", - "answerC": "cillum deserunt", - "answerD": "deserunt fugiat", - "cAnswer": "B", - "userProposition": "Richmond Joyner" - }, - { - "id": 4, - "question": "Fugiat duis excepteur non amet tempor deserunt ut occaecat cupidatat eiusmod et amet enim.", - "answerA": "amet aute", - "answerB": "excepteur ad", - "answerC": "laboris veniam", - "answerD": "veniam in", - "cAnswer": "B", - "userProposition": "Brady Patrick" - }, - { - "id": 5, - "question": "Occaecat minim velit dolor est ad ut irure eu labore velit in dolore exercitation.", - "answerA": "eu aliqua", - "answerB": "labore ipsum", - "answerC": "labore reprehenderit", - "answerD": "anim excepteur", - "cAnswer": "C", - "userProposition": "Mavis Boone" - }, - { - "id": 6, - "question": "Non laboris adipisicing anim fugiat labore excepteur tempor elit in.", - "answerA": "in excepteur", - "answerB": "nostrud dolor", - "answerC": "nisi aliqua", - "answerD": "sint nisi", - "cAnswer": "C", - "userProposition": "Douglas Dejesus" - }, - { - "id": 7, - "question": "Lorem proident exercitation elit fugiat do amet aute labore consectetur pariatur consequat.", - "answerA": "eiusmod nulla", - "answerB": "eu id", - "answerC": "proident tempor", - "answerD": "amet proident", - "cAnswer": "A", - "userProposition": "Mia Peterson" - }, - { - "id": 8, - "question": "Incididunt magna commodo laborum do incididunt commodo proident non cillum magna elit irure voluptate.", - "answerA": "laborum fugiat", - "answerB": "laboris est", - "answerC": "in ea", - "answerD": "duis ullamco", - "cAnswer": "A", - "userProposition": "Juliet Fox" - }, - { - "id": 9, - "question": "Qui labore fugiat sint Lorem ut minim in ex dolor.", - "answerA": "et deserunt", - "answerB": "labore sit", - "answerC": "in eiusmod", - "answerD": "amet incididunt", - "cAnswer": "C", - "userProposition": "Earnestine Poole" - }, - { - "id": 10, - "question": "Voluptate pariatur ipsum magna sint Lorem adipisicing.", - "answerA": "sint velit", - "answerB": "non culpa", - "answerC": "nisi ut", - "answerD": "excepteur labore", - "cAnswer": "B", - "userProposition": "Alexis Cross" - }, - { - "id": 11, - "question": "In labore sunt est cupidatat cillum.", - "answerA": "ut ad", - "answerB": "non deserunt", - "answerC": "do officia", - "answerD": "ut nostrud", - "cAnswer": "C", - "userProposition": "Brooks Martinez" - }, - { - "id": 12, - "question": "Irure occaecat sit laborum nulla ea dolore et aliqua sunt Lorem enim esse.", - "answerA": "excepteur occaecat", - "answerB": "pariatur in", - "answerC": "reprehenderit excepteur", - "answerD": "laborum adipisicing", - "cAnswer": "D", - "userProposition": "Shields Roth" - }, - { - "id": 13, - "question": "Laboris sint in sit exercitation nisi id cillum ex ea culpa fugiat in cupidatat.", - "answerA": "labore mollit", - "answerB": "in veniam", - "answerC": "labore eiusmod", - "answerD": "consequat veniam", - "cAnswer": "B", - "userProposition": "Carmella Chase" - }, - { - "id": 14, - "question": "Proident dolor Lorem anim proident laborum sint minim sit laborum aliquip.", - "answerA": "velit exercitation", - "answerB": "voluptate esse", - "answerC": "occaecat cupidatat", - "answerD": "enim adipisicing", - "cAnswer": "D", - "userProposition": "Johns Solomon" - }, - { - "id": 15, - "question": "Do magna dolore enim laborum consequat reprehenderit nisi consequat nostrud.", - "answerA": "proident do", - "answerB": "labore minim", - "answerC": "in elit", - "answerD": "in irure", - "cAnswer": "A", - "userProposition": "Alana Moore" - }, - { - "id": 16, - "question": "Culpa anim id elit dolore veniam.", - "answerA": "ipsum nisi", - "answerB": "officia voluptate", - "answerC": "in excepteur", - "answerD": "ullamco non", - "cAnswer": "B", - "userProposition": "Russo Rios" - }, - { - "id": 17, - "question": "Ea est consectetur exercitation aute ut mollit pariatur irure aute adipisicing dolore.", - "answerA": "fugiat elit", - "answerB": "pariatur nulla", - "answerC": "exercitation ipsum", - "answerD": "exercitation laboris", - "cAnswer": "A", - "userProposition": "Bobbi Lara" - }, - { - "id": 18, - "question": "Laborum consectetur incididunt ad fugiat fugiat proident culpa mollit laborum.", - "answerA": "elit duis", - "answerB": "amet aute", - "answerC": "culpa nostrud", - "answerD": "do pariatur", - "cAnswer": "D", - "userProposition": "Lewis Mullins" - }, - { - "id": 19, - "question": "Culpa anim aliquip mollit non labore.", - "answerA": "labore incididunt", - "answerB": "laborum non", - "answerC": "sunt laborum", - "answerD": "est sunt", - "cAnswer": "B", - "userProposition": "Mccray Mccoy" - }, - { - "id": 20, - "question": "Ex exercitation deserunt aute cillum dolor.", - "answerA": "proident magna", - "answerB": "pariatur exercitation", - "answerC": "ipsum veniam", - "answerD": "culpa quis", - "cAnswer": "C", - "userProposition": "Moss Jefferson" - }, - { - "id": 21, - "question": "Do mollit aute dolore anim id non aliqua.", - "answerA": "ipsum aute", - "answerB": "irure ex", - "answerC": "ex duis", - "answerD": "ipsum cupidatat", - "cAnswer": "B", - "userProposition": "Roth Valdez" - }, - { - "id": 22, - "question": "Commodo sunt reprehenderit tempor sit ut ea Lorem esse minim elit et sunt sint qui.", - "answerA": "et do", - "answerB": "officia culpa", - "answerC": "et commodo", - "answerD": "irure tempor", - "cAnswer": "D", - "userProposition": "Adrienne Carpenter" - }, - { - "id": 23, - "question": "Excepteur cupidatat ut sit commodo magna elit.", - "answerA": "pariatur tempor", - "answerB": "proident non", - "answerC": "velit elit", - "answerD": "pariatur fugiat", - "cAnswer": "D", - "userProposition": "Mcknight Cain" - }, - { - "id": 24, - "question": "Laborum eu nisi consequat voluptate in laboris cillum in aute sint excepteur aliqua Lorem in.", - "answerA": "pariatur in", - "answerB": "voluptate qui", - "answerC": "et cillum", - "answerD": "adipisicing id", - "cAnswer": "D", - "userProposition": "Gay Barlow" - }, - { - "id": 25, - "question": "Laborum ullamco occaecat excepteur deserunt nostrud dolor.", - "answerA": "magna labore", - "answerB": "ullamco veniam", - "answerC": "reprehenderit irure", - "answerD": "magna dolore", - "cAnswer": "B", - "userProposition": "Hannah Battle" - }, - { - "id": 26, - "question": "Commodo in amet laboris Lorem et qui anim ea ullamco dolor dolor commodo.", - "answerA": "amet nulla", - "answerB": "laborum mollit", - "answerC": "amet in", - "answerD": "irure amet", - "cAnswer": "D", - "userProposition": "Dawson Mcpherson" - }, - { - "id": 27, - "question": "Veniam non consectetur sit cillum.", - "answerA": "aliqua cupidatat", - "answerB": "nostrud culpa", - "answerC": "anim ullamco", - "answerD": "adipisicing et", - "cAnswer": "A", - "userProposition": "Reeves Love" - }, - { - "id": 28, - "question": "Ullamco laboris voluptate nostrud commodo Lorem enim ad ipsum.", - "answerA": "id aute", - "answerB": "aliquip incididunt", - "answerC": "duis elit", - "answerD": "mollit ad", - "cAnswer": "B", - "userProposition": "Michael Holmes" - } -] \ No newline at end of file diff --git a/WF-WebAdmin/WF-WebAdmin/wwwroot/fake_data_quiz.json b/WF-WebAdmin/WF-WebAdmin/wwwroot/fake_data_quiz.json new file mode 100644 index 0000000..0a91deb --- /dev/null +++ b/WF-WebAdmin/WF-WebAdmin/wwwroot/fake_data_quiz.json @@ -0,0 +1,68 @@ +[ + { + "Id": 7, + "Question": "Lorem proident exercitation elit fugiat do amet aute labore consectetur pariatur consequat.", + "AnswerA": "eiusmod nulla", + "AnswerB": "eu Id", + "AnswerC": "proident tempor", + "AnswerD": "amet proident", + "CAnswer": "A", + "IsValid": false, + "UserProposition": "Mia Peterson" + }, + { + "Id": 8, + "Question": "Incididunt magna commodo laborum do incididunt commodo proident non cillum magna elit irure voluptate.", + "AnswerA": "laborum fugiat", + "AnswerB": "laboris est", + "AnswerC": "in ea", + "AnswerD": "duis ullamco", + "CAnswer": "A", + "IsValid": false, + "UserProposition": "Juliet Fox" + }, + { + "Id": 9, + "Question": "Qui labore fugiat sint Lorem ut minim in ex dolor.", + "AnswerA": "et deserunt", + "AnswerB": "labore sit", + "AnswerC": "in eiusmod", + "AnswerD": "amet incididunt", + "CAnswer": "C", + "IsValid": false, + "UserProposition": "Earnestine Poole" + }, + { + "Id": 10, + "Question": "Voluptate pariatur ipsum magna sint Lorem adipisicing.", + "AnswerA": "sint velit", + "AnswerB": "non culpa", + "AnswerC": "nisi ut", + "AnswerD": "excepteur labore", + "CAnswer": "B", + "IsValid": false, + "UserProposition": "Alexis Cross" + }, + { + "Id": 11, + "Question": "In labore sunt est cupidatat cillum.", + "AnswerA": "ut ad", + "AnswerB": "non deserunt", + "AnswerC": "do officia", + "AnswerD": "ut nostrud", + "CAnswer": "C", + "IsValid": false, + "UserProposition": "Brooks Martinez" + }, + { + "Id": 12, + "Question": "Irure occaecat sit laborum nulla ea dolore et aliqua sunt Lorem enim esse.", + "AnswerA": "excepteur occaecat", + "AnswerB": "pariatur in", + "AnswerC": "reprehenderit excepteur", + "AnswerD": "laborum adipisicing", + "CAnswer": "D", + "IsValid": false, + "UserProposition": "Shields Roth" + } +] \ No newline at end of file