diff --git a/COA.EnterpriseServices.Creditors/COA.EnterpriseServices.Creditors.csproj b/COA.EnterpriseServices.Creditors/COA.EnterpriseServices.Creditors.csproj
index 2a1a83b..286947f 100644
--- a/COA.EnterpriseServices.Creditors/COA.EnterpriseServices.Creditors.csproj
+++ b/COA.EnterpriseServices.Creditors/COA.EnterpriseServices.Creditors.csproj
@@ -5,6 +5,10 @@
COA.EnterpriseServices.Creditors
+
+
+
+
diff --git a/COA.EnterpriseServices.Creditors/CreditorController.cs b/COA.EnterpriseServices.Creditors/CreditorController.cs
index acf1d8a..2e0bc56 100644
--- a/COA.EnterpriseServices.Creditors/CreditorController.cs
+++ b/COA.EnterpriseServices.Creditors/CreditorController.cs
@@ -19,9 +19,9 @@
return creditorLibrary.SetCreditorStatus(creditorId, status);
}
- public void AddOfferResponse()
+ public void AddOfferResponse(OfferResponse response)
{
- creditorLibrary.AddOfferResponse();
+ creditorLibrary.AddOfferResponse(response);
}
}
}
diff --git a/COA.EnterpriseServices.Creditors/CreditorLibrary.cs b/COA.EnterpriseServices.Creditors/CreditorLibrary.cs
index 163519f..3d6079d 100644
--- a/COA.EnterpriseServices.Creditors/CreditorLibrary.cs
+++ b/COA.EnterpriseServices.Creditors/CreditorLibrary.cs
@@ -15,7 +15,7 @@ namespace COA.EnterpriseServices.Creditors
{
var creditor = creditorHelper.GetCreditor(creditorId);
- return creditor.Status;
+ return creditor.creditorStatus;
}
public bool SetCreditorStatus(int creditorId, string status)
@@ -23,11 +23,11 @@ namespace COA.EnterpriseServices.Creditors
return creditorHelper.SetCreditorStatus(creditorId, status);
}
- public void AddOfferResponse()
+ public void AddOfferResponse(OfferResponse response)
{
// just a stub until we add actual DataObjects
- creditorHelper.SetOriginalCreditorAsPrimary(1);
+ creditorHelper.SetOriginalCreditorAsPrimary(response.CreditorId);
}
}
}
diff --git a/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201015133238_add-account-number.Designer.cs b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201015133238_add-account-number.Designer.cs
new file mode 100644
index 0000000..95283b5
--- /dev/null
+++ b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201015133238_add-account-number.Designer.cs
@@ -0,0 +1,122 @@
+//
+using System;
+using COA.EnterpriseServices.DataAccess.EntityFramework;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+namespace COA.EnterpriseServices.DataAccess.EntityFramework.Migrations
+{
+ [DbContext(typeof(QuickBaseContext))]
+ [Migration("20201015133238_add-account-number")]
+ partial class addaccountnumber
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "3.1.9")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ modelBuilder.Entity("COA.EnterpriseServices.DataAccess.Entities.Client", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Address")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("City")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Created")
+ .HasColumnType("datetime2");
+
+ b.Property("Email")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FirstName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("LastName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Modified")
+ .HasColumnType("datetime2");
+
+ b.Property("Phone")
+ .HasColumnType("bigint");
+
+ b.Property("State")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Zip")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Clients");
+ });
+
+ modelBuilder.Entity("COA.EnterpriseServices.DataAccess.Entities.Creditor", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("AccountNumber")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ClientFirstName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ClientLastName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Created")
+ .HasColumnType("datetime2");
+
+ b.Property("CurrentCreditorProfileId")
+ .HasColumnType("int");
+
+ b.Property("Modified")
+ .HasColumnType("datetime2");
+
+ b.Property("OriginalCreditorProfileId")
+ .HasColumnType("int");
+
+ b.Property("Status")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Creditors");
+ });
+
+ modelBuilder.Entity("COA.EnterpriseServices.DataAccess.Entities.SettlementAttempt", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Created")
+ .HasColumnType("datetime2");
+
+ b.Property("Modified")
+ .HasColumnType("datetime2");
+
+ b.HasKey("Id");
+
+ b.ToTable("SettlementAttempts");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201015133238_add-account-number.cs b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201015133238_add-account-number.cs
new file mode 100644
index 0000000..f10c7d7
--- /dev/null
+++ b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201015133238_add-account-number.cs
@@ -0,0 +1,22 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace COA.EnterpriseServices.DataAccess.EntityFramework.Migrations
+{
+ public partial class addaccountnumber : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AddColumn(
+ name: "AccountNumber",
+ table: "Creditors",
+ nullable: true);
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ name: "AccountNumber",
+ table: "Creditors");
+ }
+ }
+}
diff --git a/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/QuickBaseContextModelSnapshot.cs b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/QuickBaseContextModelSnapshot.cs
index 44734ed..9c0bc54 100644
--- a/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/QuickBaseContextModelSnapshot.cs
+++ b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/QuickBaseContextModelSnapshot.cs
@@ -68,6 +68,9 @@ namespace COA.EnterpriseServices.DataAccess.EntityFramework.Migrations
.HasColumnType("int")
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+ b.Property("AccountNumber")
+ .HasColumnType("nvarchar(max)");
+
b.Property("ClientFirstName")
.HasColumnType("nvarchar(max)");
diff --git a/COA.EnterpriseServices.DataAccess.EntityFramework/QuickBaseContext.cs b/COA.EnterpriseServices.DataAccess.EntityFramework/QuickBaseContext.cs
index 0bf15ca..ab7a800 100644
--- a/COA.EnterpriseServices.DataAccess.EntityFramework/QuickBaseContext.cs
+++ b/COA.EnterpriseServices.DataAccess.EntityFramework/QuickBaseContext.cs
@@ -14,6 +14,6 @@ namespace COA.EnterpriseServices.DataAccess.EntityFramework
public DbSet Creditors { get; set; }
public DbSet SettlementAttempts { get; set; }
- public DbSet Clients { get; set; }
+ public DbSet Clients { get; set; }
}
}
diff --git a/COA.EnterpriseServices.DataAccess.QuickBase/COA.EnterpriseServices.DataAccess.QuickBase.csproj b/COA.EnterpriseServices.DataAccess.QuickBase/COA.EnterpriseServices.DataAccess.QuickBase.csproj
index da7db72..1072e82 100644
--- a/COA.EnterpriseServices.DataAccess.QuickBase/COA.EnterpriseServices.DataAccess.QuickBase.csproj
+++ b/COA.EnterpriseServices.DataAccess.QuickBase/COA.EnterpriseServices.DataAccess.QuickBase.csproj
@@ -4,6 +4,10 @@
netcoreapp3.1
+
+
+
+
diff --git a/COA.EnterpriseServices.DataAccess.QuickBase/FieldMapRegistry.cs b/COA.EnterpriseServices.DataAccess.QuickBase/FieldMapRegistry.cs
index 77b197b..0d6bd96 100644
--- a/COA.EnterpriseServices.DataAccess.QuickBase/FieldMapRegistry.cs
+++ b/COA.EnterpriseServices.DataAccess.QuickBase/FieldMapRegistry.cs
@@ -24,13 +24,13 @@ namespace COA.EnterpriseServices.DataAccess.QuickBase
AddFieldMap(c => c.CurrentCreditorProfileId, 90);
AddFieldMap(c => c.OriginalCreditorProfileId, 91);
- AddFieldMap(c => c.Id, 1);
- AddFieldMap(c => c.Created, 2);
- AddFieldMap(c => c.Modified, 3);
- AddFieldMap(c => c.Email, 10);
- AddFieldMap(c => c.Phone, 11);
- AddFieldMap(c => c.FirstName, 20);
- AddFieldMap(c => c.LastName, 21);
+ AddFieldMap(c => c.Id, 1);
+ AddFieldMap(c => c.Created, 2);
+ AddFieldMap(c => c.Modified, 3);
+ AddFieldMap(c => c.Email, 10);
+ AddFieldMap(c => c.Phone, 11);
+ AddFieldMap(c => c.FirstName, 20);
+ AddFieldMap(c => c.LastName, 21);
}
internal static void AddFieldMap(Expression> property, int fieldId)
diff --git a/COA.EnterpriseServices.DataAccess/COA.EnterpriseServices.DataAccess.csproj b/COA.EnterpriseServices.DataAccess/COA.EnterpriseServices.DataAccess.csproj
index 9d6b8d4..77436bb 100644
--- a/COA.EnterpriseServices.DataAccess/COA.EnterpriseServices.DataAccess.csproj
+++ b/COA.EnterpriseServices.DataAccess/COA.EnterpriseServices.DataAccess.csproj
@@ -6,6 +6,7 @@
+
diff --git a/COA.EnterpriseServices.DataAccess/Dependencies.cs b/COA.EnterpriseServices.DataAccess/Dependencies.cs
index 2355894..cf61d3f 100644
--- a/COA.EnterpriseServices.DataAccess/Dependencies.cs
+++ b/COA.EnterpriseServices.DataAccess/Dependencies.cs
@@ -1,4 +1,5 @@
-using COA.EnterpriseServices.DataAccess.Helpers;
+using AutoMapper;
+using COA.EnterpriseServices.DataAccess.Helpers;
using StructureMap;
namespace COA.EnterpriseServices.DataAccess
@@ -23,6 +24,8 @@ namespace COA.EnterpriseServices.DataAccess
c.For(typeof(IDataAccess<>)).Singleton();
c.For(typeof(DataAccessManager<>)).Singleton();
+ c.For().Singleton().Use(() => Mapping.GetMapper());
+
c.For().Singleton();
c.For().Singleton();
});
diff --git a/COA.EnterpriseServices.DataAccess/Entities/Creditor.cs b/COA.EnterpriseServices.DataAccess/Entities/Creditor.cs
index 161780b..ff350ba 100644
--- a/COA.EnterpriseServices.DataAccess/Entities/Creditor.cs
+++ b/COA.EnterpriseServices.DataAccess/Entities/Creditor.cs
@@ -12,5 +12,6 @@ namespace COA.EnterpriseServices.DataAccess.Entities
public string ClientLastName { get; set; }
public int CurrentCreditorProfileId { get; set; }
public int OriginalCreditorProfileId { get; set; }
+ public string AccountNumber { get; set; }
}
}
diff --git a/COA.EnterpriseServices.DataAccess/Helpers/ClientHelper.cs b/COA.EnterpriseServices.DataAccess/Helpers/ClientHelper.cs
index 2d325fe..9050ca2 100644
--- a/COA.EnterpriseServices.DataAccess/Helpers/ClientHelper.cs
+++ b/COA.EnterpriseServices.DataAccess/Helpers/ClientHelper.cs
@@ -1,20 +1,22 @@
-using COA.EnterpriseServices.DataAccess.Entities;
+using AutoMapper;
using System.Collections.Generic;
namespace COA.EnterpriseServices.DataAccess.Helpers
{
public class ClientHelper
{
- private readonly DataAccessManager clientDataAccess;
+ private readonly DataAccessManager clientDataAccess;
- public ClientHelper(DataAccessManager clientDataAccess)
+ public ClientHelper(DataAccessManager clientDataAccess, IMapper mapper)
{
this.clientDataAccess = clientDataAccess;
}
- public ICollection FindByEmail(string email)
+ public ICollection FindByEmail(string email)
{
- return clientDataAccess.Get(c => c.Email.Equals(email));
+ var client = clientDataAccess.Get(c => c.Email.Equals(email));
+
+ return client;
}
}
}
diff --git a/COA.EnterpriseServices.DataAccess/Helpers/CreditorHelper.cs b/COA.EnterpriseServices.DataAccess/Helpers/CreditorHelper.cs
index 79d59f2..f81d49d 100644
--- a/COA.EnterpriseServices.DataAccess/Helpers/CreditorHelper.cs
+++ b/COA.EnterpriseServices.DataAccess/Helpers/CreditorHelper.cs
@@ -1,5 +1,5 @@
-using COA.EnterpriseServices.DataAccess.Entities;
-using System.Collections.Generic;
+using AutoMapper;
+using COA.EnterpriseServices.DataAccess.Entities;
namespace COA.EnterpriseServices.DataAccess.Helpers
{
@@ -7,16 +7,21 @@ namespace COA.EnterpriseServices.DataAccess.Helpers
{
private readonly DataAccessManager creditorDataAccess;
private readonly DataAccessManager settlementAttemptDataAccess;
+ private readonly IMapper mapper;
- public CreditorHelper(DataAccessManager creditorDataAccess, DataAccessManager settlementAttemptDataAccess)
+ public CreditorHelper(DataAccessManager creditorDataAccess, DataAccessManager settlementAttemptDataAccess, IMapper mapper)
{
this.creditorDataAccess = creditorDataAccess;
this.settlementAttemptDataAccess = settlementAttemptDataAccess;
+ this.mapper = mapper;
}
- public Creditor GetCreditor(int id)
+ public Creditors.Creditor GetCreditor(int id)
{
- return creditorDataAccess.Get(id);
+ var creditor = creditorDataAccess.Get(id);
+
+ // map EF => domain type
+ return mapper.Map(creditor);
}
public SettlementAttempt GetSettlementAttempt(int id)
@@ -24,32 +29,18 @@ namespace COA.EnterpriseServices.DataAccess.Helpers
return settlementAttemptDataAccess.Get(id);
}
- public ICollection FindByName(string name)
+ public bool AddCreditor(Creditors.Creditor creditor)
{
- // TODO: use AutoMapper to return mapped domain objects!
+ var creditorEntity = mapper.Map(creditor);
- return creditorDataAccess.Get(c => c.ClientFirstName.Contains(name) || c.ClientLastName.Contains(name));
- }
-
- public ICollection FindByStatus(string status)
- {
- // TODO: use AutoMapper to return mapped domain objects!
-
- return creditorDataAccess.Get(c => c.Status == status);
- }
-
- public bool AddCreditor(Creditor creditor)
- {
- // TODO: use AutoMapper to pass in mapped domain object!
-
- return creditorDataAccess.Add(creditor);
+ return creditorDataAccess.Add(creditorEntity);
}
public bool UpdateCreditor(Creditor creditor)
{
- // TODO: use AutoMapper to pass in mapped domain object!
+ var creditorEntity = mapper.Map(creditor);
- return creditorDataAccess.Update(creditor);
+ return creditorDataAccess.Update(creditorEntity);
}
public bool SetCreditorStatus(int creditorId, string status)
diff --git a/COA.EnterpriseServices.DataAccess/Mapping.cs b/COA.EnterpriseServices.DataAccess/Mapping.cs
new file mode 100644
index 0000000..e6a35ae
--- /dev/null
+++ b/COA.EnterpriseServices.DataAccess/Mapping.cs
@@ -0,0 +1,20 @@
+using AutoMapper;
+using AutoMapper.Configuration;
+
+namespace COA.EnterpriseServices.DataAccess
+{
+ public static class Mapping
+ {
+ public static IMapper GetMapper()
+ {
+ var cfg = new MapperConfigurationExpression();
+ cfg.AddProfile();
+
+ //Mapper.Initialize(cfg);
+ // or
+ var mapperConfig = new MapperConfiguration(cfg);
+
+ return new Mapper(mapperConfig);
+ }
+ }
+}
diff --git a/COA.EnterpriseServices.DataAccess/MappingProfile.cs b/COA.EnterpriseServices.DataAccess/MappingProfile.cs
index 3a9a81c..e4be049 100644
--- a/COA.EnterpriseServices.DataAccess/MappingProfile.cs
+++ b/COA.EnterpriseServices.DataAccess/MappingProfile.cs
@@ -1,4 +1,5 @@
using AutoMapper;
+using COA.EnterpriseServices.Creditors;
namespace COA.EnterpriseServices.DataAccess
{
@@ -6,7 +7,23 @@ namespace COA.EnterpriseServices.DataAccess
{
public MappingProfile()
{
- // add mappings between domain and entity objects here
+ #region EF => Domain
+
+ CreateMap()
+ .ForMember(d => d.creditorStatus, o => o.MapFrom(s => s.Status));
+
+ CreateMap();
+
+ #endregion
+
+ #region Domain => EF
+
+ CreateMap()
+ .ForMember(d => d.Status, o => o.MapFrom(s => s.creditorStatus));
+
+ CreateMap();
+
+ #endregion
}
}
}
diff --git a/COA.EnterpriseServices.Sandbox/Program.cs b/COA.EnterpriseServices.Sandbox/Program.cs
index d7715c0..d48cc8c 100644
--- a/COA.EnterpriseServices.Sandbox/Program.cs
+++ b/COA.EnterpriseServices.Sandbox/Program.cs
@@ -1,7 +1,6 @@
using COA.EnterpriseServices.Creditors;
using COA.EnterpriseServices.DataAccess;
using System;
-using System.Runtime.CompilerServices;
namespace COA.EnterpriseServices.Sandbox
{
@@ -11,10 +10,13 @@ namespace COA.EnterpriseServices.Sandbox
{
var creditorController = Dependencies.Container.GetInstance();
- //Console.WriteLine(creditorController.GetCreditorStatus(1));
+ Console.WriteLine(creditorController.GetCreditorStatus(1));
//Console.WriteLine(creditorController.SetCreditorStatus(1, "Active"));
- creditorController.AddOfferResponse();
+ //creditorController.AddOfferResponse(new OfferResponse
+ //{
+ // CreditorId = 1
+ //});
Console.ReadLine();
}