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>> 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>(_mapper.Map>(venueEntities), paginationMetadata)); } [HttpGet("{id}")] public async Task> GetVenue(int id) { var venue = await _venuesRepository.GetVenueAsync(id); if (venue == null) { return NotFound(); } return Ok(new Response(_mapper.Map(venue))); } } }