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 } }