parent
f4b6c6bfe1
commit
60183a2d3a
@ -1,106 +1,153 @@
|
||||
using System.Text.Json;
|
||||
using WF_WebAdmin.Model;
|
||||
|
||||
namespace WF_WebAdmin.Service;
|
||||
|
||||
public class QuizServiceStub: IQuizService
|
||||
{
|
||||
private readonly string _jsonFilePath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake_data_quiz.json");
|
||||
|
||||
public async Task saveQuizJson(List<Quiz> quizzes)
|
||||
{
|
||||
var json = JsonSerializer.Serialize(quizzes, new JsonSerializerOptions { WriteIndented = true });
|
||||
await File.WriteAllTextAsync(_jsonFilePath, json);
|
||||
}
|
||||
using System.Text.Json;
|
||||
using WF_WebAdmin.Model;
|
||||
|
||||
public async Task addQuiz(Quiz quiz)
|
||||
namespace WF_WebAdmin.Service
|
||||
{
|
||||
/// <summary>
|
||||
/// Service de gestion des quiz utilisant un fichier JSON comme stockage de données.
|
||||
/// </summary>
|
||||
public class QuizServiceStub : IQuizService
|
||||
{
|
||||
var data = await getQuizzes();
|
||||
quiz.Id = data.Count > 0 ? data.Max(p => p.Id) + 1 : 1;
|
||||
data.Add(quiz);
|
||||
await saveQuizJson(data);
|
||||
}
|
||||
private readonly string _jsonFilePath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake_data_quiz.json");
|
||||
|
||||
public async Task updateQuiz(Quiz quiz)
|
||||
{
|
||||
var data = await getQuizzes();
|
||||
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);
|
||||
/// <summary>
|
||||
/// Sauvegarde la liste des quiz dans un fichier JSON.
|
||||
/// </summary>
|
||||
/// <param name="quizzes">Liste des quiz à sauvegarder.</param>
|
||||
public async Task saveQuizJson(List<Quiz> quizzes)
|
||||
{
|
||||
var json = JsonSerializer.Serialize(quizzes, new JsonSerializerOptions { WriteIndented = true });
|
||||
await File.WriteAllTextAsync(_jsonFilePath, json);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task removeQuiz(int id)
|
||||
{
|
||||
var data = await getQuizzes();
|
||||
var quiz = data.FirstOrDefault(q => q.Id == id);
|
||||
if (quiz != null)
|
||||
{
|
||||
data.Remove(quiz);
|
||||
await saveQuizJson(data);
|
||||
/// <summary>
|
||||
/// Ajoute un quiz à la liste et le sauvegarde dans le fichier JSON.
|
||||
/// </summary>
|
||||
/// <param name="quiz">Quiz à ajouter.</param>
|
||||
public async Task addQuiz(Quiz quiz)
|
||||
{
|
||||
var data = await getQuizzes();
|
||||
quiz.Id = data.Count > 0 ? data.Max(p => p.Id) + 1 : 1;
|
||||
data.Add(quiz);
|
||||
await saveQuizJson(data);
|
||||
}
|
||||
}
|
||||
|
||||
public Task validateQuiz(int id)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
/// <summary>
|
||||
/// Met à jour un quiz existant dans la liste et le sauvegarde.
|
||||
/// </summary>
|
||||
/// <param name="quiz">Quiz mis à jour.</param>
|
||||
public async Task updateQuiz(Quiz quiz)
|
||||
{
|
||||
var data = await getQuizzes();
|
||||
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<List<Quiz>> getQuizzes()
|
||||
{
|
||||
if (!File.Exists(_jsonFilePath))
|
||||
{
|
||||
Console.Out.WriteLine($"{_jsonFilePath} not found");
|
||||
return new List<Quiz>();
|
||||
}
|
||||
|
||||
var json = await File.ReadAllTextAsync(_jsonFilePath);
|
||||
return JsonSerializer.Deserialize<List<Quiz>>(json) ?? new List<Quiz>();
|
||||
}
|
||||
/// <summary>
|
||||
/// Supprime un quiz de la liste et met à jour le fichier JSON.
|
||||
/// </summary>
|
||||
/// <param name="id">Identifiant du quiz à supprimer.</param>
|
||||
public async Task removeQuiz(int id)
|
||||
{
|
||||
var data = await getQuizzes();
|
||||
var quiz = data.FirstOrDefault(q => q.Id == id);
|
||||
if (quiz != null)
|
||||
{
|
||||
data.Remove(quiz);
|
||||
await saveQuizJson(data);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<List<Quiz>> getQuizzesToValidate()
|
||||
{
|
||||
var quizzes = await getQuizzes();
|
||||
return quizzes.Where(quiz => quiz.IsValid == false).ToList();
|
||||
}
|
||||
/// <summary>
|
||||
/// Valide un quiz (non implémenté).
|
||||
/// </summary>
|
||||
/// <param name="id">Identifiant du quiz à valider.</param>
|
||||
public Task validateQuiz(int id)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public async Task<Quiz> getQuiz(int id)
|
||||
{
|
||||
var data = await getQuizzes();
|
||||
var q = data.FirstOrDefault(p => p.Id == id);
|
||||
if (q != null)
|
||||
/// <summary>
|
||||
/// Récupère la liste complète des quiz à partir du fichier JSON.
|
||||
/// </summary>
|
||||
/// <returns>Liste des quiz.</returns>
|
||||
public async Task<List<Quiz>> getQuizzes()
|
||||
{
|
||||
return q;
|
||||
if (!File.Exists(_jsonFilePath))
|
||||
{
|
||||
Console.Out.WriteLine($"{_jsonFilePath} not found");
|
||||
return new List<Quiz>();
|
||||
}
|
||||
|
||||
var json = await File.ReadAllTextAsync(_jsonFilePath);
|
||||
return JsonSerializer.Deserialize<List<Quiz>>(json) ?? new List<Quiz>();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public async Task<List<Quiz>> getSommeQuiz(int nb, int page)
|
||||
{
|
||||
var data = await getQuizzes();
|
||||
if ((page - 1) * nb + nb > data.Count())
|
||||
/// <summary>
|
||||
/// Récupère la liste des quiz non validés.
|
||||
/// </summary>
|
||||
/// <returns>Liste des quiz en attente de validation.</returns>
|
||||
public async Task<List<Quiz>> getQuizzesToValidate()
|
||||
{
|
||||
if(nb > data.Count())
|
||||
var quizzes = await getQuizzes();
|
||||
return quizzes.Where(quiz => quiz.IsValid == false).ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Récupère un quiz spécifique par son identifiant.
|
||||
/// </summary>
|
||||
/// <param name="id">Identifiant du quiz.</param>
|
||||
/// <returns>Le quiz correspondant ou null s'il n'existe pas.</returns>
|
||||
public async Task<Quiz> getQuiz(int id)
|
||||
{
|
||||
var data = await getQuizzes();
|
||||
var q = data.FirstOrDefault(p => p.Id == id);
|
||||
if (q != null)
|
||||
{
|
||||
return data.GetRange(0, data.Count()-1);
|
||||
return q;
|
||||
}
|
||||
return data.GetRange(data.Count() - nb, nb);
|
||||
return null;
|
||||
}
|
||||
return data.GetRange((page - 1) * nb, nb);
|
||||
}
|
||||
|
||||
public async Task<int> getNbQuiz()
|
||||
{
|
||||
var data = await getQuizzes();
|
||||
return data.Count;
|
||||
/// <summary>
|
||||
/// Récupère une liste paginée de quiz.
|
||||
/// </summary>
|
||||
/// <param name="nb">Nombre de quiz par page.</param>
|
||||
/// <param name="page">Numéro de la page.</param>
|
||||
/// <returns>Liste des quiz correspondant à la pagination.</returns>
|
||||
public async Task<List<Quiz>> getSommeQuiz(int nb, int page)
|
||||
{
|
||||
var data = await getQuizzes();
|
||||
if ((page - 1) * nb + nb > data.Count())
|
||||
{
|
||||
if (nb > data.Count())
|
||||
{
|
||||
return data.GetRange(0, data.Count() - 1);
|
||||
}
|
||||
return data.GetRange(data.Count() - nb, nb);
|
||||
}
|
||||
return data.GetRange((page - 1) * nb, nb);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Récupère le nombre total de quiz enregistrés.
|
||||
/// </summary>
|
||||
/// <returns>Nombre total de quiz.</returns>
|
||||
public async Task<int> getNbQuiz()
|
||||
{
|
||||
var data = await getQuizzes();
|
||||
return data.Count;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in new issue