- Ajout de toutes les classes Repository nécessaires au projet

- Ajout d'une classe et d'une interface Repo génériques pour éviter la réécriture des fonctions CRUD de base
This commit is contained in:
BuzzLeclair 2025-03-01 13:20:28 +01:00
parent 77d5d388bc
commit 6d3717db74
13 changed files with 234 additions and 1 deletions

View File

@ -0,0 +1,114 @@
using System.Linq.Expressions;
using ldap_cesi.Context;
using ldap_cesi.Repository.Services;
using Microsoft.EntityFrameworkCore;
namespace ldap_cesi.Repository;
public class RepositoryBase<TEntity> : IRepositoryBase<TEntity> where TEntity : class
{
protected readonly PgContext _context;
public RepositoryBase(PgContext context)
{
_context = context ?? throw new ArgumentNullException(nameof(context));
}
public virtual async Task<TEntity> AddAsync(TEntity entity, CancellationToken cancellationToken = default)
{
try
{
_context.Set<TEntity>().Add(entity);
await SaveChangesAsync(cancellationToken);
return entity;
}
catch (Exception ex)
{
throw new Exception("Erreur pendant l'ajout de l'entité.", ex);
}
}
public virtual async Task<bool> AnyAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default)
{
return await _context.Set<TEntity>().AnyAsync(predicate, cancellationToken);
}
public virtual async Task<List<TEntity>> GetAllAsync(CancellationToken cancellationToken = default)
{
try
{
return await _context.Set<TEntity>().ToListAsync(cancellationToken);
}
catch (Exception ex)
{
throw new Exception("Erreur pendant la récupérations des entités.", ex);
}
}
public virtual async Task<TEntity?> FirstOrDefaultAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default)
{
return await _context.Set<TEntity>().FirstOrDefaultAsync(predicate, cancellationToken);
}
public virtual async Task UpdateAsync(TEntity entity, CancellationToken cancellationToken = default)
{
try
{
_context.Set<TEntity>().Update(entity);
await SaveChangesAsync(cancellationToken);
}
catch (Exception ex)
{
throw new Exception("Erreur pendant la mis à jour", ex);
}
}
public virtual async Task<TEntity?> GetByIdAsync<TId>(TId id, CancellationToken cancellationToken = default) where TId : notnull
{
try
{
return await _context.FindAsync<TEntity>(id, cancellationToken);
}
catch (Exception ex)
{
throw new Exception($"Erreur lors de la récupération avec l'id : {id}.", ex);
}
}
public virtual async Task DeleteAsync(TEntity entity, CancellationToken cancellationToken = default)
{
try
{
_context.Set<TEntity>().Remove(entity);
await SaveChangesAsync(cancellationToken);
}
catch (Exception ex)
{
throw new Exception("Erreur pendant la suppression de l'entité", ex);
}
}
protected async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
{
try
{
return await _context.SaveChangesAsync(cancellationToken);
}
catch (Exception ex)
{
throw new Exception("Erreur pendant le sauvegarde en base de donnése.", ex);
}
}
public virtual async Task<List<TEntity>> ListAsync(CancellationToken cancellationToken = default)
{
try
{
return await _context.Set<TEntity>().ToListAsync(cancellationToken);
}
catch (Exception ex)
{
throw new Exception("Erreur qui concerne le listing des entités", ex);
}
}
}

View File

@ -0,0 +1,13 @@
using ldap_cesi.Context;
using ldap_cesi.Entities;
using ldap_cesi.Repository.Services;
namespace ldap_cesi.Repository;
public class RoleRepository : RepositoryBase<Role>, IRepositoryRole
{
public RoleRepository(PgContext context) : base(context)
{
}
}

View File

@ -0,0 +1,13 @@
using ldap_cesi.Context;
using ldap_cesi.Entities;
using ldap_cesi.Repository.Services;
namespace ldap_cesi.Repository;
public class SalarieRepository : RepositoryBase<Salarie>, IRepositorySalarie
{
public SalarieRepository(PgContext context) : base(context)
{
}
}

View File

@ -0,0 +1,13 @@
using ldap_cesi.Context;
using ldap_cesi.Entities;
using ldap_cesi.Repository.Services;
namespace ldap_cesi.Repository;
public class ServiceRepository : RepositoryBase<Service>, IRepositoryService
{
public ServiceRepository(PgContext context) : base(context)
{
}
}

View File

@ -0,0 +1,15 @@
using System.Linq.Expressions;
namespace ldap_cesi.Repository.Services;
public interface IRepositoryBase<TEntity> where TEntity : class
{
Task<TEntity> AddAsync(TEntity entity, CancellationToken cancellationToken = default);
Task<bool> AnyAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default);
Task<TEntity> GetByIdAsync<TId>(TId id, CancellationToken cancellationToken = default) where TId : notnull;
Task<List<TEntity>> GetAllAsync(CancellationToken cancellationToken = default);
Task UpdateAsync(TEntity entity, CancellationToken cancellationToken = default);
Task DeleteAsync(TEntity entity, CancellationToken cancellationToken = default);
Task<TEntity?> FirstOrDefaultAsync(Expression<Func<TEntity, bool>> predicate,
CancellationToken cancellationToken = default);
}

View File

@ -0,0 +1,8 @@
using ldap_cesi.Entities;
namespace ldap_cesi.Repository.Services;
public interface IRepositoryRole : IRepositoryBase<Role>
{
}

View File

@ -0,0 +1,8 @@
using ldap_cesi.Entities;
namespace ldap_cesi.Repository.Services;
public interface IRepositorySalarie : IRepositoryBase<Salarie>
{
}

View File

@ -0,0 +1,8 @@
using ldap_cesi.Entities;
namespace ldap_cesi.Repository.Services;
public interface IRepositoryService : IRepositoryBase<Service>
{
}

View File

@ -0,0 +1,8 @@
using ldap_cesi.Entities;
namespace ldap_cesi.Repository.Services;
public interface IRepositorySite : IRepositoryBase<Site>
{
}

View File

@ -0,0 +1,8 @@
using ldap_cesi.Entities;
namespace ldap_cesi.Repository.Services;
public interface IRepositoryUtilisateur : IRepositoryBase<Utilisateur>
{
}

View File

@ -0,0 +1,13 @@
using ldap_cesi.Context;
using ldap_cesi.Entities;
using ldap_cesi.Repository.Services;
namespace ldap_cesi.Repository;
public class SiteRepository : RepositoryBase<Site>, IRepositorySite
{
public SiteRepository(PgContext context) : base(context)
{
}
}

View File

@ -0,0 +1,13 @@
using ldap_cesi.Context;
using ldap_cesi.Entities;
using ldap_cesi.Repository.Services;
namespace ldap_cesi.Repository;
public class UtilisateurRepository : RepositoryBase<Utilisateur>, IRepositoryUtilisateur
{
public UtilisateurRepository(PgContext context) : base(context)
{
}
}

View File

@ -28,7 +28,6 @@
<Folder Include="Controllers\" /> <Folder Include="Controllers\" />
<Folder Include="Entities\" /> <Folder Include="Entities\" />
<Folder Include="Mapper\" /> <Folder Include="Mapper\" />
<Folder Include="Repository\" />
<Folder Include="Services\" /> <Folder Include="Services\" />
</ItemGroup> </ItemGroup>