f294255f10
- Add IEventRepository/IResultRepository.GetManyAsync to kill N+1 lookups at 6 sites (backtest, outcome eval, both bet-journal paths, anomaly browsing, results selection); guarded by a Received(1).GetManyAsync test. - Add EventRepository.QueryAsync to push date+sport filtering to SQL (was load-whole-range-then-filter); search/sort stay in-memory for Cyrillic order. - Add AnomalyRepository.CountSinceAsync (unread badge) + ListByDateRangeAsync (feed date filter); add Event/Snapshot count methods for the dashboard. - Add composite indexes IX_Snapshots_EventCode_CapturedAt and _EventCode_Source_CapturedAt via a new migration + model snapshot. - Introduce SqliteDateText as the single source of the O-format date encoding shared by Mapping (read/write) and the repositories' range predicates. - Fix LiveOddsPoller cadence drift (budget sleep against cycle time); make DetectAnomalies dedup O(1) per event; add Event.Title to dedup the title join. Tests adapted to the batched GetManyAsync via a TestFixtures bridge.
27 lines
1.0 KiB
C#
27 lines
1.0 KiB
C#
using Marathon.Domain.Entities;
|
|
|
|
namespace Marathon.Application.Abstractions;
|
|
|
|
/// <summary>
|
|
/// Repository for <see cref="Anomaly"/> domain entities.
|
|
/// </summary>
|
|
public interface IAnomalyRepository : IRepository<Guid, Anomaly>
|
|
{
|
|
/// <summary>
|
|
/// Server-side count of anomalies detected strictly after <paramref name="since"/>.
|
|
/// Backs the unread badge without materialising the table.
|
|
/// </summary>
|
|
Task<int> CountSinceAsync(DateTimeOffset since, CancellationToken ct = default);
|
|
|
|
/// <summary>
|
|
/// Anomalies whose <see cref="Anomaly.DetectedAt"/> falls in the inclusive
|
|
/// [<paramref name="from"/>..<paramref name="to"/>] window (either bound may be
|
|
/// null for open-ended), ordered newest-first. Pushes the temporal filter to SQL;
|
|
/// severity / sport filtering remains a service concern (needs the event join).
|
|
/// </summary>
|
|
Task<IReadOnlyList<Anomaly>> ListByDateRangeAsync(
|
|
DateTimeOffset? from,
|
|
DateTimeOffset? to,
|
|
CancellationToken ct = default);
|
|
}
|