51 lines
1.4 KiB
C#
51 lines
1.4 KiB
C#
using AutoMapper;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Teams.Filter;
|
|
using Teams.Models;
|
|
using Teams.Services;
|
|
using Teams.Wrappers;
|
|
|
|
namespace Teams.Controllers;
|
|
|
|
[ApiController]
|
|
[Route("api/teams")]
|
|
public class TeamsController : ControllerBase
|
|
{
|
|
private readonly ITeamsRepository _teamsRepository;
|
|
private readonly IMapper _mapper;
|
|
const int maxTeamsPerPage = 50;
|
|
|
|
public TeamsController(ITeamsRepository teamsRepository, IMapper mapper)
|
|
{
|
|
_teamsRepository = teamsRepository ?? throw new ArgumentNullException(nameof(teamsRepository));
|
|
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
|
|
}
|
|
|
|
[HttpGet]
|
|
public async Task<ActionResult<IEnumerable<TeamDto>>> GetTeams([FromQuery] PaginationFilter filter)
|
|
{
|
|
if (filter.PageSize > maxTeamsPerPage)
|
|
{
|
|
filter.PageSize = maxTeamsPerPage;
|
|
}
|
|
|
|
var (teamsEntities, pageinationMetadata) = await _teamsRepository.GetTeamsAsync(filter.PageNumber, filter.PageSize);
|
|
|
|
return Ok(new PagedResponse<IEnumerable<TeamDto>>(_mapper.Map<IEnumerable<TeamDto>>(teamsEntities), pageinationMetadata));
|
|
}
|
|
|
|
[HttpGet("{id}")]
|
|
public async Task<ActionResult<TeamDto>> GetTeam(int id)
|
|
{
|
|
var team = await _teamsRepository.GetTeamAsync(id);
|
|
|
|
if (team == null)
|
|
{
|
|
return NotFound();
|
|
}
|
|
|
|
return Ok(new Response<TeamDto>(_mapper.Map<TeamDto>(team)));
|
|
}
|
|
}
|
|
|