Files
mlb-gameday-dotnet-react/teams/Controllers/TeamsController.cs
Noah Spannbauer 0d5eb3e801 Updating
2023-02-15 12:46:50 -06:00

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)));
}
}