fix : 💩 réécriture des entity managers de façon assynchrone

API
Damien NORTIER 1 year ago
parent af850e546f
commit c19f389c17

@ -1,81 +1,86 @@
using DbConnectionLibrairie;
using Entities;
using ManagerInterfaces;
using Microsoft.EntityFrameworkCore;
using OrderCriterias;
using ExtensionsClassLibrairie;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EntityManagers
{
public class AdministratorEntityManager(MyDbContext dbContext) : IAdministratorManager<AdministratorEntity>
{
private MyDbContext dbContext = dbContext;
public Task<AdministratorEntity> addAdmin(AdministratorEntity admin)
{
dbContext.Administrators.Add(admin);
dbContext.SaveChangesAsync();
return dbContext.Administrators.Where(a => a.Equals(admin)).FirstAsync();
}
public Task<AdministratorEntity?> getAdministratorByUsername(string username)
{
return dbContext.Administrators.Where(a => a.Username == username).FirstOrDefaultAsync();
}
public Task<(int nbPages, IEnumerable<AdministratorEntity>? administrators)> getAdministrators(int nb, int count, AdministratorOrderCriteria orderCriteria = AdministratorOrderCriteria.ById)
{
int nbEl = getNbElements();
if(nb > nbEl/count) return Task.FromResult<(int nbPages, IEnumerable<AdministratorEntity>? administrators)>((nbEl/count, null));
var tmp = dbContext.Administrators;
switch (orderCriteria)
{
case AdministratorOrderCriteria.ById:
tmp.OrderBy(a => a.Id);
break;
case AdministratorOrderCriteria.ByUserName:
tmp.OrderBy(a => a.Username);
break;
}
return Task.FromResult<(int nbPages, IEnumerable<AdministratorEntity>? administrators)>((nbEl/count, tmp.Skip((nb-1)*count).Take(count)));
}
public int getNbElements()
{
return dbContext.Administrators.CountAsync().Result;
}
public Task<AdministratorEntity?> removeAdmin(AdministratorEntity admin)
{
var tmp = dbContext.Administrators.Where(a => a.Equals(admin)).FirstOrDefaultAsync().Result;
if(tmp == null) return Task.FromResult<AdministratorEntity?>(tmp);
dbContext.Administrators.Remove(tmp);
dbContext.SaveChanges();
return Task.FromResult<AdministratorEntity?>(tmp);
}
public Task<AdministratorEntity?> removeAdmin(int id)
{
var tmp = dbContext.Administrators.Where(a => a.Id == id).FirstOrDefaultAsync().Result;
if (tmp == null) return Task.FromResult<AdministratorEntity?>(tmp);
dbContext.Administrators.Remove(tmp);
dbContext.SaveChanges();
return Task.FromResult<AdministratorEntity?>(tmp);
}
public Task<bool> setPassword(string username, string newHashedPassword)
{
var tmp = getAdministratorByUsername(username).Result;
if (tmp == null) return Task.FromResult<bool>(false);
tmp.HashedPassword = newHashedPassword;
dbContext.SaveChanges();
return Task.FromResult<bool>(true);
}
}
}
using DbConnectionLibrairie;
using Entities;
using ManagerInterfaces;
using Microsoft.EntityFrameworkCore;
using OrderCriterias;
using ExtensionsClassLibrairie;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EntityManagers
{
public class AdministratorEntityManager(MyDbContext dbContext) : IAdministratorManager<AdministratorEntity>
{
private MyDbContext dbContext = dbContext;
public async Task<AdministratorEntity> addAdmin(AdministratorEntity admin)
{
var tmp = await dbContext.Administrators.Where(a => a.Equals(admin)).FirstOrDefaultAsync();
if (tmp != null) // <=> he already exist
{
return tmp!;
}
dbContext.Administrators.Add(admin);
await dbContext.SaveChangesAsync();
return await dbContext.Administrators.Where(a => a.Equals(admin)).FirstAsync(); // to get
}
public async Task<AdministratorEntity?> getAdministratorByUsername(string username)
{
return await dbContext.Administrators.Where(a => a.Username == username).FirstOrDefaultAsync();
}
public async Task<(int nbPages, IEnumerable<AdministratorEntity>? administrators)> getAdministrators(int nb, int count, AdministratorOrderCriteria orderCriteria = AdministratorOrderCriteria.ById)
{
int nbEl = getNbElements();
if(nb < 0 || count < 0 || nb > nbEl/count) return await Task.FromResult<(int nbPages, IEnumerable<AdministratorEntity>? administrators)>((nbEl/count, null));
var tmp = dbContext.Administrators;
switch (orderCriteria)
{
case AdministratorOrderCriteria.ById:
tmp.OrderBy(a => a.Id);
break;
case AdministratorOrderCriteria.ByUserName:
tmp.OrderBy(a => a.Username);
break;
}
return await Task.FromResult<(int nbPages, IEnumerable<AdministratorEntity>? administrators)>((nbEl/count, tmp.Skip((nb-1)*count).Take(count)));
}
public int getNbElements()
{
return dbContext.Administrators.CountAsync().Result;
}
public async Task<AdministratorEntity?> removeAdmin(AdministratorEntity admin)
{
var tmp = await dbContext.Administrators.Where(a => a.Equals(admin)).FirstOrDefaultAsync();
if(tmp == null) return await Task.FromResult<AdministratorEntity?>(tmp);
dbContext.Administrators.Remove(tmp);
dbContext.SaveChanges();
return await Task.FromResult<AdministratorEntity?>(tmp);
}
public async Task<AdministratorEntity?> removeAdmin(int id)
{
var tmp = dbContext.Administrators.Where(a => a.Id == id).FirstOrDefaultAsync().Result;
if (tmp == null) return await Task.FromResult<AdministratorEntity?>(tmp);
dbContext.Administrators.Remove(tmp);
dbContext.SaveChanges();
return await Task.FromResult<AdministratorEntity?>(tmp);
}
public async Task<bool> setPassword(string username, string newHashedPassword)
{
var tmp = await getAdministratorByUsername(username);
if (tmp == null) return await Task.FromResult<bool>(false);
tmp.HashedPassword = newHashedPassword;
await dbContext.SaveChangesAsync();
return await Task.FromResult<bool>(true);
}
}
}

