Files
mlb-gameday-dotnet-react/venues/Controllers/VenuesController.cs
2023-01-24 20:03:13 -06:00

57 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using Microsoft.AspNetCore.Mvc;
using Venues.Entities;
using Venues.Filter;
using Venues.Models;
using Venues.Services;
using Venues.Wrappers;
namespace Venues.Controllers
{
[ApiController]
[Route("api/venues")]
public class VenuesController : ControllerBase
{
private readonly IVenuesRepository _venuesRepository;
private readonly IMapper _mapper;
const int maxVenuesPerPage = 50;
public VenuesController(IVenuesRepository venuesRepository, IMapper mapper)
{
_venuesRepository = venuesRepository ?? throw new ArgumentNullException(nameof(venuesRepository));
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
}
[HttpGet]
public async Task<ActionResult<IEnumerable<VenueDto>>> GetVenues([FromQuery] PaginationFilter filter)
{
if (filter.PageSize > maxVenuesPerPage)
{
filter.PageSize = maxVenuesPerPage;
}
var (venueEntities, paginationMetadata) = await _venuesRepository.GetVenuesAsync(filter.PageNumber, filter.PageSize);
return Ok(new PagedResponse<IEnumerable<VenueDto>>(_mapper.Map<IEnumerable<VenueDto>>(venueEntities), paginationMetadata));
}
[HttpGet("{id}")]
public async Task<ActionResult<VenueDto>> GetVenue(int id)
{
var venue = await _venuesRepository.GetVenueAsync(id);
if (venue == null)
{
return NotFound();
}
return Ok(new Response<VenueDto>(_mapper.Map<VenueDto>(venue)));
}
}
}