@@ -7,17 +7,25 @@ namespace RandomAPI.Repository
77{
88 public class EventRepository : IEventRepository , IInitializer
99 {
10- private readonly IDbConnection _db ;
10+ private readonly Func < IDbConnection > _connectionFactory ;
1111 private readonly ILogger < EventRepository > _logger ;
1212
13- public EventRepository ( IDbConnection db , ILogger < EventRepository > logger )
13+ public EventRepository ( Func < IDbConnection > connectionFactory , ILogger < EventRepository > logger )
1414 {
15- _db = db ;
15+ _connectionFactory = connectionFactory ;
1616 _logger = logger ;
1717 }
1818
19+ private IDbConnection CreateConnection ( )
20+ {
21+ var conn = _connectionFactory ( ) ;
22+ conn . Open ( ) ;
23+ return conn ;
24+ }
25+
1926 public async Task InitializeAsync ( )
2027 {
28+ using var db = CreateConnection ( ) ;
2129 var sql =
2230 @"
2331 CREATE TABLE IF NOT EXISTS Events (
@@ -30,12 +38,13 @@ CREATE TABLE IF NOT EXISTS Events (
3038 EventId TEXT NOT NULL,
3139 CONSTRAINT UQ_EventId UNIQUE (EventId)
3240 );" ;
33- await _db . ExecuteAsync ( sql ) ;
41+ await db . ExecuteAsync ( sql ) ;
3442 }
3543
3644 /// <inheritdoc />
3745 public async Task < int > AddEventAsync ( Event eventModel )
3846 {
47+ using var db = CreateConnection ( ) ;
3948 const string sql =
4049 @"
4150 INSERT INTO Events (Timestamp, EventId, Service, Type, DataType, JsonData)
@@ -45,7 +54,7 @@ INSERT INTO Events (Timestamp, EventId, Service, Type, DataType, JsonData)
4554
4655 try
4756 {
48- var newId = await _db . ExecuteScalarAsync < int > ( sql , eventModel ) ;
57+ var newId = await db . ExecuteScalarAsync < int > ( sql , eventModel ) ;
4958 return newId ;
5059 }
5160 catch ( SqliteException ex ) when ( ex . SqliteErrorCode == 19 ) // Error code 19 is 'CONSTRAINT'
@@ -54,7 +63,7 @@ INSERT INTO Events (Timestamp, EventId, Service, Type, DataType, JsonData)
5463 $ "WARNING: Duplicate event detected. EventId: { eventModel . EventId } "
5564 ) ;
5665 const string selectExistingSql = "SELECT Id FROM Events WHERE EventId = @EventId" ;
57- var existingId = await _db . ExecuteScalarAsync < int > (
66+ var existingId = await db . ExecuteScalarAsync < int > (
5867 selectExistingSql ,
5968 new { eventModel . EventId }
6069 ) ;
@@ -70,19 +79,21 @@ INSERT INTO Events (Timestamp, EventId, Service, Type, DataType, JsonData)
7079 /// <inheritdoc />
7180 public async Task < IEnumerable < Event > > GetAllEventsAsync ( )
7281 {
82+ using var db = CreateConnection ( ) ;
7383 // Retrieves all records, ordered by newest first.
7484 const string sql = "SELECT * FROM Events ORDER BY Timestamp DESC" ;
7585
76- var events = await _db . QueryAsync < Event > ( sql ) ;
86+ var events = await db . QueryAsync < Event > ( sql ) ;
7787 return events ;
7888 }
7989
8090 /// <inheritdoc />
8191 public async Task < IEnumerable < Event > > GetRangeOfRecentEventsAsync ( int count )
8292 {
93+ using var db = CreateConnection ( ) ;
8394 const string sql = "SELECT * FROM Events ORDER BY Timestamp DESC LIMIT @Count" ;
8495
85- var events = await _db . QueryAsync < Event > ( sql , new { Count = count } ) ;
96+ var events = await db . QueryAsync < Event > ( sql , new { Count = count } ) ;
8697 return events ;
8798 }
8899
@@ -92,18 +103,20 @@ public async Task<IEnumerable<Event>> GetEventsByIdsAsync(IEnumerable<int> ids)
92103 if ( ids == null || ! ids . Any ( ) )
93104 return Enumerable . Empty < Event > ( ) ;
94105
106+ using var db = CreateConnection ( ) ;
95107 const string sql = "SELECT * FROM Events WHERE Id IN @Ids ORDER BY Timestamp DESC" ;
96108
97- var events = await _db . QueryAsync < Event > ( sql , new { Ids = ids } ) ;
109+ var events = await db . QueryAsync < Event > ( sql , new { Ids = ids } ) ;
98110 return events ;
99111 }
100112
101113 /// <inheritdoc />
102114 public async Task < int > RemoveEventAsync ( int id )
103115 {
116+ using var db = CreateConnection ( ) ;
104117 const string sql = "DELETE FROM Events WHERE Id = @Id" ;
105118
106- var rowsAffected = await _db . ExecuteAsync ( sql , new { Id = id } ) ;
119+ var rowsAffected = await db . ExecuteAsync ( sql , new { Id = id } ) ;
107120 return rowsAffected ;
108121 }
109122
@@ -112,11 +125,13 @@ public async Task<int> RemoveEventsByIdsAsync(IEnumerable<int> ids)
112125 {
113126 if ( ids == null || ! ids . Any ( ) )
114127 return 0 ;
115-
128+ using var db = CreateConnection ( ) ;
116129 const string sql = "DELETE FROM Events WHERE Id IN @Ids" ;
117130
118- var rowsAffected = await _db . ExecuteAsync ( sql , new { Ids = ids } ) ;
131+ var rowsAffected = await db . ExecuteAsync ( sql , new { Ids = ids } ) ;
119132 return rowsAffected ;
120133 }
121134 }
122135}
136+
137+
0 commit comments