14
14
15
15
namespace ArchitectNow . Mongo . Db
16
16
{
17
- //Test notifications
18
- public abstract class BaseRepository < TModel , TDataContext > : IBaseRepository < TModel > where TModel : BaseDocument
17
+ public abstract class BaseRepository < TModel , TDataContext , TId > : IBaseRepository < TModel , TId > where TModel : BaseDocument < TId >
19
18
where TDataContext : MongoDataContext
19
+ where TId : IComparable < TId >
20
20
{
21
21
private readonly IValidator < TModel > _validator ;
22
22
@@ -87,27 +87,32 @@ public virtual Task<List<TModel>> GetAllAsync()
87
87
return results ;
88
88
}
89
89
90
- public virtual Task < TModel > GetOneAsync ( Guid id )
90
+ protected abstract FilterDefinition < TModel > AreIdsEqual ( TId id ) ;
91
+ protected abstract TId CreateNewId ( ) ;
92
+
93
+ public virtual Task < TModel > GetOneAsync ( TId id )
91
94
{
92
- var result = GetCollection ( ) . Find ( x => x . Id == id ) . FirstOrDefaultAsync ( ) ;
95
+ var filter = AreIdsEqual ( id ) ;
96
+
97
+ var result = GetCollection ( ) . Find ( filter ) . FirstOrDefaultAsync ( ) ;
93
98
94
99
return result ;
95
100
}
96
101
97
102
public virtual async Task < TModel > SaveAsync ( TModel item )
98
103
{
99
- if ( item . Id != Guid . Empty )
104
+ if ( ! Equals ( item . Id , default ( TId ) ) )
100
105
item . UpdatedDate = DateTime . UtcNow ;
101
-
106
+
102
107
var errors = await ValidateObject ( item ) ;
103
108
104
109
if ( errors . Any ( ) )
105
110
throw new ValidationException ( "A validation error has occured saving item of type '" + item . GetType ( ) ,
106
111
errors ) ;
107
112
108
- if ( item . Id == Guid . Empty )
113
+ if ( Equals ( item . Id , default ( TId ) ) )
109
114
{
110
- item . Id = Guid . NewGuid ( ) ;
115
+ item . Id = CreateNewId ( ) ;
111
116
await GetCollection ( ) . InsertOneAsync ( item ) ;
112
117
}
113
118
else
@@ -123,7 +128,7 @@ public virtual async Task<TModel> SaveAsync(TModel item)
123
128
return item ;
124
129
}
125
130
126
- public virtual async Task < bool > DeleteAsync ( Guid id )
131
+ public virtual async Task < bool > DeleteAsync ( TId id )
127
132
{
128
133
var filter = Builders < TModel > . Filter . Eq ( "_id" , id ) ;
129
134
0 commit comments