You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.01-QCM_MuscuMaths/WebApi/EntityManagers/ChapterEntityManager.cs

90 lines
3.3 KiB

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<ChapterEntity>
{
MyDbContext dbContext = dbContext;
public async Task<ChapterEntity> 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<ChapterEntity?> getChapter(int id)
{
return await dbContext.Chapters.Where(c => c.Id == id).FirstOrDefaultAsync();
}
public async Task<ChapterEntity?> getChapter(string name)
{
return await dbContext.Chapters.SingleOrDefaultAsync(c => c.Name == name);
}
public async Task<(int nbPages, IEnumerable<ChapterEntity>? 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<ChapterEntity>? 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<ChapterEntity>? chapters)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
}
public int getNbChapters()
{
return dbContext.Chapters.CountAsync().Result;
}
public async Task<ChapterEntity?> removeChapter(ChapterEntity chapter)
{
var tmp = dbContext.Chapters.Where(a => a.Equals(chapter)).FirstOrDefaultAsync().Result;
if (tmp == null) return await Task.FromResult<ChapterEntity?>(tmp);
dbContext.Chapters.Remove(tmp);
await dbContext.SaveChangesAsync();
return await Task.FromResult<ChapterEntity?>(tmp);
}
public async Task<ChapterEntity?> removeChapter(int id)
{
var tmp = getChapter(id).Result;
if (tmp == null) return await Task.FromResult<ChapterEntity?>(tmp);
dbContext.Chapters.Remove(tmp);
await dbContext.SaveChangesAsync();
return await Task.FromResult<ChapterEntity?>(tmp);
}
public async Task<ChapterEntity?> updateChapter(int id, string newName)
{
var tmp = await getChapter(id);
if (tmp == null) return null;
tmp.Name = newName;
return tmp;
}
}
}