28
28
using System . Threading . Tasks ;
29
29
using EventFlow . Aggregates ;
30
30
using EventFlow . Core ;
31
- using EventFlow . EventCaches ;
32
31
using EventFlow . Exceptions ;
33
32
using EventFlow . Logs ;
34
33
using EventFlow . MsSql ;
@@ -56,13 +55,43 @@ public MsSqlEventStore(
56
55
IEventJsonSerializer eventJsonSerializer ,
57
56
IEventUpgradeManager eventUpgradeManager ,
58
57
IEnumerable < IMetadataProvider > metadataProviders ,
59
- IEventCache eventCache ,
60
58
IMsSqlConnection connection )
61
- : base ( log , aggregateFactory , eventJsonSerializer , eventCache , eventUpgradeManager , metadataProviders )
59
+ : base ( log , aggregateFactory , eventJsonSerializer , eventUpgradeManager , metadataProviders )
62
60
{
63
61
_connection = connection ;
64
62
}
65
63
64
+ protected override async Task < AllCommittedEventsPage > LoadAllCommittedDomainEvents (
65
+ long startPostion ,
66
+ long endPosition ,
67
+ CancellationToken cancellationToken )
68
+ {
69
+ const string sql = @"
70
+ SELECT
71
+ GlobalSequenceNumber, BatchId, AggregateId, AggregateName, Data, Metadata, AggregateSequenceNumber
72
+ FROM EventFlow
73
+ WHERE
74
+ GlobalSequenceNumber >= @FromId AND GlobalSequenceNumber <= @ToId
75
+ ORDER BY
76
+ GlobalSequenceNumber ASC" ;
77
+ var eventDataModels = await _connection . QueryAsync < EventDataModel > (
78
+ Label . Named ( "mssql-fetch-events" ) ,
79
+ cancellationToken ,
80
+ sql ,
81
+ new
82
+ {
83
+ FromId = startPostion ,
84
+ ToId = endPosition ,
85
+ } )
86
+ . ConfigureAwait ( false ) ;
87
+
88
+ var nextPosition = eventDataModels . Any ( )
89
+ ? eventDataModels . Max ( e => e . GlobalSequenceNumber ) + 1
90
+ : startPostion ;
91
+
92
+ return new AllCommittedEventsPage ( nextPosition , eventDataModels ) ;
93
+ }
94
+
66
95
protected override async Task < IReadOnlyCollection < ICommittedDomainEvent > > CommitEventsAsync < TAggregate , TIdentity > (
67
96
TIdentity id ,
68
97
IReadOnlyCollection < SerializedEvent > serializedEvents ,
@@ -73,15 +102,13 @@ protected override async Task<IReadOnlyCollection<ICommittedDomainEvent>> Commit
73
102
return new ICommittedDomainEvent [ ] { } ;
74
103
}
75
104
76
- var batchId = Guid . NewGuid ( ) ;
77
105
var aggregateType = typeof ( TAggregate ) ;
78
- var aggregateName = aggregateType . Name . Replace ( "Aggregate" , string . Empty ) ;
79
106
var eventDataModels = serializedEvents
80
107
. Select ( ( e , i ) => new EventDataModel
81
108
{
82
109
AggregateId = id . Value ,
83
- AggregateName = aggregateName ,
84
- BatchId = batchId ,
110
+ AggregateName = e . Metadata [ MetadataKeys . AggregateName ] ,
111
+ BatchId = Guid . Parse ( e . Metadata [ MetadataKeys . BatchId ] ) ,
85
112
Data = e . Data ,
86
113
Metadata = e . Meta ,
87
114
AggregateSequenceNumber = e . AggregateSequenceNumber ,
@@ -166,29 +193,23 @@ ORDER BY
166
193
return eventDataModels ;
167
194
}
168
195
169
- protected override async Task < IReadOnlyCollection < ICommittedDomainEvent > > LoadCommittedEventsAsync (
170
- GlobalSequenceNumberRange globalSequenceNumberRange ,
196
+ public override async Task DeleteAggregateAsync < TAggregate , TIdentity > (
197
+ TIdentity id ,
171
198
CancellationToken cancellationToken )
172
199
{
173
- const string sql = @"
174
- SELECT
175
- GlobalSequenceNumber, BatchId, AggregateId, AggregateName, Data, Metadata, AggregateSequenceNumber
176
- FROM EventFlow
177
- WHERE
178
- GlobalSequenceNumber >= @FromId AND GlobalSequenceNumber <= @ToId
179
- ORDER BY
180
- GlobalSequenceNumber ASC" ;
181
- var eventDataModels = await _connection . QueryAsync < EventDataModel > (
182
- Label . Named ( "mssql-fetch-events" ) ,
200
+ const string sql = @"DELETE FROM EventFlow WHERE AggregateId = @AggregateId" ;
201
+ var affectedRows = await _connection . ExecuteAsync (
202
+ Label . Named ( "mssql-delete-aggregate" ) ,
183
203
cancellationToken ,
184
204
sql ,
185
- new
186
- {
187
- FromId = globalSequenceNumberRange . From ,
188
- ToId = globalSequenceNumberRange . To ,
189
- } )
205
+ new { AggregateId = id . Value } )
190
206
. ConfigureAwait ( false ) ;
191
- return eventDataModels ;
207
+
208
+ Log . Verbose (
209
+ "Deleted aggregate '{0}' with ID '{1}' by deleting all of its {2} events" ,
210
+ typeof ( TAggregate ) . Name ,
211
+ id ,
212
+ affectedRows ) ;
192
213
}
193
214
}
194
215
}
0 commit comments