using Microsoft.EntityFrameworkCore; using SPMS.Domain.Entities; using SPMS.Domain.Enums; using SPMS.Domain.Interfaces; namespace SPMS.Infrastructure.Persistence.Repositories; public class PushSendLogRepository : Repository, IPushSendLogRepository { public PushSendLogRepository(AppDbContext context) : base(context) { } public async 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) { var query = _dbSet .Include(l => l.Message) .Where(l => l.ServiceId == serviceId); if (messageId.HasValue) query = query.Where(l => l.MessageId == messageId.Value); if (deviceId.HasValue) query = query.Where(l => l.DeviceId == deviceId.Value); if (status.HasValue) query = query.Where(l => l.Status == status.Value); if (startDate.HasValue) query = query.Where(l => l.SentAt >= startDate.Value); if (endDate.HasValue) query = query.Where(l => l.SentAt < endDate.Value.AddDays(1)); var totalCount = await query.CountAsync(); var items = await query .OrderByDescending(l => l.SentAt) .Skip((page - 1) * size) .Take(size) .ToListAsync(); return (items, totalCount); } }