@ -16,22 +16,27 @@ namespace EntityManagers
{
private MyDbContext dbContext = dbContext;
public Task<AnswerEntity> addAnswer(AnswerEntity answer)
public async Task<AnswerEntity> addAnswer(AnswerEntity answer)
{
dbContext.Answers.Add(answer);
dbContext.SaveChangesAsync();
return dbContext.Answers.Where(a => a.Equals(answer)).FirstAsync();
var tmp = await dbContext.Answers.Where(a => a.Equals(answer)).FirstOrDefaultAsync();
if (tmp != null) // <=> he already exist
{
return tmp!;
}
await dbContext.Answers.AddAsync(answer);
await dbContext.SaveChangesAsync();
return await dbContext.Answers.Where(a => a.Equals(answer)).FirstAsync();
}
public Task<AnswerEntity?> getAnswer(uint id)
public async Task<AnswerEntity?> getAnswer(uint id)
{
return dbContext.Answers.Where(a => a.Id == id).FirstOrDefaultAsync();
return await dbContext.Answers.Where(a => a.Id == id).FirstOrDefaultAsync();
}
public Task<(int nbPages, IEnumerable<AnswerEntity>? answers)> getAnswers(int nb, int count, AnswerOrderCriteria orderCriteria = AnswerOrderCriteria.ById)
public async Task<(int nbPages, IEnumerable<AnswerEntity>? answers)> getAnswers(int nb, int count, AnswerOrderCriteria orderCriteria = AnswerOrderCriteria.ById)
{
int nbEl = getNbElements();
if (nb > nbEl / count) return Task.FromResult<(int nbPages, IEnumerable<AnswerEntity>? answers)>((nbEl / count, null));
if (nb < 0 || count < 0 || nb > nbEl / count) return await Task.FromResult<(int nbPages, IEnumerable<AnswerEntity>? answers)>((nbEl / count, null));
var tmp = dbContext.Answers;
switch (orderCriteria)
{
@ -45,16 +50,16 @@ namespace EntityManagers
tmp.OrderBy(a => a.IdQuestion);
break;
}
return Task.FromResult<(int nbPages, IEnumerable<AnswerEntity>? answers)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
return await Task.FromResult<(int nbPages, IEnumerable<AnswerEntity>? answers)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
}
public Task<IEnumerable<AnswerEntity>?> getAnswersByIdQuestion(uint id)
public async Task<IEnumerable<AnswerEntity>?> getAnswersByIdQuestion(uint id)
{
if(dbContext.Questions.Where(q => q.Id == id).Any())
{
return Task.FromResult<IEnumerable<AnswerEntity>?>(dbContext.Answers.Where(a => a.IdQuestion == id));
return await Task.FromResult<IEnumerable<AnswerEntity>?>(dbContext.Answers.Where(a => a.IdQuestion == id));
}
return Task.FromResult<IEnumerable<AnswerEntity>?>(null);
return await Task.FromResult<IEnumerable<AnswerEntity>?>(null);
}
public int getNbElements()
@ -62,27 +67,36 @@ namespace EntityManagers
return dbContext.Answers.CountAsync().Result;
}
public Task<AnswerEntity?> removeAnswer(uint id)
public async Task<AnswerEntity?> removeAnswer(uint id)
{
var tmp = getAnswer(id).Result;
if (tmp == null) return Task.FromResult<AnswerEntity?>(tmp);
if (tmp == null) return await Task.FromResult<AnswerEntity?>(tmp);
dbContext.Answers.Remove(tmp);
dbContext.SaveChanges();
return Task.FromResult<AnswerEntity?>(tmp);
await dbContext.SaveChangesAsync();
return await Task.FromResult<AnswerEntity?>(tmp);
}
public Task<AnswerEntity?> removeAnswer(AnswerEntity answer)
public async Task<AnswerEntity?> removeAnswer(AnswerEntity answer)
{
var tmp = dbContext.Answers.Where(a => a.Equals(answer)).FirstOrDefaultAsync().Result;
if (tmp == null) return Task.FromResult<AnswerEntity?>(tmp);
if (tmp == null) return await Task.FromResult<AnswerEntity?>(tmp);
dbContext.Answers.Remove(tmp);
dbContext.SaveChanges();
return Task.FromResult<AnswerEntity?>(tmp);
await dbContext.SaveChangesAsync();
return await Task.FromResult<AnswerEntity?>(tmp);
}
public Task<AnswerEntity?> updateAnswer(uint id, AnswerEntity answer)
public async Task<AnswerEntity?> updateAnswer(uint id, AnswerEntity answer)
{
throw new NotImplementedException();
var tmp = await dbContext.Answers.Where(a => a.Id == id).FirstOrDefaultAsync();
if(tmp == null)
{
return null;
}
tmp.Content = answer.Content;
tmp.Question = answer.Question;
tmp.IdQuestion = answer.IdQuestion;
await dbContext.SaveChangesAsync();
return tmp;
}
}
}

