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>> 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>(_mapper.Map>(teamsEntities), pageinationMetadata)); } [HttpGet("{id}")] public async Task> GetTeam(int id) { var team = await _teamsRepository.GetTeamAsync(id); if (team == null) { return NotFound(); } return Ok(new Response(_mapper.Map(team))); } }