2025-12-25 11:20:56 +08:00
|
|
|
|
namespace Repository;
|
|
|
|
|
|
|
|
|
|
|
|
public interface IEmailMessageRepository : IBaseRepository<EmailMessage>
|
|
|
|
|
|
{
|
2025-12-26 15:21:31 +08:00
|
|
|
|
Task<EmailMessage?> ExistsAsync(string md5);
|
2026-01-30 10:41:19 +08:00
|
|
|
|
|
2025-12-25 11:20:56 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 分页获取邮件列表(游标分页)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="lastReceivedDate">上一页最后一条记录的接收时间</param>
|
|
|
|
|
|
/// <param name="lastId">上一页最后一条记录的ID</param>
|
|
|
|
|
|
/// <param name="pageSize">每页数量</param>
|
|
|
|
|
|
/// <returns>邮件列表、最后接收时间和最后ID</returns>
|
|
|
|
|
|
Task<(List<EmailMessage> list, DateTime? lastReceivedDate, long lastId)> GetPagedListAsync(DateTime? lastReceivedDate, long? lastId, int pageSize = 20);
|
2026-01-30 10:41:19 +08:00
|
|
|
|
|
2025-12-25 11:20:56 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取总数
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
Task<long> GetTotalCountAsync();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public class EmailMessageRepository(IFreeSql freeSql) : BaseRepository<EmailMessage>(freeSql), IEmailMessageRepository
|
|
|
|
|
|
{
|
2025-12-26 15:21:31 +08:00
|
|
|
|
public async Task<EmailMessage?> ExistsAsync(string md5)
|
2025-12-25 11:20:56 +08:00
|
|
|
|
{
|
|
|
|
|
|
return await FreeSql.Select<EmailMessage>()
|
2025-12-26 15:21:31 +08:00
|
|
|
|
.Where(e => e.Md5 == md5)
|
2025-12-25 11:20:56 +08:00
|
|
|
|
.FirstAsync();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async Task<(List<EmailMessage> list, DateTime? lastReceivedDate, long lastId)> GetPagedListAsync(DateTime? lastReceivedDate, long? lastId, int pageSize = 20)
|
|
|
|
|
|
{
|
|
|
|
|
|
var query = FreeSql.Select<EmailMessage>();
|
2026-01-30 10:41:19 +08:00
|
|
|
|
|
2025-12-25 11:20:56 +08:00
|
|
|
|
// 如果提供了游标,则获取小于游标位置的记录
|
|
|
|
|
|
if (lastReceivedDate.HasValue && lastId.HasValue)
|
|
|
|
|
|
{
|
2026-01-30 10:41:19 +08:00
|
|
|
|
query = query.Where(e => e.ReceivedDate < lastReceivedDate.Value ||
|
2025-12-25 11:20:56 +08:00
|
|
|
|
(e.ReceivedDate == lastReceivedDate.Value && e.Id < lastId.Value));
|
|
|
|
|
|
}
|
2026-01-30 10:41:19 +08:00
|
|
|
|
|
2025-12-25 11:20:56 +08:00
|
|
|
|
var list = await query
|
|
|
|
|
|
.OrderByDescending(e => e.ReceivedDate)
|
|
|
|
|
|
.OrderByDescending(e => e.Id)
|
|
|
|
|
|
.Page(1, pageSize)
|
|
|
|
|
|
.ToListAsync();
|
2026-01-30 10:41:19 +08:00
|
|
|
|
|
2025-12-25 11:20:56 +08:00
|
|
|
|
var lastRecord = list.Count > 0 ? list.Last() : null;
|
|
|
|
|
|
return (list, lastRecord?.ReceivedDate, lastRecord?.Id ?? 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async Task<long> GetTotalCountAsync()
|
|
|
|
|
|
{
|
|
|
|
|
|
return await FreeSql.Select<EmailMessage>().CountAsync();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|