@ -16,22 +16,27 @@ namespace EntityManagers
{
MyDbContext dbContext = dbContext;
public Task<ChapterEntity> addChapter(ChapterEntity chapter)
public async Task<ChapterEntity> addChapter(ChapterEntity chapter)
{
var tmp = await dbContext.Chapters.Where(c => c.Equals(chapter)).FirstOrDefaultAsync();
if (tmp != null) // <=> he already exist
{
return tmp!;
}
dbContext.Chapters.Add(chapter);
dbContext.SaveChangesAsync();
return dbContext.Chapters.Where(a => a.Equals(chapter)).FirstAsync();
await dbContext.SaveChangesAsync();
return await dbContext.Chapters.Where(c => c.Equals(chapter)).FirstAsync();
}
public Task<ChapterEntity?> getChapter(uint id)
public async Task<ChapterEntity?> getChapter(uint id)
{
return Task.FromResult<ChapterEntity?>(dbContext.Chapters.Where(c => c.Id == id).FirstOrDefault());
return await dbContext.Chapters.Where(c => c.Id == id).FirstOrDefaultAsync();
}
public Task<(int nbPages, IEnumerable<ChapterEntity>? chapters)> getChapters(int nb, int count, ChapterOrderCriteria orderCriteria = ChapterOrderCriteria.ById)
public async Task<(int nbPages, IEnumerable<ChapterEntity>? chapters)> getChapters(int nb, int count, ChapterOrderCriteria orderCriteria = ChapterOrderCriteria.ById)
{
int nbEl = getNbElements();
if (nb > nbEl / count) return Task.FromResult<(int nbPages, IEnumerable<ChapterEntity>? chapters)>((nbEl / count, null));
if (nb < 0 || count < 0 || nb > nbEl / count) return await Task.FromResult<(int nbPages, IEnumerable<ChapterEntity>? chapters)>((nbEl / count, null));
var tmp = dbContext.Chapters;
switch (orderCriteria)
{
@ -42,7 +47,7 @@ namespace EntityManagers
tmp.OrderBy(a => a.Name);
break;
}
return Task.FromResult<(int nbPages, IEnumerable<ChapterEntity>? chapters)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
return await Task.FromResult<(int nbPages, IEnumerable<ChapterEntity>? chapters)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
}
public int getNbElements()
@ -50,22 +55,22 @@ namespace EntityManagers
return dbContext.Chapters.CountAsync().Result;
}
public Task<ChapterEntity?> removeChapter(ChapterEntity chapter)
public async Task<ChapterEntity?> removeChapter(ChapterEntity chapter)
{
var tmp = dbContext.Chapters.Where(a => a.Equals(chapter)).FirstOrDefaultAsync().Result;
if (tmp == null) return Task.FromResult<ChapterEntity?>(tmp);
if (tmp == null) return await Task.FromResult<ChapterEntity?>(tmp);
dbContext.Chapters.Remove(tmp);
dbContext.SaveChanges();
return Task.FromResult<ChapterEntity?>(tmp);
await dbContext.SaveChangesAsync();
return await Task.FromResult<ChapterEntity?>(tmp);
}
public Task<ChapterEntity?> removeChapter(uint id)
public async Task<ChapterEntity?> removeChapter(uint id)
{
var tmp = getChapter(id).Result;
if (tmp == null) return Task.FromResult<ChapterEntity?>(tmp);
if (tmp == null) return await Task.FromResult<ChapterEntity?>(tmp);
dbContext.Chapters.Remove(tmp);
dbContext.SaveChanges();
return Task.FromResult<ChapterEntity?>(tmp);
await dbContext.SaveChangesAsync();
return await Task.FromResult<ChapterEntity?>(tmp);
}
}
}

