Files
EstusShots-Net/EstusShots.Server/Services/PlayersService.cs
2020-03-02 19:40:46 +01:00

72 lines
2.9 KiB
C#

using System.Collections.Generic;
using System.Threading.Tasks;
using AutoMapper;
using EstusShots.Server.Models;
using EstusShots.Shared.Interfaces;
using EstusShots.Shared.Models;
using EstusShots.Shared.Models.Parameters;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Dto = EstusShots.Shared.Dto;
namespace EstusShots.Server.Services
{
public class PlayersService : IPlayersController
{
private readonly ILogger _logger;
private readonly EstusShotsContext _context;
private readonly IMapper _mapper;
public PlayersService(ILogger<PlayersService> logger, EstusShotsContext context, IMapper mapper)
{
_logger = logger;
_context = context;
_mapper = mapper;
}
public async Task<ApiResponse<GetPlayersResponse>> GetPlayers(GetPlayersParameter parameter)
{
var players = await _context.Players.ToListAsync();
var dtos = _mapper.Map<List<Dto.Player>>(players);
return new ApiResponse<GetPlayersResponse>(new GetPlayersResponse(dtos));
}
public async Task<ApiResponse<GetPlayerDetailsResponse>> GetPlayerDetails(GetPlayerDetailsParameter parameter)
{
var player = await _context.Players.FindAsync(parameter.PlayerId);
if (player == null)
{
_logger.LogWarning($"Player '{parameter.PlayerId}' not found in database");
return new ApiResponse<GetPlayerDetailsResponse>(new OperationResult(false, "Player not found"));
}
var dto = _mapper.Map<Dto.Player>(player);
return new ApiResponse<GetPlayerDetailsResponse>(new GetPlayerDetailsResponse(dto));
}
public async Task<ApiResponse<SavePlayerResponse>> SavePlayer(SavePlayerParameter parameter)
{
if (parameter.Player.PlayerId.IsEmpty())
{
_context.Players.Add(_mapper.Map<Player>(parameter.Player));
var count = await _context.SaveChangesAsync();
_logger.LogInformation($"Created {count} rows");
return new ApiResponse<SavePlayerResponse>(new SavePlayerResponse(parameter.Player.PlayerId));
}
else
{
var player = await _context.Players.FindAsync(parameter.Player.PlayerId);
_context.Players.Update(player);
_mapper.Map(parameter.Player, player);
var count = await _context.SaveChangesAsync();
_logger.LogInformation($"Updated player '{player.PlayerId}'");
return new ApiResponse<SavePlayerResponse>(new SavePlayerResponse(player.PlayerId));
}
}
public async Task<ApiResponse<DeletePlayerResponse>> DeletePlayers(DeletePlayerParameter parameter)
{
throw new System.NotImplementedException();
}
}
}