diff --git a/CleanArchitecture/CleanArchitecture.Application/Contracts/Persistence/IAsyncRepository.cs b/CleanArchitecture/CleanArchitecture.Application/Contracts/Persistence/IAsyncRepository.cs index 0dc3232..2582155 100644 --- a/CleanArchitecture/CleanArchitecture.Application/Contracts/Persistence/IAsyncRepository.cs +++ b/CleanArchitecture/CleanArchitecture.Application/Contracts/Persistence/IAsyncRepository.cs @@ -21,5 +21,9 @@ namespace CleanArchitecture.Application.Contracts.Persistence Task UpdateAsync(T entity); Task DeleteAsync(T entity); + void AddEntity(T entity); + void UpdateEntity(T entity); + void DeleteEntity(T entity); + } } diff --git a/CleanArchitecture/CleanArchitecture.Application/Contracts/Persistence/IUnitOfWork.cs b/CleanArchitecture/CleanArchitecture.Application/Contracts/Persistence/IUnitOfWork.cs new file mode 100644 index 0000000..6cc9154 --- /dev/null +++ b/CleanArchitecture/CleanArchitecture.Application/Contracts/Persistence/IUnitOfWork.cs @@ -0,0 +1,11 @@ +using CleanArchitecture.Domain.Common; + +namespace CleanArchitecture.Application.Contracts.Persistence +{ + public interface IUnitOfWork: IDisposable + { + IAsyncRepository Repository() where T : BaseDomainModel; + + Task Complete(); + } +} diff --git a/CleanArchitecture/CleanArchitecture.Data/Persistence/UnitOfWork.cs b/CleanArchitecture/CleanArchitecture.Data/Persistence/UnitOfWork.cs new file mode 100644 index 0000000..75a0524 --- /dev/null +++ b/CleanArchitecture/CleanArchitecture.Data/Persistence/UnitOfWork.cs @@ -0,0 +1,47 @@ +using CleanArchitecture.Application.Contracts.Persistence; +using CleanArchitecture.Domain.Common; +using System.Collections; + +namespace CleanArchitecture.Infrastructure.Persistence +{ + public class UnitOfWork : IUnitOfWork + { + private Hashtable repositories; + private readonly StreamerDbContext context; + + public UnitOfWork(StreamerDbContext _context) + { + context = _context; + } + + + + public async Task Complete() + { + return await context.SaveChangesAsync(); + } + + public void Dispose() + { + context.Dispose(); + } + + public IAsyncRepository Repository() where T : BaseDomainModel + { + if(repositories == null) + { + repositories = new Hashtable(); + } + var type = typeof(T).Name; + if(!repositories.ContainsKey(type)) + { + var repositoryType = typeof(IAsyncRepository<>); + var repositoryInstance = Activator.CreateInstance(repositoryType.MakeGenericType(typeof(T)), context); + repositories.Add(type, repositoryInstance); + } + + return (IAsyncRepository)repositories[type]; + + } + } +} diff --git a/CleanArchitecture/CleanArchitecture.Data/Repositories/RepositoryBase.cs b/CleanArchitecture/CleanArchitecture.Data/Repositories/RepositoryBase.cs index b0eefe1..a3a4995 100644 --- a/CleanArchitecture/CleanArchitecture.Data/Repositories/RepositoryBase.cs +++ b/CleanArchitecture/CleanArchitecture.Data/Repositories/RepositoryBase.cs @@ -62,13 +62,14 @@ namespace CleanArchitecture.Infrastructure.Repositories public async Task AddAsync(T entity) { - context.Set().Add(entity); + context.Set().Add(entity); await context.SaveChangesAsync(); return entity; } public async Task UpdateAsync(T entity) { + context.Set().Attach(entity); context.Entry(entity).State = EntityState.Modified; await context.SaveChangesAsync(); return entity; @@ -80,5 +81,20 @@ namespace CleanArchitecture.Infrastructure.Repositories await context.SaveChangesAsync(); } + public void AddEntity(T entity) + { + context.Set().Add(entity); + } + + public void UpdateEntity(T entity) + { + context.Set().Attach(entity); + context.Entry(entity).State = EntityState.Modified; + } + + public void DeleteEntity(T entity) + { + context.Set().Remove(entity); + } } } diff --git a/CleanArchitecture/EliminarBinObj.ps1 b/CleanArchitecture/EliminarBinObj.ps1 new file mode 100644 index 0000000..0fc2f4d --- /dev/null +++ b/CleanArchitecture/EliminarBinObj.ps1 @@ -0,0 +1,27 @@ +# Este script de PowerShell busca y elimina los directorios 'bin' y 'obj' recursivamente desde la ubicación actual. + +# Cambia el directorio de trabajo al directorio donde se ejecuta el script +Set-Location -Path $PSScriptRoot + +# Función para buscar y eliminar directorios +function Remove-SpecifiedDirectories { + param ( + [string]$startingDirectory, + [string[]]$directoryNamesToRemove + ) + + # Buscar todos los directorios que coincidan con los nombres especificados + $directories = Get-ChildItem -Path $startingDirectory -Recurse -Directory | Where-Object { $_.Name -in $directoryNamesToRemove } + foreach ($dir in $directories) { + # Eliminar el directorio y todos sus contenidos + Remove-Item -Path $dir.FullName -Recurse -Force -ErrorAction SilentlyContinue + if (!$?) { + Write-Warning "No se pudo eliminar: $($dir.FullName)" + } else { + Write-Output "Eliminado: $($dir.FullName)" + } + } +} + +# Llama a la función con el directorio actual y los nombres de los directorios a eliminar +Remove-SpecifiedDirectories -startingDirectory (Get-Location) -directoryNamesToRemove @('bin', 'obj')