diff --git a/WebApi/EntityManagers/AnswerEntityManager.cs b/WebApi/EntityManagers/AnswerEntityManager.cs index ab706be..6e06288 100644 --- a/WebApi/EntityManagers/AnswerEntityManager.cs +++ b/WebApi/EntityManagers/AnswerEntityManager.cs @@ -1,107 +1,122 @@ -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 : IAnswerManager - { - private MyDbContext dbContext; - +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 : IAnswerManager + { + private MyDbContext dbContext; + public AnswerEntityManager(MyDbContext dbContext) { this.dbContext = dbContext; - } - - public async Task addAnswer(AnswerEntity answer) - { - var tmp = await dbContext.Answers.Where(a => a.Content == answer.Content.ToLower() && a.IdQuestion == answer.IdQuestion).FirstOrDefaultAsync(); - if (tmp != null) // <=> he already exist - { - return tmp!; - } - await dbContext.Answers.AddAsync(new AnswerEntity { Content = answer.Content.ToLower(), IdQuestion = answer.IdQuestion }); - await dbContext.SaveChangesAsync(); - return await dbContext.Answers.Where(a => a.Content == answer.Content && a.IdQuestion == answer.IdQuestion).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(); + } + + public async Task addAnswer(AnswerEntity answer) + { + var tmp = await dbContext.Answers.Where(a => a.Content == answer.Content.ToLower() && a.IdQuestion == answer.IdQuestion).FirstOrDefaultAsync(); + if (tmp != null) // <=> he already exist + { + return tmp!; + } + await dbContext.Answers.AddAsync(new AnswerEntity { Content = answer.Content.ToLower(), IdQuestion = answer.IdQuestion }); + await dbContext.SaveChangesAsync(); + return await dbContext.Answers.Where(a => a.Content == answer.Content && a.IdQuestion == answer.IdQuestion).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 page, int count, AnswerOrderCriteria orderCriteria = AnswerOrderCriteria.ById) + { + int nbEl = getNbElements(); + if (page < 0 || count < 0 || page > nbEl / count) + { + return await Task.FromResult<( + int nbPages, + IEnumerable? answers + )> (( + count == 0 ? -1 : 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((page - 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; - } - } -} + } + tmp.Content = answer.Content; + tmp.Question = answer.Question; + tmp.IdQuestion = answer.IdQuestion; + await dbContext.SaveChangesAsync(); + return tmp; + } + } +}