diff --git a/src/Generator.Domain/DealDomain.cs b/src/Generator.Domain/DealDomain.cs index 0932301..0945ce7 100644 --- a/src/Generator.Domain/DealDomain.cs +++ b/src/Generator.Domain/DealDomain.cs @@ -1,29 +1,27 @@ using Generator.DomainApi.Port; -using Generator.Persistence.Adapter.Context; -using Microsoft.EntityFrameworkCore; +using Generator.DomainApi.Model; using System.Collections.Generic; -using System.Linq; namespace Generator.Domain { - public class DealDomain : IRequestDeal where T : class + public class DealDomain : IRequestDeal where T : Deal { - private readonly DbSet table; + private readonly IDealSet table; - public DealDomain(ApplicationDbContext dbContext) + public DealDomain(IApplicationDbContext dbContext) { - ApplicationDbContext _dbContext; + IApplicationDbContext _dbContext; _dbContext = dbContext; - table = _dbContext.Set(); + table = _dbContext.Deals; } public T GetDeal(int id) { - return table.Find(id); + return table.Find(id); } public List GetDeals() { - return table.ToList(); + return table.ToList(); } } } diff --git a/src/Generator.Domain/Generator.Domain.csproj b/src/Generator.Domain/Generator.Domain.csproj index 9733fd1..90e8aa8 100644 --- a/src/Generator.Domain/Generator.Domain.csproj +++ b/src/Generator.Domain/Generator.Domain.csproj @@ -1,16 +1,15 @@ - - net5.0 - + + net5.0 + - - - + + + - - - - + + + diff --git a/src/Generator.DomainApi/Port/IApplicationDbContext.cs b/src/Generator.DomainApi/Port/IApplicationDbContext.cs new file mode 100644 index 0000000..b3fb7ae --- /dev/null +++ b/src/Generator.DomainApi/Port/IApplicationDbContext.cs @@ -0,0 +1,7 @@ +namespace Generator.DomainApi.Port +{ + public interface IApplicationDbContext + { + public IDealSet Deals { get; set; } + } +} \ No newline at end of file diff --git a/src/Generator.DomainApi/Port/IDealSet.cs b/src/Generator.DomainApi/Port/IDealSet.cs new file mode 100644 index 0000000..ee926ee --- /dev/null +++ b/src/Generator.DomainApi/Port/IDealSet.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using Generator.DomainApi.Model; + +namespace Generator.DomainApi.Port +{ + public interface IDealSet + { + void AddRange(List getDeals); + void Add(Deal deal); + void Remove(Deal deal); + T Find(int id) where T : Deal; + List ToList() where T : Deal; + } +} \ No newline at end of file diff --git a/src/Generator.Persistence.Adapter.UnitTest/Context/ApplicationDbContextTest.cs b/src/Generator.Persistence.Adapter.UnitTest/Context/ApplicationDbContextTest.cs index 0671266..67e3e57 100644 --- a/src/Generator.Persistence.Adapter.UnitTest/Context/ApplicationDbContextTest.cs +++ b/src/Generator.Persistence.Adapter.UnitTest/Context/ApplicationDbContextTest.cs @@ -1,5 +1,5 @@ using Generator.DomainApi.Model; -using Generator.Persistence.Adapter.UnitTest.Common; +using Generator.Persistence.Adapter.Common; using Microsoft.EntityFrameworkCore; using NUnit.Framework; using System.Threading.Tasks; diff --git a/src/Generator.Persistence.Adapter.UnitTest/Common/ApplicationDbContextFactory.cs b/src/Generator.Persistence.Adapter/Common/ApplicationDbContextFactory.cs similarity index 91% rename from src/Generator.Persistence.Adapter.UnitTest/Common/ApplicationDbContextFactory.cs rename to src/Generator.Persistence.Adapter/Common/ApplicationDbContextFactory.cs index 9241d37..afd0c1e 100644 --- a/src/Generator.Persistence.Adapter.UnitTest/Common/ApplicationDbContextFactory.cs +++ b/src/Generator.Persistence.Adapter/Common/ApplicationDbContextFactory.cs @@ -1,10 +1,10 @@ -using Generator.DomainApi.Model; +using System; +using System.Collections.Generic; +using Generator.DomainApi.Model; using Generator.Persistence.Adapter.Context; using Microsoft.EntityFrameworkCore; -using System; -using System.Collections.Generic; -namespace Generator.Persistence.Adapter.UnitTest.Common +namespace Generator.Persistence.Adapter.Common { public static class ApplicationDbContextFactory { diff --git a/src/Generator.Persistence.Adapter/Context/ApplicationDbContext.cs b/src/Generator.Persistence.Adapter/Context/ApplicationDbContext.cs index 1f5682b..7b231e6 100644 --- a/src/Generator.Persistence.Adapter/Context/ApplicationDbContext.cs +++ b/src/Generator.Persistence.Adapter/Context/ApplicationDbContext.cs @@ -1,20 +1,30 @@ using Generator.DomainApi.Model; +using Generator.DomainApi.Port; using Microsoft.EntityFrameworkCore; using System.Threading; using System.Threading.Tasks; namespace Generator.Persistence.Adapter.Context { - public class ApplicationDbContext : DbContext + public class ApplicationDbContext : DbContext, IApplicationDbContext { public ApplicationDbContext() { } + public ApplicationDbContext(DbContextOptions options) : base(options) { } - public DbSet Deals { get; set; } + public DbSet DbDeals { get; set; } + + private IDealSet _deals; + + public IDealSet Deals + { + get { return _deals ??= new DealSet(Set()); } + set => _deals = value; + } public override Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) { diff --git a/src/Generator.Persistence.Adapter/Context/DealSet.cs b/src/Generator.Persistence.Adapter/Context/DealSet.cs new file mode 100644 index 0000000..3ba2d6d --- /dev/null +++ b/src/Generator.Persistence.Adapter/Context/DealSet.cs @@ -0,0 +1,43 @@ +using System.Collections.Generic; +using System.Linq; +using Generator.DomainApi.Model; +using Generator.DomainApi.Port; +using Microsoft.EntityFrameworkCore; + +namespace Generator.Persistence.Adapter.Context +{ + public class DealSet: IDealSet + { + private readonly DbSet _dealDbSet; + + public DealSet(DbSet dealDbSet) + { + _dealDbSet = dealDbSet; + } + + public void AddRange(List deals) + { + _dealDbSet.AddRange(deals); + } + + public void Add(Deal deal) + { + _dealDbSet.Add(deal); + } + + public void Remove(Deal deal) + { + _dealDbSet.Remove(deal); + } + + public T Find(int id) where T : Deal + { + return _dealDbSet.Find(id) as T; + } + + public List ToList() where T : Deal + { + return _dealDbSet.ToList() as List; + } + } +} \ No newline at end of file diff --git a/src/Generator.Persistence.Adapter/PersistenceExtensions.cs b/src/Generator.Persistence.Adapter/PersistenceExtensions.cs index 212c2e4..70544bf 100644 --- a/src/Generator.Persistence.Adapter/PersistenceExtensions.cs +++ b/src/Generator.Persistence.Adapter/PersistenceExtensions.cs @@ -1,4 +1,5 @@ -using Generator.Persistence.Adapter.Context; +using Generator.DomainApi.Port; +using Generator.Persistence.Adapter.Context; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; @@ -10,6 +11,8 @@ public static void AddPersistence(this IServiceCollection serviceCollection) { serviceCollection.AddDbContext(options => options.UseInMemoryDatabase("HexaArchConnInMemoryDb")); + + serviceCollection.AddScoped(); } } } diff --git a/src/Generator/Startup.cs b/src/Generator/Startup.cs index 8aa9493..617531c 100644 --- a/src/Generator/Startup.cs +++ b/src/Generator/Startup.cs @@ -2,6 +2,8 @@ using Generator.DomainApi.Services; using Generator.Extension; using Generator.Persistence.Adapter; +using Generator.Persistence.Adapter.Common; +using Generator.Persistence.Adapter.Context; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; @@ -46,6 +48,7 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerF if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); + SeedTestingData(app); } app.UseHttpsRedirection(); @@ -67,5 +70,16 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerF endpoints.MapControllers(); }); } + + private void SeedTestingData(IApplicationBuilder app) + { + using (var serviceScope = app.ApplicationServices.CreateScope()) + { + var context = serviceScope.ServiceProvider.GetService(); + + context.Deals.AddRange(ApplicationDbContextFactory.GetDeals()); + context.SaveChanges(); + } + } } }