diff --git a/NoSQL/compose.yml b/NoSQL/compose.yml index bbb0d00f0..990d10ed3 100644 --- a/NoSQL/compose.yml +++ b/NoSQL/compose.yml @@ -8,6 +8,17 @@ services: - 5433:5432 environment: - POSTGRES_PASSWORD=docker + #Administration Db mongo + promocode-factory-administration-db-mongo: + image: "mongo:latest" + container_name: 'promocode-factory-administration-db-mongo' + restart: always + ports: + - 27018:27017 + environment: + - MONGO_INITDB_ROOT_USERNAME=root + - MONGO_INITDB_ROOT_PASSWORD=docker + #Administration Api promocode-factory-administration-api: build: src/Pcf.Administration/ @@ -16,9 +27,11 @@ services: ports: - "8091:8080" environment: - - "ConnectionStrings:PromocodeFactoryAdministrationDb=Host=promocode-factory-administration-db;Database=promocode_factory_administration_db;Username=postgres;Password=docker" + #- "ConnectionStrings:PromocodeFactoryAdministrationDb=Host=promocode-factory-administration-db;Database=promocode_factory_administration_db;Username=postgres;Password=docker" + - "ConnectionStrings:PromocodeFactoryAdministrationDbMongo=mongodb://root:docker@promocode-factory-administration-db-mongo:27018/promocode_factory_administration_db_mongo" depends_on: - - promocode-factory-administration-db + #- promocode-factory-administration-db + - promocode-factory-administration-db-mongo #ReceivingFromPartner Db promocode-factory-receiving-from-partner-db: @@ -52,6 +65,17 @@ services: - 5435:5432 environment: - POSTGRES_PASSWORD=docker + #Administration Db mongo + promocode-factory-giving-to-customer-db-mongo: + image: "mongo:latest" + container_name: 'promocode-factory-giving-to-customer-db-mongo' + restart: always + ports: + - 27019:27017 + environment: + - MONGO_INITDB_ROOT_USERNAME=root + - MONGO_INITDB_ROOT_PASSWORD=docker + #GivingToCustomer Api promocode-factory-giving-to-customer-api: build: src/Pcf.GivingToCustomer/ diff --git a/NoSQL/src/Pcf.Administration/Pcf.Administration.DataAccess/Data/EfDbInitializer.cs b/NoSQL/src/Pcf.Administration/Pcf.Administration.DataAccess/Data/EfDbInitializer.cs index 117d5877f..de0bbf7d4 100644 --- a/NoSQL/src/Pcf.Administration/Pcf.Administration.DataAccess/Data/EfDbInitializer.cs +++ b/NoSQL/src/Pcf.Administration/Pcf.Administration.DataAccess/Data/EfDbInitializer.cs @@ -1,22 +1,32 @@ -namespace Pcf.Administration.DataAccess.Data +using MongoDB.Driver; +using Pcf.Administration.Core.Domain.Administration; + +namespace Pcf.Administration.DataAccess.Data { public class EfDbInitializer : IDbInitializer { private readonly DataContext _dataContext; + private readonly IMongoDatabase _db; - public EfDbInitializer(DataContext dataContext) + public EfDbInitializer(DataContext dataContext, IMongoDatabase db) { _dataContext = dataContext; + _db = db; } public void InitializeDb() { - _dataContext.Database.EnsureDeleted(); - _dataContext.Database.EnsureCreated(); - - _dataContext.AddRange(FakeDataFactory.Employees); - _dataContext.SaveChanges(); + /* _dataContext.Database.EnsureDeleted(); + _dataContext.Database.EnsureCreated(); + + _dataContext.AddRange(FakeDataFactory.Employees); + _dataContext.SaveChanges();*/ + string employeeCollectionName = typeof(Employee).Name; + _db.DropCollection(employeeCollectionName); + var collectionEmployee = _db.GetCollection(employeeCollectionName); + collectionEmployee.InsertManyAsync(FakeDataFactory.Employees); + } } } \ No newline at end of file diff --git a/NoSQL/src/Pcf.Administration/Pcf.Administration.DataAccess/Pcf.Administration.DataAccess.csproj b/NoSQL/src/Pcf.Administration/Pcf.Administration.DataAccess/Pcf.Administration.DataAccess.csproj index 9c871c5bc..fa0f8748b 100644 --- a/NoSQL/src/Pcf.Administration/Pcf.Administration.DataAccess/Pcf.Administration.DataAccess.csproj +++ b/NoSQL/src/Pcf.Administration/Pcf.Administration.DataAccess/Pcf.Administration.DataAccess.csproj @@ -6,6 +6,7 @@ + diff --git a/NoSQL/src/Pcf.Administration/Pcf.Administration.DataAccess/Repositories/MongoRepository.cs b/NoSQL/src/Pcf.Administration/Pcf.Administration.DataAccess/Repositories/MongoRepository.cs new file mode 100644 index 000000000..63d5af230 --- /dev/null +++ b/NoSQL/src/Pcf.Administration/Pcf.Administration.DataAccess/Repositories/MongoRepository.cs @@ -0,0 +1,69 @@ +using Pcf.Administration.Core.Abstractions.Repositories; +using Pcf.Administration.Core.Domain; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; +using MongoDB.Driver; +using MongoDB.Bson; + +namespace Pcf.Administration.DataAccess.Repositories +{ + public class MongoRepository + : IRepository + where T : BaseEntity + { + private readonly IMongoDatabase _db; + private readonly IMongoCollection _collection; + + public MongoRepository(IMongoDatabase db) + { + _db = db; + _collection = db.GetCollection(typeof(T).Name); + } + + public async Task> GetAllAsync() + { + var entities = await _collection.Find("{}").ToListAsync(); + return entities; + } + + public async Task GetByIdAsync(Guid id) + { + var entity = await _collection.Find(x => x.Id == id).FirstOrDefaultAsync(); + return entity; + } + public async Task> GetRangeByIdsAsync(List ids) + { + var entities = await _collection.FindAsync(x => ids.Contains(x.Id)); + return await entities.ToListAsync(); + } + + public async Task GetFirstWhere(Expression> predicate) + { + return await _collection.Find(predicate).FirstOrDefaultAsync(); + } + + public async Task> GetWhere(Expression> predicate) + { + return await (await _collection.FindAsync(predicate)).ToListAsync(); + } + + public async Task AddAsync(T entity) + { + await _collection.InsertOneAsync(entity); + } + public async Task UpdateAsync(T entity) + { + await _collection.FindOneAndReplaceAsync(x => x.Id == entity.Id, entity); + } + + public async Task DeleteAsync(T entity) + { + await _collection.FindOneAndDeleteAsync(x => x.Equals(entity)); + } + + } +} \ No newline at end of file diff --git a/NoSQL/src/Pcf.Administration/Pcf.Administration.WebHost/Pcf.Administration.WebHost.csproj b/NoSQL/src/Pcf.Administration/Pcf.Administration.WebHost/Pcf.Administration.WebHost.csproj index e9e4c80f3..bf5e5a2e6 100644 --- a/NoSQL/src/Pcf.Administration/Pcf.Administration.WebHost/Pcf.Administration.WebHost.csproj +++ b/NoSQL/src/Pcf.Administration/Pcf.Administration.WebHost/Pcf.Administration.WebHost.csproj @@ -16,6 +16,8 @@ + + diff --git a/NoSQL/src/Pcf.Administration/Pcf.Administration.WebHost/Startup.cs b/NoSQL/src/Pcf.Administration/Pcf.Administration.WebHost/Startup.cs index 97d5b3057..cd0756636 100644 --- a/NoSQL/src/Pcf.Administration/Pcf.Administration.WebHost/Startup.cs +++ b/NoSQL/src/Pcf.Administration/Pcf.Administration.WebHost/Startup.cs @@ -16,6 +16,7 @@ using Pcf.Administration.DataAccess.Repositories; using Pcf.Administration.Core.Domain.Administration; using IConfiguration = Microsoft.Extensions.Configuration.IConfiguration; +using MongoDB.Driver; namespace Pcf.Administration.WebHost { @@ -34,7 +35,8 @@ public void ConfigureServices(IServiceCollection services) { services.AddControllers().AddMvcOptions(x=> x.SuppressAsyncSuffixInActionNames = false); - services.AddScoped(typeof(IRepository<>), typeof(EfRepository<>)); + //services.AddScoped(typeof(IRepository<>), typeof(EfRepository<>)); + services.AddScoped(typeof(IRepository<>), typeof(MongoRepository<>)); services.AddScoped(); services.AddDbContext(x => { @@ -44,6 +46,10 @@ public void ConfigureServices(IServiceCollection services) x.UseLazyLoadingProxies(); }); + services.AddSingleton(new MongoClient(Configuration.GetConnectionString("PromocodeFactoryAdministrationDbMongo")) + .GetDatabase(Configuration.GetSection("mongoDbName").Value) + ); + services.AddOpenApiDocument(options => { options.Title = "PromoCode Factory Administration API Doc"; diff --git a/NoSQL/src/Pcf.Administration/Pcf.Administration.WebHost/appsettings.json b/NoSQL/src/Pcf.Administration/Pcf.Administration.WebHost/appsettings.json index 704547c62..201956480 100644 --- a/NoSQL/src/Pcf.Administration/Pcf.Administration.WebHost/appsettings.json +++ b/NoSQL/src/Pcf.Administration/Pcf.Administration.WebHost/appsettings.json @@ -6,8 +6,10 @@ "Microsoft.Hosting.Lifetime": "Information" } }, - "ConnectionStrings":{ - "PromocodeFactoryAdministrationDb":"Host=localhost;Database=promocode_factory_administration_db;Username=postgres;Password=docker;Port=5433" + "mongoDbName": "promocode_factory_administration_db_mongo", + "ConnectionStrings": { + "PromocodeFactoryAdministrationDb": "Host=localhost;Database=promocode_factory_administration_db;Username=postgres;Password=docker;Port=5433", + "PromocodeFactoryAdministrationDbMongo": "mongodb://root:docker@localhost:27018" }, "AllowedHosts": "*" } diff --git a/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.DataAccess/Data/EfDbInitializer.cs b/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.DataAccess/Data/EfDbInitializer.cs index fa48e6379..a0523e71e 100644 --- a/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.DataAccess/Data/EfDbInitializer.cs +++ b/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.DataAccess/Data/EfDbInitializer.cs @@ -1,4 +1,6 @@ -using System.Threading.Tasks; +using MongoDB.Driver; +using Pcf.GivingToCustomer.Core.Domain; +using System.Threading.Tasks; namespace Pcf.GivingToCustomer.DataAccess.Data { @@ -6,22 +8,32 @@ public class EfDbInitializer : IDbInitializer { private readonly DataContext _dataContext; + private readonly IMongoDatabase _db; - public EfDbInitializer(DataContext dataContext) + public EfDbInitializer(DataContext dataContext, IMongoDatabase db) { _dataContext = dataContext; + _db = db; } public void InitializeDb() { - _dataContext.Database.EnsureDeleted(); - _dataContext.Database.EnsureCreated(); + //_dataContext.Database.EnsureDeleted(); + //_dataContext.Database.EnsureCreated(); - _dataContext.AddRange(FakeDataFactory.Preferences); - _dataContext.SaveChanges(); - - _dataContext.AddRange(FakeDataFactory.Customers); - _dataContext.SaveChanges(); + //_dataContext.AddRange(FakeDataFactory.Preferences); + //_dataContext.SaveChanges(); + + //_dataContext.AddRange(FakeDataFactory.Customers); + //_dataContext.SaveChanges(); + + _db.DropCollection(typeof(Preference).Name); + var collectionPreferences = _db.GetCollection(typeof(Preference).Name); + collectionPreferences.InsertMany(FakeDataFactory.Preferences); + + _db.DropCollection(typeof(Customer).Name); + var collectionCustomers = _db.GetCollection(typeof(Customer).Name); + collectionCustomers.InsertMany(FakeDataFactory.Customers); } } } \ No newline at end of file diff --git a/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.DataAccess/Pcf.GivingToCustomer.DataAccess.csproj b/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.DataAccess/Pcf.GivingToCustomer.DataAccess.csproj index 133057bcd..6eeeb4a23 100644 --- a/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.DataAccess/Pcf.GivingToCustomer.DataAccess.csproj +++ b/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.DataAccess/Pcf.GivingToCustomer.DataAccess.csproj @@ -6,6 +6,7 @@ + diff --git a/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.DataAccess/Repositories/MongoRepository.cs b/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.DataAccess/Repositories/MongoRepository.cs new file mode 100644 index 000000000..5f2a103fe --- /dev/null +++ b/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.DataAccess/Repositories/MongoRepository.cs @@ -0,0 +1,69 @@ +using Pcf.GivingToCustomer.Core.Abstractions.Repositories; +using Pcf.GivingToCustomer.Core.Domain; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; +using MongoDB.Driver; +using MongoDB.Bson; + +namespace Pcf.GivingToCustomer.DataAccess.Repositories +{ + public class MongoRepository + : IRepository + where T : BaseEntity + { + private readonly IMongoDatabase _db; + private readonly IMongoCollection _collection; + + public MongoRepository(IMongoDatabase db) + { + _db = db; + _collection = db.GetCollection(typeof(T).Name); + } + + public async Task> GetAllAsync() + { + var entities = await _collection.Find("{}").ToListAsync(); + return entities; + } + + public async Task GetByIdAsync(Guid id) + { + var entity = await _collection.Find(x => x.Id == id).FirstOrDefaultAsync(); + return entity; + } + public async Task> GetRangeByIdsAsync(List ids) + { + var entities = await _collection.FindAsync(x => ids.Contains(x.Id)); + return await entities.ToListAsync(); + } + + public async Task GetFirstWhere(Expression> predicate) + { + return await _collection.Find(predicate).FirstOrDefaultAsync(); + } + + public async Task> GetWhere(Expression> predicate) + { + return await (await _collection.FindAsync(predicate)).ToListAsync(); + } + + public async Task AddAsync(T entity) + { + await _collection.InsertOneAsync(entity); + } + public async Task UpdateAsync(T entity) + { + await _collection.FindOneAndReplaceAsync(x => x.Id == entity.Id, entity); + } + + public async Task DeleteAsync(T entity) + { + await _collection.FindOneAndDeleteAsync(x => x.Equals(entity)); + } + + } +} \ No newline at end of file diff --git a/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.WebHost/Startup.cs b/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.WebHost/Startup.cs index 601337fc1..5edc07b3b 100644 --- a/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.WebHost/Startup.cs +++ b/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.WebHost/Startup.cs @@ -17,6 +17,7 @@ using Pcf.GivingToCustomer.DataAccess.Repositories; using Pcf.GivingToCustomer.Integration; using IConfiguration = Microsoft.Extensions.Configuration.IConfiguration; +using MongoDB.Driver; namespace Pcf.GivingToCustomer.WebHost { @@ -35,7 +36,8 @@ public void ConfigureServices(IServiceCollection services) { services.AddControllers().AddMvcOptions(x=> x.SuppressAsyncSuffixInActionNames = false); - services.AddScoped(typeof(IRepository<>), typeof(EfRepository<>)); + //services.AddScoped(typeof(IRepository<>), typeof(EfRepository<>)); + services.AddScoped(typeof(IRepository<>), typeof(MongoRepository<>)); services.AddScoped(); services.AddScoped(); services.AddDbContext(x => @@ -46,6 +48,10 @@ public void ConfigureServices(IServiceCollection services) x.UseLazyLoadingProxies(); }); + services.AddSingleton(new MongoClient(Configuration.GetConnectionString("PromocodeFactoryGivingTocustomerDbMongo")) + .GetDatabase(Configuration.GetSection("mongoDbName").Value) + ); + services.AddOpenApiDocument(options => { options.Title = "PromoCode Factory Giving To Customer API Doc"; diff --git a/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.WebHost/appsettings.json b/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.WebHost/appsettings.json index cfae3069d..bf55b7991 100644 --- a/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.WebHost/appsettings.json +++ b/NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.WebHost/appsettings.json @@ -6,8 +6,10 @@ "Microsoft.Hosting.Lifetime": "Information" } }, - "ConnectionStrings":{ - "PromocodeFactoryGivingToCustomerDb":"Host=localhost;Database=promocode_factory_givingToCustomer_db;Username=postgres;Password=docker;Port=5435" + "mongoDbName": "promocode_factory_giving_to_customer_db_mongo", + "ConnectionStrings": { + "PromocodeFactoryGivingToCustomerDb": "Host=localhost;Database=promocode_factory_givingToCustomer_db;Username=postgres;Password=docker;Port=5435", + "PromocodeFactoryGivingToCustomerDbMongo": "mongodb://root:docker@localhost:27019" }, "AllowedHosts": "*" }