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/PlayerEntityManager.cs

97 lines
3.5 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 PlayerEntityManager(MyDbContext dbContext) : IPlayerManager<PlayerEntity>
{
MyDbContext dbContext = dbContext;
public Task<PlayerEntity> addPlayer(PlayerEntity player)
{
dbContext.Players.Add(player);
dbContext.SaveChangesAsync();
return dbContext.Players.Where(a => a.Equals(player)).FirstAsync();
}
public 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);
}
public 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);
}
public int getNbElements()
{
return dbContext.Players.CountAsync().Result;
}
public Task<PlayerEntity?> getPlayer(uint id)
{
return dbContext.Players.Where(p => p.Id == id).FirstOrDefaultAsync();
}
public Task<PlayerEntity?> getPlayer(string nickname)
{
return dbContext.Players.Where(p => p.Nickname == nickname).FirstOrDefaultAsync();
}
public 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));
var tmp = dbContext.Players;
switch (orderCriteria)
{
case PlayerOrderCriteria.ById:
tmp.OrderBy(p => p.Id);
break;
case PlayerOrderCriteria.ByNickname:
tmp.OrderBy(p => p.Nickname);
break;
}
return Task.FromResult<(int nbPages, IEnumerable<PlayerEntity>? players)>((nbEl / count, tmp.Skip((nb - 1) * count).Take(count)));
}
public Task<IEnumerable<PlayerEntity>?> getPlayersInALobby(uint idLobby)
{
return Task.FromResult<IEnumerable<PlayerEntity>?>(dbContext.Use
.Where(u => u.IdLobby == idLobby)
.Select(u => u.Player));
}
public Task<PlayerEntity?> removePlayer(PlayerEntity player)
{
var tmp = dbContext.Players.Where(p => p.Equals(player)).FirstOrDefaultAsync().Result;
if (tmp == null) return Task.FromResult<PlayerEntity?>(tmp);
dbContext.Players.Remove(tmp);
dbContext.SaveChanges();
return Task.FromResult<PlayerEntity?>(tmp);
}
public Task<PlayerEntity?> removePlayer(uint id)
{
var tmp = getPlayer(id).Result;
if (tmp == null) return Task.FromResult<PlayerEntity?>(tmp);
dbContext.Players.Remove(tmp);
dbContext.SaveChanges();
return Task.FromResult<PlayerEntity?>(tmp);
}
}
}