From a1e65eb93d567deb2e3e7d56209943b18c9a1fc8 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 8 Apr 2017 16:25:48 -0500 Subject: [PATCH] lots of changes, successfully talking to db now --- .../Controllers/ListsController.cs | 7 ++- .../Extensions/ConfigureServicesCollection.cs | 13 +++++ api/FilterLists.Api/FilterLists.Api.csproj | 5 ++ api/FilterLists.Api/Startup.cs | 21 ++----- .../Repositories/IListRepository.cs | 6 +- .../Contexts/FilterListsDbContext.cs | 6 +- .../Extensions/ConfigureServicesCollection.cs | 27 +++++++++ .../Repositories/IRepository.cs | 16 ------ .../Repositories/ListRepository.cs | 21 ++++++- .../Repositories/Repository.cs | 56 ------------------- api/FilterLists.Models/List.cs | 23 ++++---- .../Extensions/ConfigureServicesCollection.cs | 14 +++++ api/FilterLists.Services/IListService.cs | 4 +- api/FilterLists.Services/ListService.cs | 13 +++-- 14 files changed, 115 insertions(+), 117 deletions(-) create mode 100644 api/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs create mode 100644 api/FilterLists.Data/DependencyInjection/Extensions/ConfigureServicesCollection.cs delete mode 100644 api/FilterLists.Data/Repositories/IRepository.cs delete mode 100644 api/FilterLists.Data/Repositories/Repository.cs create mode 100644 api/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs diff --git a/api/FilterLists.Api/Controllers/ListsController.cs b/api/FilterLists.Api/Controllers/ListsController.cs index 41460e60e..a600c7c7c 100644 --- a/api/FilterLists.Api/Controllers/ListsController.cs +++ b/api/FilterLists.Api/Controllers/ListsController.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using FilterLists.Models; using FilterLists.Services; using Microsoft.AspNetCore.Mvc; @@ -16,10 +17,10 @@ public ListsController(IListService listService) // GET api/lists [HttpGet] - public IEnumerable Get() + public IEnumerable Get() { - var lists = _listService.Lists; - return (IEnumerable) lists; + var result = _listService.GetAll(); + return result; } // GET api/lists/5 diff --git a/api/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs b/api/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs new file mode 100644 index 000000000..67d926f24 --- /dev/null +++ b/api/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs @@ -0,0 +1,13 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace FilterLists.Api.DependencyInjection.Extensions +{ + public static class ConfigureServicesCollection + { + public static IServiceCollection RegisterFilterListsApi(this IServiceCollection services) + { + services.AddMvc(); + return services; + } + } +} \ No newline at end of file diff --git a/api/FilterLists.Api/FilterLists.Api.csproj b/api/FilterLists.Api/FilterLists.Api.csproj index 72f4c59cc..8731a0059 100644 --- a/api/FilterLists.Api/FilterLists.Api.csproj +++ b/api/FilterLists.Api/FilterLists.Api.csproj @@ -21,5 +21,10 @@ + + + ..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Configuration.dll + + diff --git a/api/FilterLists.Api/Startup.cs b/api/FilterLists.Api/Startup.cs index d577207e5..17e3fb090 100644 --- a/api/FilterLists.Api/Startup.cs +++ b/api/FilterLists.Api/Startup.cs @@ -1,13 +1,11 @@ -using FilterLists.Data.Contexts; -using FilterLists.Services; +using FilterLists.Api.DependencyInjection.Extensions; +using FilterLists.Data.DependencyInjection.Extensions; +using FilterLists.Services.DependencyInjection.Extensions; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; -using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -using MySQL.Data.EntityFrameworkCore; -using MySQL.Data.EntityFrameworkCore.Extensions; namespace FilterLists.Api { @@ -25,24 +23,17 @@ public Startup(IHostingEnvironment env) public IConfigurationRoot Configuration { get; } - // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { - // Add framework services. - services.AddEntityFramework() - .AddEntityFrameworkMySQL() - .AddDbContext(options => - options.UseMySQL(Configuration.GetConnectionString("FilterListsConnection"))); - services.AddMvc(); - services.AddTransient(); + services.RegisterFilterListsRepositories(Configuration); + services.RegisterFilterListsServices(); + services.RegisterFilterListsApi(); } - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); - app.UseMvc(); } } diff --git a/api/FilterLists.Data.Contracts/Repositories/IListRepository.cs b/api/FilterLists.Data.Contracts/Repositories/IListRepository.cs index 854f6b5d6..8461e6ee9 100644 --- a/api/FilterLists.Data.Contracts/Repositories/IListRepository.cs +++ b/api/FilterLists.Data.Contracts/Repositories/IListRepository.cs @@ -1,6 +1,10 @@ -namespace FilterLists.Data.Contracts.Repositories +using System.Collections.Generic; +using FilterLists.Models; + +namespace FilterLists.Data.Contracts.Repositories { public interface IListRepository { + IEnumerable GetAll(); } } \ No newline at end of file diff --git a/api/FilterLists.Data/Contexts/FilterListsDbContext.cs b/api/FilterLists.Data/Contexts/FilterListsDbContext.cs index 012a8c1e4..c0d21215b 100644 --- a/api/FilterLists.Data/Contexts/FilterListsDbContext.cs +++ b/api/FilterLists.Data/Contexts/FilterListsDbContext.cs @@ -11,10 +11,6 @@ public FilterListsDbContext(DbContextOptions options) { } - public FilterListsDbContext() - { - } - - public DbSet Lists { get; set; } + public DbSet List { get; set; } } } \ No newline at end of file diff --git a/api/FilterLists.Data/DependencyInjection/Extensions/ConfigureServicesCollection.cs b/api/FilterLists.Data/DependencyInjection/Extensions/ConfigureServicesCollection.cs new file mode 100644 index 000000000..668305d91 --- /dev/null +++ b/api/FilterLists.Data/DependencyInjection/Extensions/ConfigureServicesCollection.cs @@ -0,0 +1,27 @@ +using FilterLists.Data.Contexts; +using FilterLists.Data.Contracts.Repositories; +using FilterLists.Data.Repositories; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using MySQL.Data.EntityFrameworkCore; +using MySQL.Data.EntityFrameworkCore.Extensions; + +namespace FilterLists.Data.DependencyInjection.Extensions +{ + public static class ConfigureServicesCollection + { + public static IServiceCollection RegisterFilterListsRepositories(this IServiceCollection services, + IConfiguration configuration) + { + services.AddSingleton(c => configuration); + services.AddEntityFramework() + .AddEntityFrameworkMySQL() + .AddDbContext(options => + options.UseMySQL(configuration.GetConnectionString("FilterListsConnection"))); + services.TryAddScoped(); + return services; + } + } +} \ No newline at end of file diff --git a/api/FilterLists.Data/Repositories/IRepository.cs b/api/FilterLists.Data/Repositories/IRepository.cs deleted file mode 100644 index cf0a28715..000000000 --- a/api/FilterLists.Data/Repositories/IRepository.cs +++ /dev/null @@ -1,16 +0,0 @@ -//https://code.msdn.microsoft.com/Generic-Repository-Pattern-f133bca4/sourcecode?fileId=164016&pathId=804969589 - -using System.Collections.Generic; -using FilterLists.Models; - -namespace FilterLists.Data.Repositories -{ - public interface IRepository where T : BaseEntity - { - IEnumerable GetAll(); - T Get(long id); - void Insert(T entity); - void Update(T entity); - void Delete(T entity); - } -} \ No newline at end of file diff --git a/api/FilterLists.Data/Repositories/ListRepository.cs b/api/FilterLists.Data/Repositories/ListRepository.cs index 7d34105ae..a87e8e71e 100644 --- a/api/FilterLists.Data/Repositories/ListRepository.cs +++ b/api/FilterLists.Data/Repositories/ListRepository.cs @@ -1,13 +1,28 @@ -using FilterLists.Data.Contexts; +using System.Collections.Generic; +using System.Linq; +using FilterLists.Data.Contexts; using FilterLists.Data.Contracts.Repositories; using FilterLists.Models; +using Microsoft.EntityFrameworkCore; namespace FilterLists.Data.Repositories { - public class ListRepository : Repository, IListRepository + public class ListRepository : IListRepository { - public ListRepository(FilterListsDbContext context) : base(context) + private readonly DbContextOptions _options; + + public ListRepository(DbContextOptions options) { + _options = options; + } + + public IEnumerable GetAll() + { + using (var context = new FilterListsDbContext(_options)) + { + context.Database.OpenConnection(); + return context.List.AsEnumerable(); + } } } } \ No newline at end of file diff --git a/api/FilterLists.Data/Repositories/Repository.cs b/api/FilterLists.Data/Repositories/Repository.cs deleted file mode 100644 index 50758914b..000000000 --- a/api/FilterLists.Data/Repositories/Repository.cs +++ /dev/null @@ -1,56 +0,0 @@ -//https://code.msdn.microsoft.com/Generic-Repository-Pattern-f133bca4/sourcecode?fileId=164016&pathId=902500354 - -using System; -using System.Collections.Generic; -using System.Linq; -using FilterLists.Data.Contexts; -using FilterLists.Models; -using Microsoft.EntityFrameworkCore; - -namespace FilterLists.Data.Repositories -{ - public class Repository : IRepository where T : BaseEntity - { - private readonly FilterListsDbContext _context; - private readonly DbSet _entities; - - public Repository(FilterListsDbContext context) - { - _context = context; - _entities = context.Set(); - } - - public IEnumerable GetAll() - { - return _entities.AsEnumerable(); - } - - public T Get(long id) - { - return _entities.SingleOrDefault(s => s.Id == id); - } - - public void Insert(T entity) - { - if (entity == null) - throw new ArgumentNullException(nameof(entity)); - _entities.Add(entity); - _context.SaveChanges(); - } - - public void Update(T entity) - { - if (entity == null) - throw new ArgumentNullException(nameof(entity)); - _context.SaveChanges(); - } - - public void Delete(T entity) - { - if (entity == null) - throw new ArgumentNullException(nameof(entity)); - _entities.Remove(entity); - _context.SaveChanges(); - } - } -} \ No newline at end of file diff --git a/api/FilterLists.Models/List.cs b/api/FilterLists.Models/List.cs index f7fcf103a..361664a9f 100644 --- a/api/FilterLists.Models/List.cs +++ b/api/FilterLists.Models/List.cs @@ -1,19 +1,20 @@ using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; namespace FilterLists.Models { public class List : BaseEntity { - [StringLength(1024)] [Column("description")] public string Description; - [StringLength(512)] [Column("description_source_url")] public string DescriptionSourceUrl; - [StringLength(512)] [Column("donate_url")] public string DonateUrl; - [StringLength(128)] [Column("email")] public string Email; - [StringLength(512)] [Column("forum_url")] public string ForumUrl; - [StringLength(512)] [Column("home_url")] public string HomeUrl; - [Key] [Column("id")] public new int Id; - [StringLength(512)] [Column("issues_url")] public string IssuesUrl; - [StringLength(256)] [Column("name")] public string Name; - [StringLength(512)] [Column("view_url")] public string ViewUrl; + [Key] + public new int Id { get; set; } + + public string Description { get; set; } + public string DescriptionSourceUrl { get; set; } + public string DonateUrl { get; set; } + public string Email { get; set; } + public string ForumUrl { get; set; } + public string HomeUrl { get; set; } + public string IssuesUrl { get; set; } + public string Name { get; set; } + public string ViewUrl { get; set; } } } \ No newline at end of file diff --git a/api/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs b/api/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs new file mode 100644 index 000000000..e13b3a29f --- /dev/null +++ b/api/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs @@ -0,0 +1,14 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; + +namespace FilterLists.Services.DependencyInjection.Extensions +{ + public static class ConfigureServicesCollection + { + public static IServiceCollection RegisterFilterListsServices(this IServiceCollection services) + { + services.TryAddScoped(); + return services; + } + } +} \ No newline at end of file diff --git a/api/FilterLists.Services/IListService.cs b/api/FilterLists.Services/IListService.cs index 30be47ba2..32f4d14db 100644 --- a/api/FilterLists.Services/IListService.cs +++ b/api/FilterLists.Services/IListService.cs @@ -1,10 +1,10 @@ -using System.Linq; +using System.Collections.Generic; using FilterLists.Models; namespace FilterLists.Services { public interface IListService { - IQueryable Lists { get; } + IEnumerable GetAll(); } } \ No newline at end of file diff --git a/api/FilterLists.Services/ListService.cs b/api/FilterLists.Services/ListService.cs index 4fe9c7e37..12f3bb81e 100644 --- a/api/FilterLists.Services/ListService.cs +++ b/api/FilterLists.Services/ListService.cs @@ -1,18 +1,21 @@ -using System.Linq; -using FilterLists.Data.Repositories; +using System.Collections.Generic; +using FilterLists.Data.Contracts.Repositories; using FilterLists.Models; namespace FilterLists.Services { public class ListService : IListService { - private readonly IRepository _listRepository; + private readonly IListRepository _listRepository; - public ListService(IRepository listRepository) + public ListService(IListRepository listRepository) { _listRepository = listRepository; } - public IQueryable Lists => (IQueryable) _listRepository.GetAll(); + public IEnumerable GetAll() + { + return _listRepository.GetAll(); + } } } \ No newline at end of file