using BowlingEF.Context;
using BowlingEF.Entities;
using BowlingLib.Model;
using Business;
using Microsoft.EntityFrameworkCore;
namespace BowlingService
{
///
/// Classe de gestion des données des parties
///
public class PartieDbDataManager : IPartieDbDataManager
{
#region Méthodes
///
/// Ajoute une partie Dans la base de données
///
///
///
public async Task Add(Partie _partie)
{
bool result = false;
using (var context = new BowlingContext())
{
PartieEntity entity = new PartieEntity
{
Id = _partie.Id,
Date = _partie.Date,
Score = _partie.Score
};
context.Parties.Add(entity);
try
{
var data = await context.SaveChangesAsync();
result = data == 1;
}
catch (Exception ex)
{
Console.WriteLine(ex);
throw;
}
}
return result;
}
///
/// Supprime une partie de la base de données
///
///
///
public async Task Delete(Partie _partie)
{
bool result = false;
using (var context = new BowlingContext())
{
PartieEntity entity = context.Parties.Find(_partie.Id);
context.Parties.Remove(entity);
result = await context.SaveChangesAsync() == 1;
}
return result;
}
///
/// Modifie une partie dans la base de données
///
///
///
public async Task Update(Partie _partie)
{
bool result = false;
using (var context = new BowlingContext())
{
PartieEntity entity = context.Parties.Find(_partie.Id);
entity.Date = _partie.Date;
//entity.JoueurId = _partie.Joueur.Id;
entity.Score = _partie.Score;
result =await context.SaveChangesAsync() == 1;
}
return result;
}
///
/// Retourne une partie de la base de données en fonction de son nom
///
///
///
public async Task GetDataWithName(string name)
{
Partie result = null;
using (var context = new BowlingContext())
{
PartieEntity entity = await context.Parties.FindAsync(name);
Joueur joueur = new Joueur(entity.Joueur.Id, entity.Joueur.Pseudo);
List frames = new List();
foreach (FrameEntity frameEntity in entity.Frames)
{
Frame frame = new Frame(frameEntity.Id, frameEntity.Numero, frameEntity.Lancer1, frameEntity.Lancer2, frameEntity.Lancer3);
frames.Add(frame);
}
result = new Partie(entity.Id, joueur, frames, entity.Date, entity.Score);
}
return result;
}
///
/// Retourne Toutes les parties en base de donné
///
///
public async Task> GetAll()
{
List result = new List();
using (var context = new BowlingContext())
{
foreach (PartieEntity entity in await context.Parties.ToListAsync())
{
Joueur joueur = new Joueur(entity.Joueur.Id, entity.Joueur.Pseudo);
List frames = new List();
foreach (FrameEntity frameEntity in entity.Frames)
{
Frame frame = new Frame(frameEntity.Id, frameEntity.Numero, frameEntity.Lancer1, frameEntity.Lancer2, frameEntity.Lancer3);
frames.Add(frame);
}
result.Add(new Partie(entity.Id, joueur, frames, entity.Date, entity.Score));
}
}
return result.OrderBy(item => item.Date);
}
///
/// Retourne les parties à une date donnée
///
///
///
public async Task> GetAllWithDate(DateTime date)
{
List result = new List();
using (var context = new BowlingContext())
{
var query = context.Parties.Where(item => item.Date == date);
foreach (PartieEntity entity in await context.Parties.ToListAsync())
{
if (entity.Date.Date == date.Date)
{
Joueur joueur = new Joueur(entity.Joueur.Id, entity.Joueur.Pseudo);
List frames = new List();
foreach (FrameEntity frameEntity in entity.Frames)
{
Frame frame = new Frame(frameEntity.Id, frameEntity.Numero, frameEntity.Lancer1, frameEntity.Lancer2, frameEntity.Lancer3);
frames.Add(frame);
}
result.Add(new Partie(entity.Id, joueur, frames, entity.Date, entity.Score));
}
}
}
return result.OrderBy(item => item.Date);
}
#endregion
}
}