|
|
|
@ -34,21 +34,26 @@ namespace EntityManagers
|
|
|
|
|
return query;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Task<QuestionEntity> addQuestion(QuestionEntity question)
|
|
|
|
|
public async Task<QuestionEntity> addQuestion(QuestionEntity question)
|
|
|
|
|
{
|
|
|
|
|
var tmp = await dbContext.Questions.Where(q => q.Equals(question)).FirstOrDefaultAsync();
|
|
|
|
|
if (tmp != null) // <=> he already exist
|
|
|
|
|
{
|
|
|
|
|
return tmp!;
|
|
|
|
|
}
|
|
|
|
|
dbContext.Questions.Add(question);
|
|
|
|
|
dbContext.SaveChangesAsync();
|
|
|
|
|
return dbContext.Questions.Where(q => q.Equals(question)).FirstAsync();
|
|
|
|
|
await dbContext.SaveChangesAsync();
|
|
|
|
|
return await dbContext.Questions.Where(q => q.Equals(question)).FirstAsync();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Task<IEnumerable<QuestionEntity>> addQuestions(IEnumerable<QuestionEntity> questions)
|
|
|
|
|
public async Task<IEnumerable<QuestionEntity>> addQuestions(IEnumerable<QuestionEntity> questions)
|
|
|
|
|
{
|
|
|
|
|
var tmp = new List<QuestionEntity>();
|
|
|
|
|
foreach (var q in questions)
|
|
|
|
|
{
|
|
|
|
|
tmp.Add(addQuestion(q).Result);
|
|
|
|
|
}
|
|
|
|
|
return Task.FromResult<IEnumerable<QuestionEntity>>(tmp);
|
|
|
|
|
return await Task.FromResult<IEnumerable<QuestionEntity>>(tmp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int getNbElements()
|
|
|
|
@ -56,35 +61,35 @@ namespace EntityManagers
|
|
|
|
|
return dbContext.Questions.CountAsync().Result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Task<QuestionEntity?> getQuestion(uint id)
|
|
|
|
|
public async Task<QuestionEntity?> getQuestion(uint id)
|
|
|
|
|
{
|
|
|
|
|
return Task.FromResult<QuestionEntity?>(dbContext.Questions.Where(q => q.Id == id).FirstOrDefault());
|
|
|
|
|
return await Task.FromResult<QuestionEntity?>(dbContext.Questions.Where(q => q.Id == id).FirstOrDefault());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Task<(int nbPages, IEnumerable<QuestionEntity>? questions)> getQuestions(int nb, int count, QuestionOrderCriteria orderCriteria = QuestionOrderCriteria.ById)
|
|
|
|
|
public async Task<(int nbPages, IEnumerable<QuestionEntity>? questions)> getQuestions(int nb, int count, QuestionOrderCriteria orderCriteria = QuestionOrderCriteria.ById)
|
|
|
|
|
{
|
|
|
|
|
int nbEl = getNbElements();
|
|
|
|
|
if (nb > nbEl / count) return Task.FromResult<(int nbPages, IEnumerable<QuestionEntity>? questions)>((nbEl / count, null));
|
|
|
|
|
if (nb < 0 || count < 0 || nb > nbEl / count) return await Task.FromResult<(int nbPages, IEnumerable<QuestionEntity>? questions)>((nbEl / count, null));
|
|
|
|
|
var tmp = trier(dbContext.Questions, orderCriteria);
|
|
|
|
|
return Task.FromResult<(int nbPages, IEnumerable<QuestionEntity>? questions)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
|
|
|
|
|
return await Task.FromResult<(int nbPages, IEnumerable<QuestionEntity>? questions)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Task<(int nbPages, IEnumerable<QuestionEntity>? questions)?> getQuestionsByChapterAndDifficulty(int idChapter, int difficulty, int nb, int count, QuestionOrderCriteria orderCriteria = QuestionOrderCriteria.ById)
|
|
|
|
|
public async Task<(int nbPages, IEnumerable<QuestionEntity>? questions)?> getQuestionsByChapterAndDifficulty(int idChapter, int difficulty, int nb, int count, QuestionOrderCriteria orderCriteria = QuestionOrderCriteria.ById)
|
|
|
|
|
{
|
|
|
|
|
if (!dbContext.Chapters.Where(c => c.Id == idChapter).AnyAsync().Result || difficulty < 1 || difficulty > 3)
|
|
|
|
|
return Task.FromResult<(int nbPages, IEnumerable<QuestionEntity>? questions)?>(null);
|
|
|
|
|
if (nb < 0 || count < 0 || difficulty < 1 || difficulty > 3 || !dbContext.Chapters.Where(c => c.Id == idChapter).AnyAsync().Result)
|
|
|
|
|
return await Task.FromResult<(int nbPages, IEnumerable<QuestionEntity>? questions)?>(null);
|
|
|
|
|
int nbEl = getNbElements();
|
|
|
|
|
if (nb > nbEl / count) return Task.FromResult<(int nbPages, IEnumerable<QuestionEntity>? questions)?>((nbEl / count, null));
|
|
|
|
|
if (nb > nbEl / count) return await Task.FromResult<(int nbPages, IEnumerable<QuestionEntity>? questions)?>((nbEl / count, null));
|
|
|
|
|
var tmp = trier(dbContext.Questions, orderCriteria);
|
|
|
|
|
return Task.FromResult<(int nbPages, IEnumerable<QuestionEntity>? questions)?>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
|
|
|
|
|
return await Task.FromResult<(int nbPages, IEnumerable<QuestionEntity>? questions)?>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Task<QuestionEntity?> removeQuestion(QuestionEntity question)
|
|
|
|
|
public async Task<QuestionEntity?> removeQuestion(QuestionEntity question)
|
|
|
|
|
{
|
|
|
|
|
var tmp = dbContext.Questions.Where(q => q.Equals(question)).FirstOrDefaultAsync();
|
|
|
|
|
if (tmp.Result == null) return tmp;
|
|
|
|
|
dbContext.Questions.Remove(tmp.Result);
|
|
|
|
|
dbContext.SaveChangesAsync();
|
|
|
|
|
var tmp = await dbContext.Questions.Where(q => q.Equals(question)).FirstOrDefaultAsync();
|
|
|
|
|
if (tmp == null) return tmp;
|
|
|
|
|
dbContext.Questions.Remove(tmp);
|
|
|
|
|
await dbContext.SaveChangesAsync();
|
|
|
|
|
return tmp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -97,29 +102,29 @@ namespace EntityManagers
|
|
|
|
|
return tmp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Task<QuestionEntity?> updateQuestion(uint id, QuestionEntity question)
|
|
|
|
|
public async Task<QuestionEntity?> updateQuestion(uint id, QuestionEntity question)
|
|
|
|
|
{
|
|
|
|
|
var tmp = getQuestion(id);
|
|
|
|
|
if (tmp.Result == null) return tmp;
|
|
|
|
|
if (tmp.Result == null) return await tmp;
|
|
|
|
|
tmp.Result.Chapter = question.Chapter;
|
|
|
|
|
tmp.Result.Content = question.Content;
|
|
|
|
|
tmp.Result.IdChapter = question.IdChapter;
|
|
|
|
|
tmp.Result.AnswerGood = question.AnswerGood;
|
|
|
|
|
tmp.Result.Difficulty = question.Difficulty;
|
|
|
|
|
dbContext.SaveChangesAsync();
|
|
|
|
|
return tmp;
|
|
|
|
|
await dbContext.SaveChangesAsync();
|
|
|
|
|
return await tmp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Task<QuestionEntity?> updateQuestionNbFalls(uint id)
|
|
|
|
|
public async Task<QuestionEntity?> updateQuestionNbFalls(uint id)
|
|
|
|
|
{
|
|
|
|
|
var tmp = getQuestion(id);
|
|
|
|
|
if (tmp.Result == null) return tmp;
|
|
|
|
|
if (tmp.Result == null) return await tmp;
|
|
|
|
|
tmp.Result.NbFalls++;
|
|
|
|
|
uint nbFalls = tmp.Result.NbFalls;
|
|
|
|
|
if (nbFalls == 50) tmp.Result.Difficulty = 2;
|
|
|
|
|
if (nbFalls == 150) tmp.Result.Difficulty = 3;
|
|
|
|
|
dbContext.SaveChangesAsync();
|
|
|
|
|
return tmp;
|
|
|
|
|
await dbContext.SaveChangesAsync();
|
|
|
|
|
return await tmp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|