Initial commit AB#12
This commit is contained in:
11
venues/Services/IVenuesRepository.cs
Normal file
11
venues/Services/IVenuesRepository.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using Venues.Entities;
|
||||
|
||||
namespace Venues.Services
|
||||
{
|
||||
public interface IVenuesRepository
|
||||
{
|
||||
Task<(IEnumerable<Venue>, PaginationMetadata)> GetVenuesAsync(int pageNumber, int pageSize);
|
||||
Task<Venue?> GetVenueAsync(int venueId);
|
||||
}
|
||||
}
|
||||
|
||||
20
venues/Services/PaginationMetadata.cs
Normal file
20
venues/Services/PaginationMetadata.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using System;
|
||||
namespace Venues.Services
|
||||
{
|
||||
public class PaginationMetadata
|
||||
{
|
||||
public int TotalItemCount { get; set; }
|
||||
public int TotalPageCount { get; set; }
|
||||
public int PageSize { get; set; }
|
||||
public int CurrentPage { get; set; }
|
||||
|
||||
public PaginationMetadata(int totalItemCount, int pageSize, int currentPage)
|
||||
{
|
||||
TotalItemCount = totalItemCount;
|
||||
PageSize = pageSize;
|
||||
CurrentPage = currentPage;
|
||||
TotalPageCount = (int)Math.Ceiling(totalItemCount / (double)pageSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
36
venues/Services/VenuesRepository.cs
Normal file
36
venues/Services/VenuesRepository.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Venues.DbContexts;
|
||||
using Venues.Entities;
|
||||
|
||||
namespace Venues.Services
|
||||
{
|
||||
public class VenuesRepository : IVenuesRepository
|
||||
{
|
||||
private readonly MlbGameDayContext _context;
|
||||
|
||||
public VenuesRepository(MlbGameDayContext context)
|
||||
{
|
||||
_context = context ?? throw new ArgumentNullException(nameof(context));
|
||||
}
|
||||
|
||||
public async Task<Venue?> GetVenueAsync(int venueId)
|
||||
{
|
||||
return await _context.Venues.Where(v => v.Id == venueId).FirstOrDefaultAsync();
|
||||
}
|
||||
|
||||
public async Task<(IEnumerable<Venue>, PaginationMetadata)> GetVenuesAsync(int pageNumber, int pageSize)
|
||||
{
|
||||
var collection = _context.Venues as IQueryable<Venue>;
|
||||
var totalItemCount = await collection.CountAsync();
|
||||
var paginationMetadata = new PaginationMetadata(totalItemCount, pageSize, pageNumber);
|
||||
var collectionToReturn = await collection.OrderBy(v => v.Name)
|
||||
.Skip(pageSize * (pageNumber -1))
|
||||
.Take(pageSize)
|
||||
.ToListAsync();
|
||||
|
||||
return (collectionToReturn, paginationMetadata);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user