using DbConnectionLibrairie; using Entities; using ManagerInterfaces; using Microsoft.EntityFrameworkCore; using OrderCriterias; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EntityManagers { public class AnswerEntityManager(MyDbContext dbContext) : IAnswerManager { private MyDbContext dbContext = dbContext; public async Task addAnswer(AnswerEntity answer) { 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 async Task getAnswer(uint id) { return await dbContext.Answers.Where(a => a.Id == id).FirstOrDefaultAsync(); } public async Task<(int nbPages, IEnumerable? answers)> getAnswers(int nb, int count, AnswerOrderCriteria orderCriteria = AnswerOrderCriteria.ById) { int nbEl = getNbElements(); if (nb < 0 || count < 0 || nb > nbEl / count) return await Task.FromResult<(int nbPages, IEnumerable? answers)>((nbEl / count, null)); var tmp = dbContext.Answers; switch (orderCriteria) { case AnswerOrderCriteria.ById: tmp.OrderBy(a => a.Id); break; case AnswerOrderCriteria.ByContent: tmp.OrderBy(a => a.Content); break; case AnswerOrderCriteria.ByIdQuestion: tmp.OrderBy(a => a.IdQuestion); break; } return await Task.FromResult<(int nbPages, IEnumerable? answers)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count))); } public async Task?> getAnswersByIdQuestion(uint id) { if(dbContext.Questions.Where(q => q.Id == id).Any()) { return await Task.FromResult?>(dbContext.Answers.Where(a => a.IdQuestion == id)); } return await Task.FromResult?>(null); } public int getNbElements() { return dbContext.Answers.CountAsync().Result; } public async Task removeAnswer(uint id) { var tmp = getAnswer(id).Result; if (tmp == null) return await Task.FromResult(tmp); dbContext.Answers.Remove(tmp); await dbContext.SaveChangesAsync(); return await Task.FromResult(tmp); } public async Task removeAnswer(AnswerEntity answer) { var tmp = dbContext.Answers.Where(a => a.Equals(answer)).FirstOrDefaultAsync().Result; if (tmp == null) return await Task.FromResult(tmp); dbContext.Answers.Remove(tmp); await dbContext.SaveChangesAsync(); return await Task.FromResult(tmp); } public async Task updateAnswer(uint id, AnswerEntity answer) { 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; } } }