Add event-driven state sync with ETag optimization

This commit is contained in:
2026-02-18 19:58:57 +01:00
parent 5b921063ec
commit 3c7f3d2114
17 changed files with 493 additions and 30 deletions

View File

@@ -9,9 +9,34 @@ internal sealed class StateWorkflowService(AppDbContext db)
{
public async Task<ServiceResult<StateSummaryResponse>> GetStateAsync(Player player)
{
var state = await db.AppState.AsNoTracking().SingleAsync();
var state = await db.AppState
.AsNoTracking()
.Select(s => new
{
s.ResultsOpen,
s.UpdatedAt,
Players = db.Players.Count(),
Suggestions = db.Suggestions.Count(),
Votes = db.Votes.Count()
})
.SingleAsync();
var phase = EndpointHelpers.GetCurrentPhase(player.CurrentPhase, state.ResultsOpen);
var summary = new StateSummaryResponse(phase, player.VotesFinal, player.HasJoker, state.ResultsOpen, state.UpdatedAt, await db.Players.CountAsync(), await db.Suggestions.CountAsync(), await db.Votes.CountAsync());
var summary = new StateSummaryResponse(
player.Id,
player.Username,
player.DisplayName,
player.IsAdmin,
player.IsOwner,
phase,
player.VotesFinal,
player.HasJoker,
state.ResultsOpen,
state.UpdatedAt,
state.Players,
state.Suggestions,
state.Votes
);
return ServiceResult<StateSummaryResponse>.Success(summary);
}