-
Notifications
You must be signed in to change notification settings - Fork 492
Expand file tree
/
Copy pathNewPassesRegistrationPerMonthReportDataRetriever.cs
More file actions
26 lines (22 loc) · 1.53 KB
/
NewPassesRegistrationPerMonthReportDataRetriever.cs
File metadata and controls
26 lines (22 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
namespace EvolutionaryArchitecture.Fitnet.Reports.GenerateNewPassesRegistrationsPerMonthReport.DataRetriever;
using Dapper;
using Dtos;
using DataAccess;
internal sealed class NewPassesRegistrationPerMonthReportDataRetriever(IDatabaseConnectionFactory databaseConnectionFactory, TimeProvider timeProvider) : INewPassesRegistrationPerMonthReportDataRetriever
{
public async Task<IReadOnlyCollection<NewPassesRegistrationsPerMonthDto>> GetReportDataAsync(CancellationToken cancellationToken = default)
{
using var connection = databaseConnectionFactory.Create();
var query = $@"
SELECT EXTRACT(MONTH FROM ""Passes"".""From"")::INTEGER AS ""{nameof(NewPassesRegistrationsPerMonthDto.MonthOrder)}"",
to_char(""Passes"".""From"", 'Month') AS ""{nameof(NewPassesRegistrationsPerMonthDto.MonthName)}"",
COUNT(*) AS ""{nameof(NewPassesRegistrationsPerMonthDto.RegisteredPasses)}""
FROM ""Passes"".""Passes""
WHERE EXTRACT(YEAR FROM ""Passes"".""From"") = '{timeProvider.GetUtcNow().Year}'
GROUP BY ""{nameof(NewPassesRegistrationsPerMonthDto.MonthName)}"", ""{nameof(NewPassesRegistrationsPerMonthDto.MonthOrder)}""
ORDER BY ""{nameof(NewPassesRegistrationsPerMonthDto.MonthOrder)}""";
var queryDefinition = new CommandDefinition(query, cancellationToken: cancellationToken);
var newPassesRegistrationsPerMonthDtos = await connection.QueryAsync<NewPassesRegistrationsPerMonthDto>(queryDefinition);
return [.. newPassesRegistrationsPerMonthDtos];
}
}