@ -16,17 +16,22 @@ namespace EntityManagers
{
MyDbContext dbContext = dbContext;
public Task<LobbyEntity> addLobby(LobbyEntity lobby)
public async Task<LobbyEntity> addLobby(LobbyEntity lobby)
{
var tmp = await dbContext.Lobbies.Where(l => l.Equals(lobby)).FirstOrDefaultAsync();
if (tmp != null) // <=> he already exist
{
return tmp!;
}
dbContext.Lobbies.Add(lobby);
dbContext.SaveChangesAsync();
return dbContext.Lobbies.Where(a => a.Equals(lobby)).FirstAsync();
await dbContext.SaveChangesAsync();
return await dbContext.Lobbies.Where(l => l.Equals(lobby)).FirstAsync();
}
public Task<(int nbPages, IEnumerable<LobbyEntity>? lobbies)> getLobbies(int nb, int count, LobbyOrderCriteria orderCriteria = LobbyOrderCriteria.ById)
public async Task<(int nbPages, IEnumerable<LobbyEntity>? lobbies)> getLobbies(int nb, int count, LobbyOrderCriteria orderCriteria = LobbyOrderCriteria.ById)
{
int nbEl = getNbElements();
if (nb > nbEl / count) return Task.FromResult<(int nbPages, IEnumerable<LobbyEntity>? lobbies)>((nbEl / count, null));
if (nb < 0 || count < 0 || nb > nbEl / count) return await Task.FromResult<(int nbPages, IEnumerable<LobbyEntity>? lobbies)>((nbEl / count, null));
var tmp = dbContext.Lobbies;
switch (orderCriteria)
{
@ -40,12 +45,12 @@ namespace EntityManagers
tmp.OrderBy(l => l.NbPlayers);
break;
}
return Task.FromResult<(int nbPages, IEnumerable<LobbyEntity>? lobbies)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
return await Task.FromResult<(int nbPages, IEnumerable<LobbyEntity>? lobbies)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
}
public Task<LobbyEntity?> getLobby(uint id)
public async Task<LobbyEntity?> getLobby(uint id)
{
return Task.FromResult<LobbyEntity?>(dbContext.Lobbies.Where(l => l.Id == id).FirstOrDefault());
return await Task.FromResult<LobbyEntity?>(dbContext.Lobbies.Where(l => l.Id == id).FirstOrDefault());
}
public int getNbElements()
@ -53,22 +58,22 @@ namespace EntityManagers
return dbContext.Lobbies.CountAsync().Result;
}
public Task<LobbyEntity?> removeLobby(LobbyEntity lobby)
public async Task<LobbyEntity?> removeLobby(LobbyEntity lobby)
{
var tmp = dbContext.Lobbies.Where(a => a.Equals(lobby)).FirstOrDefaultAsync().Result;
if (tmp == null) return Task.FromResult<LobbyEntity?>(tmp);
if (tmp == null) return await Task.FromResult<LobbyEntity?>(tmp);
dbContext.Lobbies.Remove(tmp);
dbContext.SaveChanges();
return Task.FromResult<LobbyEntity?>(tmp);
await dbContext.SaveChangesAsync();
return await Task.FromResult<LobbyEntity?>(tmp);
}
public Task<LobbyEntity?> removeLobby(uint id)
public async Task<LobbyEntity?> removeLobby(uint id)
{
var tmp = dbContext.Lobbies.Where(a => a.Id == id).FirstOrDefaultAsync().Result;
if (tmp == null) return Task.FromResult<LobbyEntity?>(tmp);
if (tmp == null) return await Task.FromResult<LobbyEntity?>(tmp);
dbContext.Lobbies.Remove(tmp);
dbContext.SaveChanges();
return Task.FromResult<LobbyEntity?>(tmp);
await dbContext.SaveChangesAsync();
return await Task.FromResult<LobbyEntity?>(tmp);
}
}
}

