35 lines
1.6 KiB
C#
35 lines
1.6 KiB
C#
using ROLAC.API.DTOs.MealAttendance;
|
|
|
|
namespace ROLAC.API.Services;
|
|
|
|
public interface IMealAttendanceService
|
|
{
|
|
/// <summary>Today's date in the server's local time zone (the church's "current Sunday").</summary>
|
|
DateOnly ServiceDay { get; }
|
|
|
|
/// <summary>Returns the counts for <paramref name="date"/>, creating a zeroed row if none exists.</summary>
|
|
Task<AttendanceCountsDto> GetOrCreateAsync(DateOnly date);
|
|
|
|
/// <summary>
|
|
/// Atomically adds <paramref name="delta"/> (may be negative) to one age-group column,
|
|
/// clamped at zero, and returns the resulting authoritative counts.
|
|
/// </summary>
|
|
Task<AttendanceCountsDto> IncrementAsync(DateOnly date, string category, int delta);
|
|
|
|
/// <summary>
|
|
/// Sets one age-group column to an absolute <paramref name="value"/> (clamped at zero),
|
|
/// overwriting the current count, and returns the resulting authoritative counts.
|
|
/// </summary>
|
|
Task<AttendanceCountsDto> SetAsync(DateOnly date, string category, int value);
|
|
|
|
/// <summary>
|
|
/// Overwrites all three age-group columns for <paramref name="date"/> with absolute
|
|
/// values (each clamped at zero), creating the row if it does not exist, and returns
|
|
/// the resulting authoritative counts. Used by the back-office Sunday-attendance editor.
|
|
/// </summary>
|
|
Task<AttendanceCountsDto> SetCountsAsync(DateOnly date, int adult, int youth, int kid);
|
|
|
|
/// <summary>Returns the daily counts within the inclusive date range, ordered by date (for the dashboard).</summary>
|
|
Task<IReadOnlyList<AttendanceCountsDto>> GetRangeAsync(DateOnly from, DateOnly to);
|
|
}
|