Skip to content

Commit 6a7314a

Browse files
committed
db changes + event repo regorganisation
1 parent 16e07fc commit 6a7314a

File tree

3 files changed

+29
-43
lines changed

3 files changed

+29
-43
lines changed

src/RandomAPI/APIServices/Services/DatabaseService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public void Execute(Action<SqliteConnection> action)
2424
/// <summary>
2525
/// Opens a connection, executes a Dapper query, and returns a collection of results.
2626
/// </summary>
27-
/// <typeparam name="T">The type of object to map the result rows to (e.g., Event).</typeparam>
27+
/// <typeparam name="T">The Type of object to map the result rows to (e.g., Event).</typeparam>
2828
/// <param name="sql">The SQL SELECT statement to execute.</param>
2929
/// <param name="param">Optional parameters object for Dapper.</param>
3030
/// <returns>A collection of mapped objects.</returns>
@@ -55,7 +55,7 @@ public async Task<int> ExecuteAsync(string sql, object? param = null)
5555
/// <summary>
5656
/// Opens a connection, executes a command, and returns a single value (e.g., the last inserted ID).
5757
/// </summary>
58-
/// <typeparam name="T">The type of the scalar result (e.g., int).</typeparam>
58+
/// <typeparam name="T">The Type of the scalar result (e.g., int).</typeparam>
5959
/// <param name="sql">The SQL command to execute.</param>
6060
/// <param name="param">Optional parameters object for Dapper.</param>
6161
/// <returns>The single scalar result.</returns>

src/RandomAPI/Repository/DBInitialization.cs

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/RandomAPI/Repository/EventRepository.cs

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)