From f5b202c325d40131bbad013d9dd1d0e168016764 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Thu, 17 Apr 2025 13:30:35 +0200 Subject: [PATCH] Enhance IRepository and DbRepository with DTO support Updated IRepository to include new generic methods for creating and reading entities from DTOs. Modified UpdateAsync to accept DTOs instead of generic types. Implemented corresponding methods in DbRepository for mapping DTOs to entities during creation and updating processes. --- .../Infrastructure/IRepository.cs | 6 +++++- DigitalData.Core.Infrastructure/DbRepository.cs | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/DigitalData.Core.Abstractions/Infrastructure/IRepository.cs b/DigitalData.Core.Abstractions/Infrastructure/IRepository.cs index 5d748bc..750df26 100644 --- a/DigitalData.Core.Abstractions/Infrastructure/IRepository.cs +++ b/DigitalData.Core.Abstractions/Infrastructure/IRepository.cs @@ -8,9 +8,13 @@ public interface IRepository public Task> CreateAsync(IEnumerable entities, CancellationToken ct = default); + public Task CreateAsync(TDto dto, CancellationToken ct = default); + + public Task> CreateAsync(IEnumerable dtos, CancellationToken ct = default); + public Task> ReadAsync(Expression>? expression = null, CancellationToken ct = default); - public Task UpdateAsync(TUpdate update, Expression> expression, CancellationToken ct = default); + public Task UpdateAsync(TDto dto, Expression> expression, CancellationToken ct = default); public Task DeleteAsync(Expression> expression, CancellationToken ct = default); } diff --git a/DigitalData.Core.Infrastructure/DbRepository.cs b/DigitalData.Core.Infrastructure/DbRepository.cs index 67b4480..a92db59 100644 --- a/DigitalData.Core.Infrastructure/DbRepository.cs +++ b/DigitalData.Core.Infrastructure/DbRepository.cs @@ -34,18 +34,30 @@ public class DbRepository : IRepository where TDbC return entities; } + public virtual Task CreateAsync(TDto dto, CancellationToken ct = default) + { + var entity = Mapper.Map(dto); + return CreateAsync(entity, ct); + } + + public virtual Task> CreateAsync(IEnumerable dtos, CancellationToken ct = default) + { + var entities = dtos.Select(dto => Mapper.Map(dto)); + return CreateAsync(entities, ct); + } + public virtual async Task> ReadAsync(Expression>? expression = null, CancellationToken ct = default) => expression is null ? await Entities.AsNoTracking().ToListAsync(ct) : await Entities.AsNoTracking().Where(expression).ToListAsync(ct); - public virtual async Task UpdateAsync(TUpdate update, Expression> expression, CancellationToken ct = default) + public virtual async Task UpdateAsync(TDto dto, Expression> expression, CancellationToken ct = default) { var entities = await Entities.Where(expression).ToListAsync(ct); foreach (var entity in entities) { - Mapper.Map(update, entity); + Mapper.Map(dto, entity); Entities.Add(entity); }