Skip to content

Commit 0f69d14

Browse files
committed
added stats
1 parent f41c7b6 commit 0f69d14

4 files changed

Lines changed: 56 additions & 2 deletions

File tree

Services/StatisticService.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System;
2+
using System.Linq;
3+
using System.Threading.Tasks;
4+
using Lyralabs.TempMailServer.Data.Context;
5+
using Microsoft.EntityFrameworkCore;
6+
7+
namespace Lyralabs.TempMailServer;
8+
9+
public class StatisticService(IDbContextFactory<DatabaseContext> databaseContextFactory)
10+
{
11+
public async Task<(int TotalMails, int TotalMailboxes, int LargestMailbox, int YesterdaysMailCount)> GetStatsAsync()
12+
{
13+
using var context = await databaseContextFactory.CreateDbContextAsync();
14+
15+
var totalMails = await context.Mails.CountAsync();
16+
var totalMailboxes = await context.Mailboxes.CountAsync();
17+
var largestMailbox = await context.Mailboxes
18+
.Select(m => m.Mails.Count)
19+
.MaxAsync();
20+
21+
var yesterdaysMailCount = await context.Mails
22+
.Where(m => m.ReceivedDate.Date == DateTime.UtcNow.AddDays(-1).Date)
23+
.CountAsync();
24+
25+
return (totalMails, totalMailboxes, largestMailbox, yesterdaysMailCount);
26+
}
27+
}

Web/Pages/Index.razor

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1-
@page "/"
1+
@page "/"
22

3-
<TitleControl Title="Home" />
3+
<TitleControl Title="Stats" />
4+
5+
<div>
6+
<div>Total Mailboxes: <strong>@this.TotalMailboxes</strong></div>
7+
<div>Total Messages: <strong>@this.TotalMails</strong></div>
8+
<div>Largest Mailbox contains <strong>@this.LargestMailbox</strong> Mails</div>
9+
<div>Mails received Yesterday: <strong>@this.YesterdaysMailCount</strong></div>
10+
</div>

Web/Pages/Index.razor.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
namespace Lyralabs.TempMailServer.Web.Pages;
2+
3+
partial class Index
4+
{
5+
[Inject]
6+
public required StatisticService StatisticService { get; set; }
7+
8+
private int LargestMailbox { get; set; }
9+
private int TotalMailboxes { get; set; }
10+
private int TotalMails { get; set; }
11+
private int YesterdaysMailCount { get; set; }
12+
13+
protected override async Task OnInitializedAsync()
14+
{
15+
await base.OnInitializedAsync();
16+
17+
(this.TotalMails, this.TotalMailboxes, this.LargestMailbox, this.YesterdaysMailCount) = await this.StatisticService.GetStatsAsync();
18+
}
19+
}

Web/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ private static void Main(string[] args)
6262
builder.Services.AddTransient<MailRepository>();
6363
builder.Services.AddTransient<TempMessageStore>();
6464
builder.Services.AddTransient<MailboxFilter>();
65+
builder.Services.AddTransient<StatisticService>();
6566

6667
builder.Services.AddDbContextFactory<DatabaseContext>(
6768
options => options.UseSqlite(builder.Configuration.GetConnectionString(nameof(DatabaseContext)))

0 commit comments

Comments
 (0)