57 lines
1.7 KiB
C#
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)));
|
|
}
|
|
}
|
|
}
|
|
|