Skip to content

Commit 22274e6

Browse files
committed
Implement sql server data provider.
1 parent f3b9fd0 commit 22274e6

File tree

5 files changed

+39
-4
lines changed

5 files changed

+39
-4
lines changed

src/Serilog.Ui.Core/Models/LogModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ namespace Serilog.Ui.Core
44
{
55
public class LogModel
66
{
7+
public int Id { get; set; }
8+
79
public string Level { get; set; }
810

911
public string Message { get; set; }

src/Serilog.Ui.Core/OptionsBuilder/RelationalDbOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ public class RelationalDbOptions
66

77
public string TableName { get; set; }
88

9-
public string Schema { get; set; }
9+
public string Schema { get; set; } = "dbo";
1010
}
1111
}

src/Serilog.Ui.MsSqlServerProvider/Extensions/DataProviderOptionsBuilderExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public static void UseSqlServer(
2727
};
2828

2929
((IDataProviderOptionsBuilder)optionsBuilder).Services.AddSingleton(relationProvider);
30+
((IDataProviderOptionsBuilder)optionsBuilder).Services.AddScoped<IDataProvider, SqlServerDataProvider>();
3031
}
3132
}
3233
}

src/Serilog.Ui.MsSqlServerProvider/Serilog.Ui.MsSqlServerProvider.csproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,9 @@
1212
<Folder Include="Extensions\" />
1313
</ItemGroup>
1414

15+
<ItemGroup>
16+
<PackageReference Include="Dapper" Version="2.0.30" />
17+
<PackageReference Include="System.Data.SqlClient" Version="4.8.1" />
18+
</ItemGroup>
19+
1520
</Project>

src/Serilog.Ui.MsSqlServerProvider/SqlServerDataProvider.cs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
using Serilog.Ui.Core;
1+
using Dapper;
2+
using Serilog.Ui.Core;
23
using System.Collections.Generic;
4+
using System.Data;
5+
using System.Data.SqlClient;
36
using System.Threading.Tasks;
47

58
namespace Serilog.Ui.MsSqlServerProvider
@@ -13,9 +16,33 @@ public SqlServerDataProvider(RelationalDbOptions options)
1316
_options = options;
1417
}
1518

16-
public Task<(IEnumerable<LogModel>, int)> FetchDataAsync(int page, int count)
19+
public async Task<(IEnumerable<LogModel>, int)> FetchDataAsync(int page, int count)
1720
{
18-
throw new System.NotImplementedException();
21+
using (IDbConnection connection = new SqlConnection(_options.ConnectionString))
22+
{
23+
var logsTask = GetLogsAsync(connection, page - 1, count);
24+
var logCountTask = CountLogsAsync(connection);
25+
26+
await Task.WhenAll(logsTask, logCountTask);
27+
28+
return (await logsTask, await logCountTask);
29+
}
30+
}
31+
32+
private Task<IEnumerable<LogModel>> GetLogsAsync(IDbConnection connection, int page, int count)
33+
{
34+
var query =
35+
$"SELECT [Id], [Message],[Level], [TimeStamp], [Exception], [Properties] FROM [{_options.Schema}].[{_options.TableName}] " +
36+
"ORDER BY Id DESC OFFSET @Offset ROWS FETCH NEXT @Count ROWS ONLY";
37+
38+
return connection.QueryAsync<LogModel>(query, new { page, count });
39+
}
40+
41+
public async Task<int> CountLogsAsync(IDbConnection connection)
42+
{
43+
var query = $"SELECT COUNT(Id) FROM [{_options.Schema}].[{_options.TableName}]";
44+
45+
return await connection.ExecuteScalarAsync<int>(query);
1946
}
2047
}
2148
}

0 commit comments

Comments
 (0)