summaryrefslogtreecommitdiff
path: root/slips/src/app/Marina/DataAccess/Repositories/CustomerRepository.cs
diff options
context:
space:
mode:
Diffstat (limited to 'slips/src/app/Marina/DataAccess/Repositories/CustomerRepository.cs')
-rw-r--r--slips/src/app/Marina/DataAccess/Repositories/CustomerRepository.cs51
1 files changed, 51 insertions, 0 deletions
diff --git a/slips/src/app/Marina/DataAccess/Repositories/CustomerRepository.cs b/slips/src/app/Marina/DataAccess/Repositories/CustomerRepository.cs
new file mode 100644
index 0000000..ade3e83
--- /dev/null
+++ b/slips/src/app/Marina/DataAccess/Repositories/CustomerRepository.cs
@@ -0,0 +1,51 @@
+using Marina.DataAccess.DataMappers;
+using Marina.Domain;
+using Marina.Domain.Interfaces;
+using Marina.Domain.Repositories;
+using Marina.Infrastructure.Container;
+
+namespace Marina.DataAccess.Repositories {
+ public class CustomerRepository : ICustomerRepository {
+ public CustomerRepository()
+ : this( new IdentityMap< ICustomer >( ), Resolve.DependencyFor< ICustomerDataMapper >( ) ) {}
+
+ public CustomerRepository( IIdentityMap< ICustomer > identityMap, ICustomerDataMapper mapper ) {
+ _identityMap = identityMap;
+ _mapper = mapper;
+ }
+
+ public ICustomer FindBy( long customerId ) {
+ if ( _identityMap.ContainsObjectWithIdOf( customerId ) ) {
+ return _identityMap.FindObjectWithIdOf( customerId );
+ }
+ return FindCustomerBy( customerId );
+ }
+
+ public ICustomer FindBy( string username ) {
+ return _mapper.FindBy( username );
+ }
+
+ public void Save( ICustomer customer ) {
+ if ( _identityMap.ContainsObjectWithIdOf( customer.ID( ) ) ) {
+ _mapper.Update( customer );
+ }
+ else {
+ _mapper.Insert( customer );
+ _identityMap.Add( customer );
+ }
+ }
+
+ public ICustomer NewCustomer() {
+ return new Customer( );
+ }
+
+ private ICustomer FindCustomerBy( long customerId ) {
+ ICustomer customer = _mapper.FindBy( customerId );
+ _identityMap.Add( customer );
+ return customer;
+ }
+
+ private readonly IIdentityMap< ICustomer > _identityMap;
+ private readonly ICustomerDataMapper _mapper;
+ }
+} \ No newline at end of file