using SPMS.Domain.Entities; using SPMS.Domain.Enums; namespace SPMS.Domain.Interfaces; public interface IPushSendLogRepository : IRepository { Task<(IReadOnlyList Items, int TotalCount)> GetPagedWithMessageAsync( long serviceId, int page, int size, long? messageId = null, long? deviceId = null, PushResult? status = null, DateTime? startDate = null, DateTime? endDate = null); Task> GetHourlyStatsAsync(long? serviceId, DateTime startDate, DateTime endDate); Task GetMessageStatsAsync(long serviceId, long messageId, DateTime? startDate, DateTime? endDate); Task> GetMessageDailyStatsAsync(long serviceId, long messageId, DateTime? startDate, DateTime? endDate); Task<(IReadOnlyList Items, int TotalCount)> GetDetailLogPagedAsync( long serviceId, long messageId, int page, int size, PushResult? status = null, Platform? platform = null); Task> GetExportLogsAsync( long serviceId, DateTime startDate, DateTime endDate, long? messageId = null, long? deviceId = null, PushResult? status = null, int maxCount = 100000); Task> GetFailureStatsAsync(long? serviceId, DateTime startDate, DateTime endDate, int limit); Task> GetFailureStatsByMessageAsync(long serviceId, long messageId, int limit); Task<(IReadOnlyList Items, int TotalCount)> GetMessageHistoryPagedAsync( long? serviceId, int page, int size, string? keyword = null, string? status = null, DateTime? startDate = null, DateTime? endDate = null); Task> GetMessageHistoryAllAsync( long? serviceId, string? keyword = null, string? status = null, DateTime? startDate = null, DateTime? endDate = null, int maxCount = 100000); } public class HourlyStatRaw { public int Hour { get; set; } public int SendCount { get; set; } public int SuccessCount { get; set; } public int FailCount { get; set; } } public class MessageStatRaw { public int TotalSend { get; set; } public int TotalSuccess { get; set; } public int TotalFail { get; set; } public DateTime? FirstSentAt { get; set; } public DateTime? LastSentAt { get; set; } } public class MessageDailyStatRaw { public DateOnly StatDate { get; set; } public int SendCount { get; set; } public int SuccessCount { get; set; } } public class FailureStatRaw { public string FailReason { get; set; } = string.Empty; public int Count { get; set; } } public class MessageHistorySummary { public long MessageId { get; set; } public string MessageCode { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; public string ServiceName { get; set; } = string.Empty; public DateTime FirstSentAt { get; set; } public int TotalSendCount { get; set; } public int SuccessCount { get; set; } public int FailCount { get; set; } }