@ -16,24 +16,29 @@ namespace EntityManagers
{
MyDbContext dbContext = dbContext;
public Task<PlayerEntity> addPlayer(PlayerEntity player)
public async Task<PlayerEntity> addPlayer(PlayerEntity player)
{
var tmp = await dbContext.Players.Where(p => p.Equals(player)).FirstOrDefaultAsync();
if (tmp != null) // <=> he already exist
{
return tmp;
}
dbContext.Players.Add(player);
dbContext.SaveChangesAsync();
return dbContext.Players.Where(a => a.Equals(player)).FirstAsync();
await dbContext.SaveChangesAsync();
return await dbContext.Players.Where(p => p.Equals(player)).FirstAsync();
}
public Task<uint?> getMaxScorePlayer(uint id, uint idChapter)
public async Task<uint?> getMaxScorePlayer(uint id, uint idChapter)
{
var tmp = dbContext.Play.Where(p => p.IdPlayer == id && p.IdChapter == idChapter).FirstOrDefault();
return Task.FromResult(tmp?.MaxScore);
var tmp = await dbContext.Play.Where(p => p.IdPlayer == id && p.IdChapter == idChapter).FirstOrDefaultAsync();
return await Task.FromResult(tmp?.MaxScore);
}
public Task<uint?> getMaxScorePlayer(uint id)
public async Task<uint?> getMaxScorePlayer(uint id)
{
var tmp = dbContext.Play.Where(p => p.IdPlayer == id).Select(p => p.MaxScore);
if (!tmp.AnyAsync().Result) return Task.FromResult<uint?>(null);
return Task.FromResult<uint?>(tmp?.MaxAsync().Result);
if (!tmp.AnyAsync().Result) return await Task.FromResult<uint?>(null);
return await Task.FromResult<uint?>(tmp?.MaxAsync().Result);
}
public int getNbElements()
@ -41,20 +46,20 @@ namespace EntityManagers
return dbContext.Players.CountAsync().Result;
}
public Task<PlayerEntity?> getPlayer(uint id)
public async Task<PlayerEntity?> getPlayer(uint id)
{
return dbContext.Players.Where(p => p.Id == id).FirstOrDefaultAsync();
return await dbContext.Players.Where(p => p.Id == id).FirstOrDefaultAsync();
}
public Task<PlayerEntity?> getPlayer(string nickname)
public async Task<PlayerEntity?> getPlayer(string nickname)
{
return dbContext.Players.Where(p => p.Nickname == nickname).FirstOrDefaultAsync();
return await dbContext.Players.Where(p => p.Nickname == nickname).FirstOrDefaultAsync();
}
public Task<(int nbPage, IEnumerable<PlayerEntity>? players)> getPlayers(int nb, int count, PlayerOrderCriteria orderCriteria = PlayerOrderCriteria.ById)
public async Task<(int nbPage, IEnumerable<PlayerEntity>? players)> getPlayers(int nb, int count, PlayerOrderCriteria orderCriteria = PlayerOrderCriteria.ById)
{
int nbEl = getNbElements();
if (nb > nbEl / count) return Task.FromResult<(int nbPages, IEnumerable<PlayerEntity>? players)>((nbEl / count, null));
if (nb < 0 || count < 0 || nb > nbEl / count) return await Task.FromResult<(int nbPages, IEnumerable<PlayerEntity>? players)>((nbEl / count, null));
var tmp = dbContext.Players;
switch (orderCriteria)
{
@ -65,32 +70,34 @@ namespace EntityManagers
tmp.OrderBy(p => p.Nickname);
break;
}
return Task.FromResult<(int nbPages, IEnumerable<PlayerEntity>? players)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
return await Task.FromResult<(int nbPages, IEnumerable<PlayerEntity>? players)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
}
public Task<IEnumerable<PlayerEntity>?> getPlayersInALobby(uint idLobby)
public async Task<IEnumerable<PlayerEntity>?> getPlayersInALobby(uint idLobby)
{
return Task.FromResult<IEnumerable<PlayerEntity>?>(dbContext.Use
if (!await dbContext.Lobbies.Where(l => l.Id == idLobby).AnyAsync())
return await Task.FromResult<IEnumerable<PlayerEntity>?>(null);
return await Task.FromResult<IEnumerable<PlayerEntity>?>(dbContext.Use
.Where(u => u.IdLobby == idLobby)
.Select(u => u.Player));
}
public Task<PlayerEntity?> removePlayer(PlayerEntity player)
public async Task<PlayerEntity?> removePlayer(PlayerEntity player)
{
var tmp = dbContext.Players.Where(p => p.Equals(player)).FirstOrDefaultAsync().Result;
if (tmp == null) return Task.FromResult<PlayerEntity?>(tmp);
if (tmp == null) return await Task.FromResult<PlayerEntity?>(tmp);
dbContext.Players.Remove(tmp);
dbContext.SaveChanges();
return Task.FromResult<PlayerEntity?>(tmp);
await dbContext.SaveChangesAsync();
return await Task.FromResult<PlayerEntity?>(tmp);
}
public Task<PlayerEntity?> removePlayer(uint id)
public async Task<PlayerEntity?> removePlayer(uint id)
{
var tmp = getPlayer(id).Result;
if (tmp == null) return Task.FromResult<PlayerEntity?>(tmp);
if (tmp == null) return await Task.FromResult<PlayerEntity?>(tmp);
dbContext.Players.Remove(tmp);
dbContext.SaveChanges();
return Task.FromResult<PlayerEntity?>(tmp);
await dbContext.SaveChangesAsync();
return await Task.FromResult<PlayerEntity?>(tmp);
}
}
}

@ -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;
}
}
}

Loading…
Cancel
Save