Refactor FetchEmailsQuery and improve UID handling

Moved the `Folder` property from `FetchEmailsQuery` to the
`MailQuery` record to better encapsulate query parameters.
Updated `FetchEmailsQueryHandler` to use `MailQuery.Folder`
for improved modularity. Simplified UID limiting logic in
`LimilabsImapEmailService` by replacing `Take().ToList()`
with the more concise `[.. Take()]` syntax.
This commit is contained in:
2026-08-07 12:51:32 +02:00
parent 79db1c3a69
commit 52a416f6d9
2 changed files with 7 additions and 7 deletions

View File

@@ -16,11 +16,6 @@ public record FetchEmailsQuery : IRequest<IEnumerable<ReceivedEmailContext>>
/// </summary> /// </summary>
public required GetSenderQuery Account { get; init; } public required GetSenderQuery Account { get; init; }
/// <summary>
/// Mailbox folder to read from (default: "INBOX").
/// </summary>
public string Folder { get; init; } = "INBOX";
/// <summary> /// <summary>
/// Mail query used to filter and limit the emails retrieved. /// Mail query used to filter and limit the emails retrieved.
/// </summary> /// </summary>
@@ -28,6 +23,11 @@ public record FetchEmailsQuery : IRequest<IEnumerable<ReceivedEmailContext>>
public record MailQuery public record MailQuery
{ {
/// <summary>
/// Mailbox folder to read from (default: "INBOX").
/// </summary>
public string Folder { get; init; } = "INBOX";
/// <summary> /// <summary>
/// When <see langword="true"/> returns only unread messages. /// When <see langword="true"/> returns only unread messages.
/// </summary> /// </summary>
@@ -56,7 +56,7 @@ public class FetchEmailsQueryHandler(
return await ImapService.FetchEmailsAsync( return await ImapService.FetchEmailsAsync(
account, account,
request.Folder, request.Mail.Folder,
request.Mail.UnseenOnly, request.Mail.UnseenOnly,
request.Mail.MaxCount, request.Mail.MaxCount,
cancellationToken); cancellationToken);

View File

@@ -44,7 +44,7 @@ public class LimilabsImapEmailService(
// Most-recent first; honour maxCount // Most-recent first; honour maxCount
uids.Reverse(); uids.Reverse();
if (maxCount > 0 && uids.Count > maxCount) if (maxCount > 0 && uids.Count > maxCount)
uids = uids.Take(maxCount).ToList(); uids = [.. uids.Take(maxCount)];
var results = new List<ReceivedEmailContext>(uids.Count); var results = new List<ReceivedEmailContext>(uids.Count);