add attendance
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
using ROLAC.API.Services;
|
||||
|
||||
namespace ROLAC.API.Hubs;
|
||||
|
||||
/// <summary>
|
||||
/// Real-time hub backing the public Sunday attendance counter. Anonymous
|
||||
/// (no [Authorize]) so volunteers can use it without logging in. Every
|
||||
/// increment is broadcast to all connected clients so multiple people can
|
||||
/// count the same Sunday together and see each other's changes instantly.
|
||||
/// </summary>
|
||||
public class AttendanceHub : Hub
|
||||
{
|
||||
private readonly IMealAttendanceService _svc;
|
||||
|
||||
public AttendanceHub(IMealAttendanceService svc) => _svc = svc;
|
||||
|
||||
// Push the current counts to a client the moment it connects.
|
||||
public override async Task OnConnectedAsync()
|
||||
{
|
||||
var counts = await _svc.GetOrCreateAsync(_svc.Today);
|
||||
await Clients.Caller.SendAsync("ReceiveCounts", counts);
|
||||
await base.OnConnectedAsync();
|
||||
}
|
||||
|
||||
// Apply a batched delta for one age group, then broadcast the new totals to everyone.
|
||||
public async Task Increment(string category, int delta)
|
||||
{
|
||||
var counts = await _svc.IncrementAsync(_svc.Today, category, delta);
|
||||
await Clients.All.SendAsync("ReceiveCounts", counts);
|
||||
}
|
||||
|
||||
// Overwrite one age group with an absolute value, then broadcast the new totals to everyone.
|
||||
public async Task SetCount(string category, int value)
|
||||
{
|
||||
var counts = await _svc.SetAsync(_svc.Today, category, value);
|
||||
await Clients.All.SendAsync("ReceiveCounts", counts);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user