diff --git a/api/FilterLists.Data.Contracts/FilterLists.Data.Contracts.csproj b/api/FilterLists.Data.Contracts/FilterLists.Data.Contracts.csproj
new file mode 100644
index 000000000..5784fbcc0
--- /dev/null
+++ b/api/FilterLists.Data.Contracts/FilterLists.Data.Contracts.csproj
@@ -0,0 +1,11 @@
+
+
+
+ netcoreapp1.1
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/FilterLists.Data.Contracts/IListRepository.cs b/api/FilterLists.Data.Contracts/IListRepository.cs
new file mode 100644
index 000000000..1f3470961
--- /dev/null
+++ b/api/FilterLists.Data.Contracts/IListRepository.cs
@@ -0,0 +1,6 @@
+namespace FilterLists.Data.Contracts
+{
+ public interface IListRepository
+ {
+ }
+}
\ No newline at end of file
diff --git a/api/FilterLists.Data/FilterLists.Data.csproj b/api/FilterLists.Data/FilterLists.Data.csproj
index f15d5d960..576b1c4f2 100644
--- a/api/FilterLists.Data/FilterLists.Data.csproj
+++ b/api/FilterLists.Data/FilterLists.Data.csproj
@@ -9,6 +9,7 @@
+
diff --git a/api/FilterLists.Data/IRepository.cs b/api/FilterLists.Data/IRepository.cs
new file mode 100644
index 000000000..ff56d8eb9
--- /dev/null
+++ b/api/FilterLists.Data/IRepository.cs
@@ -0,0 +1,16 @@
+//https://code.msdn.microsoft.com/Generic-Repository-Pattern-f133bca4/sourcecode?fileId=164016&pathId=804969589
+
+using System.Collections.Generic;
+using FilterLists.Models;
+
+namespace FilterLists.Data
+{
+ 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/ListRepository.cs b/api/FilterLists.Data/ListRepository.cs
index 97ce3916a..02d9399f2 100644
--- a/api/FilterLists.Data/ListRepository.cs
+++ b/api/FilterLists.Data/ListRepository.cs
@@ -1,6 +1,12 @@
-namespace FilterLists.Data
+using FilterLists.Data.Contracts;
+using FilterLists.Models;
+
+namespace FilterLists.Data
{
- public class ListRepository
+ public class ListRepository : Repository, IListRepository
{
+ public ListRepository(FilterListsContext context) : base(context)
+ {
+ }
}
}
\ No newline at end of file
diff --git a/api/FilterLists.Data/Repository.cs b/api/FilterLists.Data/Repository.cs
new file mode 100644
index 000000000..8d231ef91
--- /dev/null
+++ b/api/FilterLists.Data/Repository.cs
@@ -0,0 +1,55 @@
+//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.Models;
+using Microsoft.EntityFrameworkCore;
+
+namespace FilterLists.Data
+{
+ public class Repository : IRepository where T : BaseEntity
+ {
+ private readonly FilterListsContext _context;
+ private readonly DbSet _entities;
+
+ public Repository(FilterListsContext 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/BaseEntity.cs b/api/FilterLists.Models/BaseEntity.cs
new file mode 100644
index 000000000..5ce0c2726
--- /dev/null
+++ b/api/FilterLists.Models/BaseEntity.cs
@@ -0,0 +1,13 @@
+//https://code.msdn.microsoft.com/Generic-Repository-Pattern-f133bca4/sourcecode?fileId=164016&pathId=1938870460
+
+using System;
+
+namespace FilterLists.Models
+{
+ public class BaseEntity
+ {
+ public long Id { get; set; }
+ public DateTime AddedDate { get; set; }
+ public DateTime ModifiedDate { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/api/FilterLists.Models/List.cs b/api/FilterLists.Models/List.cs
index 8a7200be4..2ebf2235d 100644
--- a/api/FilterLists.Models/List.cs
+++ b/api/FilterLists.Models/List.cs
@@ -3,7 +3,7 @@
namespace FilterLists.Models
{
- public class List
+ public class List : BaseEntity
{
[StringLength(1024)] [Column("description")] public string Description;
[StringLength(512)] [Column("description_source_url")] public string DescriptionSourceUrl;
diff --git a/api/FilterLists.sln b/api/FilterLists.sln
index 216e89c7c..1aee0ff6f 100644
--- a/api/FilterLists.sln
+++ b/api/FilterLists.sln
@@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FilterLists.Data", "FilterL
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FilterLists.Models", "FilterLists.Models\FilterLists.Models.csproj", "{EBEF0C2E-2631-4AEF-ACAF-F5AE5A568975}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FilterLists.Data.Contracts", "FilterLists.Data.Contracts\FilterLists.Data.Contracts.csproj", "{07A5064E-1CB9-4990-84F8-25A9A89B1D45}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -27,6 +29,10 @@ Global
{EBEF0C2E-2631-4AEF-ACAF-F5AE5A568975}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EBEF0C2E-2631-4AEF-ACAF-F5AE5A568975}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EBEF0C2E-2631-4AEF-ACAF-F5AE5A568975}.Release|Any CPU.Build.0 = Release|Any CPU
+ {07A5064E-1CB9-4990-84F8-25A9A89B1D45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {07A5064E-1CB9-4990-84F8-25A9A89B1D45}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {07A5064E-1CB9-4990-84F8-25A9A89B1D45}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {07A5064E-1CB9-4990-84F8-25A9A89B1D45}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE