using System; using System.Xml.Linq; using AutoMapper; using BowlingEF.Context; using BowlingEF.Entities; using BowlingLib.Model; using BowlingRepository; using BowlingRepository.Interface; using DTOs; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; namespace BowlingService.Interfaces { public class PartieService : IpartieService { private readonly IpartieRepository _IpartieRepository; private readonly ILogger _logger; private readonly IMapper _mapper; public PartieService(IpartieRepository ipartieRepository, IMapper mapper, ILogger logger) { _IpartieRepository = ipartieRepository; _mapper = mapper; _logger = logger; } public PartieService() { } //Add public async Task Add(PartieDTO _partie) { PartieDTO result = null; using (var context = new BowlingContext()) { PartieEntity entity = _mapper.Map(_partie); //context.Parties.Add(entity); try { //var data = await context.SaveChangesAsync(); result =_mapper.Map(await _IpartieRepository.Add(entity)); _logger.LogInformation("A new player was added : {player}", _partie.Id); } catch (Exception ex) { _logger.LogError(ex, "Error while adding new player : {player}", _partie.Id); throw; } } return result; } //Delete public async Task Delete(PartieDTO _partie) { // return await _IpartieRepository.Delete(_partie.Id); var result = false; try { result = await _IpartieRepository.Delete(_partie.Id); _logger.LogInformation("la partie est supprimer", _partie.Id); } catch (Exception ex) { _logger.LogError(ex, "Error while deleting player : {player}", _partie.Id); throw; } return result; } public async Task> GetAll() { List result = new List(); using (var context = new BowlingContext()) { foreach (PartieEntity entity in await _IpartieRepository.GetAll()) { JoueurDTO joueur = _mapper.Map(entity.Joueur); List frames = new List(); foreach (FrameEntity frameEntity in entity.Frames) { FrameDTO frame = _mapper.Map(frameEntity); frames.Add(frame); } result.Add(_mapper.Map(entity)); } } return result.OrderBy(item => item.Date).ToList(); } public Task> GetAllWithDate(DateTime date) { throw new NotImplementedException(); } public async Task GetDataWithId(int id) { PartieDTO _partie = null; try { var partientity = await _IpartieRepository.GetDataWithId(id); _partie = _mapper.Map(partientity); _logger.LogInformation("partie was retrieved : {partie}", id); } catch (Exception ex) { _logger.LogError(ex, "Error while retrieving partie : {partie}", id); throw; } return _partie; } //Update public async Task Update(PartieDTO _partie) { bool result = false; using (var context = new BowlingContext()) { PartieEntity entity = _mapper.Map(_partie); entity.Date = _partie.Date; entity.Score = _partie.Score; result = _IpartieRepository.Update(entity).Result; } return result; } } }