Added Pyrofetes Repository
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.20" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.20" />
|
||||||
<PackageReference Include="PasswordGenerator" Version="2.1.0" />
|
<PackageReference Include="PasswordGenerator" Version="2.1.0" />
|
||||||
|
<PackageReference Include="Plainquire.Page" Version="6.5.0" />
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2"/>
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,328 @@
|
|||||||
|
using System.Linq.Expressions;
|
||||||
|
using Ardalis.Specification;
|
||||||
using Ardalis.Specification.EntityFrameworkCore;
|
using Ardalis.Specification.EntityFrameworkCore;
|
||||||
|
using AutoMapper.QueryableExtensions;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Plainquire.Page;
|
||||||
|
|
||||||
namespace PyroFetes.Repositories;
|
namespace PyroFetes.Repositories;
|
||||||
|
|
||||||
public abstract class PyrofetesRepository<T>(PyroFetesDbContext databaseContext, AutoMapper.IMapper mapper) : RepositoryBase<T>(databaseContext) where T : class
|
public class PyrofetesRepository<T>(DbContext databaseContext, AutoMapper.IMapper mapper) : RepositoryBase<T>(databaseContext) where T : class
|
||||||
{
|
{
|
||||||
|
private readonly DbContext _databaseContext = databaseContext;
|
||||||
}
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<T?> FirstOrDefaultAsync(CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await _databaseContext.Set<T>().AsQueryable().FirstOrDefaultAsync(cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<T> FirstAsync(CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await _databaseContext.Set<T>().AsQueryable().FirstAsync(cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="specification"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<T> SingleAsync(ISpecification<T> specification, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await ApplySpecification(specification).SingleAsync(cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<T> SingleAsync(CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await _databaseContext.Set<T>().AsQueryable().SingleAsync(cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="specification"></param>
|
||||||
|
/// <param name="selector"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<decimal> SumAsync(
|
||||||
|
ISpecification<T> specification,
|
||||||
|
Expression<Func<T, decimal>> selector,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await ApplySpecification(specification).SumAsync(selector, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
// /// <summary>
|
||||||
|
// ///
|
||||||
|
// /// </summary>
|
||||||
|
// /// <param name="specification"></param>
|
||||||
|
// /// <param name="selector"></param>
|
||||||
|
// /// <param name="cancellationToken"></param>
|
||||||
|
// /// <returns></returns>
|
||||||
|
// public async Task<int> SumAsync(
|
||||||
|
// ISpecification<T> specification,
|
||||||
|
// Expression<Func<T, int>> selector,
|
||||||
|
// CancellationToken cancellationToken = default)
|
||||||
|
// {
|
||||||
|
// return await ApplySpecification(specification).SumAsync(selector, cancellationToken);
|
||||||
|
// }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="specification"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <param name="postProcessor"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<TResult?> ProjectToSingleOrDefaultAsync<TResult>(
|
||||||
|
ISpecification<T> specification,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await ApplySpecification(specification)
|
||||||
|
.ProjectTo<TResult>(mapper.ConfigurationProvider)
|
||||||
|
.SingleOrDefaultAsync(cancellationToken: cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="specification"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <param name="postProcessor"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<TResult?> ProjectToSingleOrDefaultAsync<TResult>(
|
||||||
|
ISpecification<T> specification,
|
||||||
|
Action<TResult?> postProcessor,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
TResult? result = await ApplySpecification(specification)
|
||||||
|
.ProjectTo<TResult>(mapper.ConfigurationProvider)
|
||||||
|
.SingleOrDefaultAsync(cancellationToken: cancellationToken);
|
||||||
|
postProcessor(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// /// <summary>
|
||||||
|
// ///
|
||||||
|
// /// </summary>
|
||||||
|
// /// <param name="cancellationToken"></param>
|
||||||
|
// /// <typeparam name="TResult"></typeparam>
|
||||||
|
// /// <returns></returns>
|
||||||
|
// public async Task<TResult?> ProjectToSingleOrDefaultAsync<TResult>(
|
||||||
|
// CancellationToken cancellationToken = default)
|
||||||
|
// {
|
||||||
|
// return await _databaseContext.Set<T>().AsQueryable().ProjectTo<TResult>(mapper.ConfigurationProvider).SingleOrDefaultAsync(cancellationToken: cancellationToken);
|
||||||
|
// }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="specification"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<TResult> ProjectToSingleAsync<TResult>(
|
||||||
|
ISpecification<T> specification,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await ApplySpecification(specification)
|
||||||
|
.ProjectTo<TResult>(mapper.ConfigurationProvider)
|
||||||
|
.SingleAsync(cancellationToken: cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="specification"></param>
|
||||||
|
/// <param name="postProcessor"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<TResult> ProjectToSingleAsync<TResult>(
|
||||||
|
ISpecification<T> specification,
|
||||||
|
Action<TResult?> postProcessor,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
TResult result = await ApplySpecification(specification)
|
||||||
|
.ProjectTo<TResult>(mapper.ConfigurationProvider)
|
||||||
|
.SingleAsync(cancellationToken: cancellationToken);
|
||||||
|
postProcessor(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<TResult> ProjectToSingleAsync<TResult>(
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await _databaseContext.Set<T>()
|
||||||
|
.AsQueryable()
|
||||||
|
.ProjectTo<TResult>(mapper.ConfigurationProvider)
|
||||||
|
.SingleAsync(cancellationToken: cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<TResult>> ProjectToListAsync<TResult>(
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await _databaseContext.Set<T>()
|
||||||
|
.AsQueryable()
|
||||||
|
.ProjectTo<TResult>(mapper.ConfigurationProvider)
|
||||||
|
.ToListAsync(cancellationToken: cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="postProcessor"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<TResult>> ProjectToListAsync<TResult>(
|
||||||
|
Action<List<TResult>> postProcessor,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
List<TResult> results = await _databaseContext.Set<T>()
|
||||||
|
.AsQueryable()
|
||||||
|
.ProjectTo<TResult>(mapper.ConfigurationProvider)
|
||||||
|
.ToListAsync(cancellationToken: cancellationToken);
|
||||||
|
postProcessor(results);
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="specification"></param>
|
||||||
|
/// <param name="postProcessor"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<TResult>> ProjectToListAsync<TResult>(
|
||||||
|
ISpecification<T> specification,
|
||||||
|
Action<List<TResult>> postProcessor,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
List<TResult> results = await ApplySpecification(specification)
|
||||||
|
.ProjectTo<TResult>(mapper.ConfigurationProvider)
|
||||||
|
.ToListAsync(cancellationToken: cancellationToken);
|
||||||
|
postProcessor(results);
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="specification"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<TResult>> ProjectToListAsync<TResult>(
|
||||||
|
ISpecification<T> specification,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await ApplySpecification(specification)
|
||||||
|
.ProjectTo<TResult>(mapper.ConfigurationProvider)
|
||||||
|
.ToListAsync(cancellationToken: cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="specification"></param>
|
||||||
|
/// <param name="page"></param>
|
||||||
|
/// <param name="postProcessor"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<TResult>> ProjectToListAsync<TResult>(
|
||||||
|
ISpecification<T> specification,
|
||||||
|
EntityPage page,
|
||||||
|
Action<List<TResult>> postProcessor,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
List<TResult> results = await ApplySpecification(specification)
|
||||||
|
.ProjectTo<TResult>(mapper.ConfigurationProvider)
|
||||||
|
.Page(page)
|
||||||
|
.ToListAsync(cancellationToken: cancellationToken);
|
||||||
|
postProcessor(results);
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="specification"></param>
|
||||||
|
/// <param name="page"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<TResult>> ProjectToListAsync<TResult>(
|
||||||
|
ISpecification<T> specification,
|
||||||
|
EntityPage page,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await ApplySpecification(specification)
|
||||||
|
.ProjectTo<TResult>(mapper.ConfigurationProvider)
|
||||||
|
.Page(page)
|
||||||
|
.ToListAsync(cancellationToken: cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="specification"></param>
|
||||||
|
/// <param name="selector"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<TResult>> SelectManyAsync<TResult>(
|
||||||
|
ISpecification<T> specification,
|
||||||
|
Expression<Func<T, IEnumerable<TResult>>> selector,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await ApplySpecification(specification).SelectMany(selector).ToListAsync(cancellationToken: cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="specification"></param>
|
||||||
|
/// <param name="selector"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <typeparam name="TResult"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<TResult>> SelectAsync<TResult>(
|
||||||
|
ISpecification<T> specification,
|
||||||
|
Expression<Func<T, TResult>> selector,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
return await ApplySpecification(specification).Select(selector).ToListAsync(cancellationToken: cancellationToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user