From 22d7b2c129e46dcc6b83d768c394d4e5742204d1 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 22 Aug 2020 15:42:24 -0500 Subject: [PATCH] =?UTF-8?q?feat(directory):=20=E2=9C=A8=20wire=20up=20ef?= =?UTF-8?q?=20to=20postgres=20container?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 4 ++ .../Controllers/FilterListsController.cs | 28 ++++++++++++++ .../Controllers/WeatherForecastController.cs | 38 ------------------- .../FilterLists.Directory.Api.csproj | 4 ++ .../src/FilterLists.Directory.Api/Program.cs | 2 +- .../Properties/launchSettings.json | 6 +-- .../src/FilterLists.Directory.Api/Startup.cs | 11 ++---- .../WeatherForecast.cs | 15 -------- .../Entities/Contracts/IHaveSurrogateKey.cs | 2 +- .../Queries/Facade/DirectoryQueryDbContext.cs | 6 ++- .../Queries/Facade/DirectoryQueryFacade.cs | 6 +-- .../Queries/Facade/QueryFacadeExtension.cs | 16 ++++++++ docker-compose.override.yml | 2 +- docker-compose.yml | 14 ++++++- 14 files changed, 83 insertions(+), 71 deletions(-) create mode 100644 .env create mode 100644 directory/src/FilterLists.Directory.Api/Controllers/FilterListsController.cs delete mode 100644 directory/src/FilterLists.Directory.Api/Controllers/WeatherForecastController.cs delete mode 100644 directory/src/FilterLists.Directory.Api/WeatherForecast.cs create mode 100644 directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/QueryFacadeExtension.cs diff --git a/.env b/.env new file mode 100644 index 000000000..89e4e0e25 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +DIRECTORY_CONNECTION_STRING=Server=filterlists.directory.db;Database=filterlists;Uid=filterlists;Pwd=filterlists; +DIRECTORY_DB_USER=filterlists +DIRECTORY_DB_PASSWORD=filterlists +DIRECTORY_DB_DATABASE=filterlists \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Api/Controllers/FilterListsController.cs b/directory/src/FilterLists.Directory.Api/Controllers/FilterListsController.cs new file mode 100644 index 000000000..0af82abd7 --- /dev/null +++ b/directory/src/FilterLists.Directory.Api/Controllers/FilterListsController.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Facade; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; + +namespace FilterLists.Directory.Api.Controllers +{ + [ApiController] + [Route("lists")] + public class FilterListsController : ControllerBase + { + private readonly IQueryDirectory _queryContext; + + public FilterListsController(IQueryDirectory queryContext) + { + _queryContext = queryContext; + } + + [HttpGet] + public async Task> Get(CancellationToken cancellationToken) + { + return await _queryContext.FilterLists.ToListAsync(cancellationToken); + } + } +} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Api/Controllers/WeatherForecastController.cs b/directory/src/FilterLists.Directory.Api/Controllers/WeatherForecastController.cs deleted file mode 100644 index 84cf17a5e..000000000 --- a/directory/src/FilterLists.Directory.Api/Controllers/WeatherForecastController.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; - -namespace FilterLists.Directory.Api.Controllers -{ - [ApiController] - [Route("[controller]")] - public class WeatherForecastController : ControllerBase - { - private static readonly string[] Summaries = - { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - private readonly ILogger _logger; - - public WeatherForecastController(ILogger logger) - { - _logger = logger; - } - - [HttpGet] - public IEnumerable Get() - { - var rng = new Random(); - return Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = DateTime.Now.AddDays(index), - TemperatureC = rng.Next(-20, 55), - Summary = Summaries[rng.Next(Summaries.Length)] - }) - .ToArray(); - } - } -} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj b/directory/src/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj index da295f5b5..6ea86db41 100644 --- a/directory/src/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj +++ b/directory/src/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj @@ -22,4 +22,8 @@ + + + + diff --git a/directory/src/FilterLists.Directory.Api/Program.cs b/directory/src/FilterLists.Directory.Api/Program.cs index b8d0b4094..dc9d49798 100644 --- a/directory/src/FilterLists.Directory.Api/Program.cs +++ b/directory/src/FilterLists.Directory.Api/Program.cs @@ -3,7 +3,7 @@ namespace FilterLists.Directory.Api { - public class Program + public static class Program { public static void Main(string[] args) { diff --git a/directory/src/FilterLists.Directory.Api/Properties/launchSettings.json b/directory/src/FilterLists.Directory.Api/Properties/launchSettings.json index 7e22ff798..b9b74e8c3 100644 --- a/directory/src/FilterLists.Directory.Api/Properties/launchSettings.json +++ b/directory/src/FilterLists.Directory.Api/Properties/launchSettings.json @@ -12,7 +12,7 @@ "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, - "launchUrl": "weatherforecast", + "launchUrl": "lists", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } @@ -20,7 +20,7 @@ "FilterLists.Directory.Api": { "commandName": "Project", "launchBrowser": true, - "launchUrl": "weatherforecast", + "launchUrl": "lists", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, @@ -29,7 +29,7 @@ "Docker": { "commandName": "Docker", "launchBrowser": true, - "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/weatherforecast", + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/lists", "publishAllPorts": true, "useSSL": true } diff --git a/directory/src/FilterLists.Directory.Api/Startup.cs b/directory/src/FilterLists.Directory.Api/Startup.cs index 0439368ed..28b2fd7c1 100644 --- a/directory/src/FilterLists.Directory.Api/Startup.cs +++ b/directory/src/FilterLists.Directory.Api/Startup.cs @@ -1,3 +1,5 @@ +using FilterLists.Directory.Infrastructure.Persistence.Queries; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Facade; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; @@ -15,24 +17,19 @@ public Startup(IConfiguration configuration) public IConfiguration Configuration { get; } - // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); + services.RegisterQueryFacade(Configuration); } - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + public static void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) app.UseDeveloperExceptionPage(); - app.UseHttpsRedirection(); - app.UseRouting(); - app.UseAuthorization(); - app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } diff --git a/directory/src/FilterLists.Directory.Api/WeatherForecast.cs b/directory/src/FilterLists.Directory.Api/WeatherForecast.cs deleted file mode 100644 index 12ab95279..000000000 --- a/directory/src/FilterLists.Directory.Api/WeatherForecast.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; - -namespace FilterLists.Directory.Api -{ - public class WeatherForecast - { - public DateTime Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string Summary { get; set; } - } -} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Contracts/IHaveSurrogateKey.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Contracts/IHaveSurrogateKey.cs index 72a99496c..a1d527751 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Contracts/IHaveSurrogateKey.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Contracts/IHaveSurrogateKey.cs @@ -1,6 +1,6 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Contracts { - public interface IHaveSurrogateKey + internal interface IHaveSurrogateKey { ushort Id { get; } } diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryDbContext.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryDbContext.cs index 23606b030..422b61609 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryDbContext.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryDbContext.cs @@ -3,8 +3,12 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Facade { - public class DirectoryQueryDbContext : DbContext + internal class DirectoryQueryDbContext : DbContext { + public DirectoryQueryDbContext(DbContextOptions options) : base(options) + { + } + public DbSet FilterLists => Set(); public DbSet Languages => Set(); public DbSet Licenses => Set(); diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryFacade.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryFacade.cs index ce82099ea..f8ded563b 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryFacade.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryFacade.cs @@ -6,13 +6,13 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Facade { - public class DirectoryQueryFacade : IQueryDirectory, IAsyncDisposable + internal class DirectoryQueryFacade : IQueryDirectory, IAsyncDisposable { private readonly DirectoryQueryDbContext _dbContext; - public DirectoryQueryFacade() + public DirectoryQueryFacade(DirectoryQueryDbContext dbContext) { - _dbContext = new DirectoryQueryDbContext(); + _dbContext = dbContext; } public async ValueTask DisposeAsync() diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/QueryFacadeExtension.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/QueryFacadeExtension.cs new file mode 100644 index 000000000..05cc7ad3d --- /dev/null +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/QueryFacadeExtension.cs @@ -0,0 +1,16 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Facade +{ + public static class QueryFacadeExtension + { + public static void RegisterQueryFacade(this IServiceCollection services, IConfiguration configuration) + { + services.AddDbContextPool(o => + o.UseNpgsql(configuration.GetConnectionString("DirectoryConnection"))); + services.AddScoped(); + } + } +} \ No newline at end of file diff --git a/docker-compose.override.yml b/docker-compose.override.yml index dbbaf7182..98b0de9ef 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -1,4 +1,4 @@ -version: '3.4' +version: '3.8' services: filterlists.directory.api: diff --git a/docker-compose.yml b/docker-compose.yml index c50ae9ac9..9868b2eee 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3.4' +version: '3.8' services: filterlists.directory.api: @@ -6,3 +6,15 @@ services: build: context: . dockerfile: directory/src/FilterLists.Directory.Api/Dockerfile + depends_on: + - filterlists.directory.db + environment: + ConnectionStrings__DirectoryConnection: ${DIRECTORY_CONNECTION_STRING} + + filterlists.directory.db: + image: postgres:alpine + restart: always + environment: + POSTGRES_USER: ${DIRECTORY_DB_USER} + POSTGRES_PASSWORD: ${DIRECTORY_DB_PASSWORD} + POSTGRES_DB: ${DIRECTORY_DB_DATABASE} \ No newline at end of file