using System.Collections.Generic;
using System.Threading.Tasks;
using AutoMapper;
using LaDOSE.Business.Interface;
using LaDOSE.DTO;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace LaDOSE.Api.Controllers
{
[Authorize]
[Produces("application/json")]
[Route("api/[controller]")]
public class StatisticsController : Controller
{
private readonly IStatisticsService _service;
private readonly IMapper _mapper;
public StatisticsController(IMapper mapper, IStatisticsService service)
{
_mapper = mapper;
_service = service;
}
///
/// Match statistics for the given Event ids. Body is a bare JSON array of ids,
/// like TournamentController.GetResults.
/// A null or empty array returns a zeroed, empty MatchStatsDTO rather than an error.
/// Read Coverage before trusting the numbers: many brackets have no set rows at all.
///
[HttpPost("Matches")]
public async Task GetMatchStats([FromBody] List ids)
{
var stats = await _service.GetMatchStats(ids);
return _mapper.Map(stats);
}
///
/// The players a versus lookup can report on: everyone with at least one set in a
/// bracket whose game is known, by display name. Not the application users —
/// these are tournament players, the entities set rows point at.
///
[HttpGet("Players")]
public async Task> GetVersusPlayers()
{
var players = await _service.GetVersusPlayers();
return _mapper.Map>(players);
}
///
/// Every recorded meeting between two players, across all events, split per game.
/// Sets played in a bracket with no game attached are excluded and only counted in
/// UnknownGameSets. Two identical or unknown ids return an empty breakdown, not an error.
///
[HttpGet("Versus/{playerAId}/{playerBId}")]
public async Task GetVersus(int playerAId, int playerBId)
{
var versus = await _service.GetVersus(playerAId, playerBId);
return _mapper.Map(versus);
}
}
}