SPMS_API/SPMS.Domain/Interfaces/IPushSendLogRepository.cs
SEAN 3a973f56ce feat: 상세 로그 다운로드 API 구현 (#140)
- POST /v1/in/push/log/export (EXP-02, API_SPMS_07_PUSH_09)
- 발송 로그 CSV 파일 다운로드 (페이징 없이 전체 반환)
- 최대 조회 기간 30일, 최대 100,000건 제한
- message_code, device_id, status 필터 지원

Closes #140
2026-02-11 09:43:47 +09:00

49 lines
1.8 KiB
C#

using SPMS.Domain.Entities;
using SPMS.Domain.Enums;
namespace SPMS.Domain.Interfaces;
public interface IPushSendLogRepository : IRepository<PushSendLog>
{
Task<(IReadOnlyList<PushSendLog> 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<List<HourlyStatRaw>> GetHourlyStatsAsync(long serviceId, DateTime startDate, DateTime endDate);
Task<MessageStatRaw?> GetMessageStatsAsync(long serviceId, long messageId, DateTime? startDate, DateTime? endDate);
Task<List<MessageDailyStatRaw>> GetMessageDailyStatsAsync(long serviceId, long messageId, DateTime? startDate, DateTime? endDate);
Task<(IReadOnlyList<PushSendLog> Items, int TotalCount)> GetDetailLogPagedAsync(
long serviceId, long messageId, int page, int size,
PushResult? status = null, Platform? platform = null);
Task<IReadOnlyList<PushSendLog>> GetExportLogsAsync(
long serviceId, DateTime startDate, DateTime endDate,
long? messageId = null, long? deviceId = null,
PushResult? status = 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; }
}