25 lines
1.0 KiB
C#
25 lines
1.0 KiB
C#
|
|
namespace SIGCM2.Application.Abstractions.Persistence;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Query-only access to Aviso counts by Rubro.
|
||
|
|
/// CAT-002 introduces the contract. The real Dapper-based impl lands in PRD-002
|
||
|
|
/// (when dbo.Aviso exists). Until then, NullAvisoQueryRepository is the binding.
|
||
|
|
/// </summary>
|
||
|
|
public interface IAvisoQueryRepository
|
||
|
|
{
|
||
|
|
/// <summary>
|
||
|
|
/// Returns the count of avisos (active, non-archived) assigned to the given rubro.
|
||
|
|
/// </summary>
|
||
|
|
Task<int> CountAvisosEnRubroAsync(int rubroId, CancellationToken ct = default);
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Returns a dictionary of { rubroId → count } for the provided ids.
|
||
|
|
/// Used by GetRubroTreeQueryHandler to avoid N+1 when populating TieneAvisos per node.
|
||
|
|
/// The implementation MUST do a single query; the stub returns an empty dictionary
|
||
|
|
/// (every rubro gets 0 via dictionary.GetValueOrDefault).
|
||
|
|
/// </summary>
|
||
|
|
Task<IReadOnlyDictionary<int, int>> CountAvisosBatchAsync(
|
||
|
|
IReadOnlyCollection<int> rubroIds,
|
||
|
|
CancellationToken ct = default);
|
||
|
|
}
|