using DbConnectionLibrairie; using Entities; using ManagerInterfaces; using Microsoft.EntityFrameworkCore; using Model; using OrderCriterias; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EntityManagers { public class ChapterEntityManager(MyDbContext dbContext) : IChapterManager { MyDbContext dbContext = dbContext; public async Task addChapter(ChapterEntity chapter) { var tmp = await dbContext.Chapters.Where(c => c.Name == chapter.Name).FirstOrDefaultAsync(); if (tmp != null) // <=> he already exist { return tmp!; } dbContext.Chapters.Add(chapter); await dbContext.SaveChangesAsync(); return await dbContext.Chapters.Where(c => c.Equals(chapter)).FirstAsync(); } public async Task getChapter(int id) { return await dbContext.Chapters.Where(c => c.Id == id).FirstOrDefaultAsync(); } public async Task getChapter(string name) { return await dbContext.Chapters.SingleOrDefaultAsync(c => c.Name == name); } public async Task<(int nbPages, IEnumerable? chapters)> getChapters(int nb, int count, ChapterOrderCriteria orderCriteria = ChapterOrderCriteria.ById) { int nbEl = getNbChapters(); if (nb < 0 || count < 0 || nb > nbEl / count) return await Task.FromResult<(int nbPages, IEnumerable? chapters)>((nbEl / count, null)); var tmp = dbContext.Chapters; switch (orderCriteria) { case ChapterOrderCriteria.ById: tmp.OrderBy(a => a.Id); break; case ChapterOrderCriteria.ByName: tmp.OrderBy(a => a.Name); break; } return await Task.FromResult<(int nbPages, IEnumerable? chapters)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count))); } public int getNbChapters() { return dbContext.Chapters.CountAsync().Result; } public async Task removeChapter(ChapterEntity chapter) { var tmp = dbContext.Chapters.Where(a => a.Equals(chapter)).FirstOrDefaultAsync().Result; if (tmp == null) return await Task.FromResult(tmp); dbContext.Chapters.Remove(tmp); await dbContext.SaveChangesAsync(); return await Task.FromResult(tmp); } public async Task removeChapter(int id) { var tmp = getChapter(id).Result; if (tmp == null) return await Task.FromResult(tmp); dbContext.Chapters.Remove(tmp); await dbContext.SaveChangesAsync(); return await Task.FromResult(tmp); } public async Task updateChapter(int id, string newName) { var tmp = await getChapter(id); if (tmp == null) return null; tmp.Name = newName; return tmp; } } }