using BowlingEF.Context; using BowlingEF.Entities; using Microsoft.Extensions.Logging; using System.Diagnostics; using AutoMapper; using BowlingRepository.Interface; using BowlingService.Interfaces; using DTOs; namespace BowlingService { /// /// Classe de gestion des données des joueurs /// public class JoueurService : IJoueurService { private readonly ILogger _logger; private readonly IJoueurRepository _joueurRepository; private readonly IMapper _mapper; #region Méthodes public JoueurService(IJoueurRepository joueurRepository,IMapper mapper , ILogger logger) { _joueurRepository = joueurRepository; _mapper = mapper; _logger = logger; } /// /// Ajoute un joueur à la liste des joueurs /// /// /// public async Task Add(JoueurDTO _joueur) { JoueurDTO result = null; try { //Mapping entre la classe joueur et la classe joueurEntity JoueurEntity entity = _mapper.Map(_joueur); entity.PartieEntities=_joueur.PartieDTO.Select(p => { var partieEntity = _mapper.Map(p); partieEntity.Frames=p.FramesDTO.Select(f => _mapper.Map(f)).ToList(); return partieEntity; }).ToList(); result = _mapper.Map(await _joueurRepository.Add(entity)); _logger.LogInformation("A new player was added : {player}", _joueur.Pseudo); } catch (Exception ex) { _logger.LogError(ex, "Error while adding new player : {player}", _joueur.Pseudo); throw; } return result; } /// /// Supprime un joueur de la liste des joueurs /// /// /// public async Task Delete(JoueurDTO _joueur) { var result = false; try { result = await _joueurRepository.Delete(_joueur.Id); _logger.LogInformation("A player was deleted : {player}", _joueur.Pseudo); } catch (Exception ex) { _logger.LogError(ex, "Error while deleting player : {player}", _joueur.Pseudo); throw; } return result; } /// /// recupère tous les joueurs de la Base de données /// /// public async Task> GetAll() { List joueurs = new List(); try { var joueursEntity = await _joueurRepository.GetAllJoueur(); joueurs = joueursEntity.Select(j => _mapper.Map(j)).ToList(); _logger.LogInformation("All players were retrieved"); } catch (Exception ex) { _logger.LogError(ex, "Error while retrieving all players"); throw; } return joueurs; } /// /// recupère un joueur de la Base de données par son pseudo /// /// /// public async Task GetDataWithName(string name) { JoueurDTO _joueur = null; try { var joueurEntity = await _joueurRepository.GetJoueurByNom(name); _joueur = _mapper.Map(joueurEntity); _logger.LogInformation("Player was retrieved : {player}", name); } catch (Exception ex) { _logger.LogError(ex, "Error while retrieving player : {player}", name); throw; } return _joueur; } public async Task Update(JoueurDTO _joueur) { bool result = false; try { JoueurEntity entity = _joueurRepository.GetJoueur(_joueur.Id).Result; if (entity!= null) { entity.Pseudo = _joueur.Pseudo; entity.PartieEntities = _joueur.PartieDTO.Select(p => { var partieEntity = _mapper.Map(p); partieEntity.Frames = p.FramesDTO.Select(f => _mapper.Map(f)).ToList(); return partieEntity; }).ToList(); result = await _joueurRepository.Update(entity); _logger.LogInformation("Player was updated : {player}", _joueur.Pseudo); } return result; } catch (Exception ex) { _logger.LogError(ex, "Error while updating player : {player}", _joueur.Pseudo); throw; } } #endregion } }