From 176e6dd6c5ece04203ee29f0df31b365d210cbc9 Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 12 Aug 2026 14:17:24 +0200 Subject: [PATCH] Refactor: Replace EmailAttachmentContext with DTO Replaced `EmailAttachmentContext` with `EmailAttachmentDto` across the codebase to align with the updated DTO naming convention. - Renamed `EmailAttachmentContext` to `EmailAttachmentDto`. - Updated property types, method signatures, and return types to use `EmailAttachmentDto`. - Modified XML documentation references to reflect the new class name. - Updated `ReceivedEmailContext` to `ReceivedEmailDto` and adjusted related methods and properties. - Refactored `FetchEmailsAsync` methods and handlers to use `ReceivedEmailDto`. - Adjusted `BuildAttachmentsAsync` and attachment handling logic in `EmailController` and `LimilabsImapEmailService`. This refactor ensures consistency and improves code clarity while maintaining functionality. --- ...ailAttachmentContext.cs => EmailAttachmentDto.cs} | 2 +- .../EmailContext.cs | 6 +++--- .../{ReceivedEmailContext.cs => ReceivedEmailDto.cs} | 6 +++--- .../Common/Interfaces/IImapEmailService.cs | 2 +- .../EmailReceiving/Queries/FetchEmailsQuery.cs | 6 +++--- .../EmailSending/Commands/PublishEmailCommand.cs | 4 ++-- .../Services/LimilabsEmailService.cs | 2 +- .../Services/LimilabsImapEmailService.cs | 12 ++++++------ .../Controllers/EmailController.cs | 6 +++--- 9 files changed, 23 insertions(+), 23 deletions(-) rename src/core/DigitalData.MessagingService.Abstraction/{EmailAttachmentContext.cs => EmailAttachmentDto.cs} (97%) rename src/core/DigitalData.MessagingService.Abstraction/{ReceivedEmailContext.cs => ReceivedEmailDto.cs} (91%) diff --git a/src/core/DigitalData.MessagingService.Abstraction/EmailAttachmentContext.cs b/src/core/DigitalData.MessagingService.Abstraction/EmailAttachmentDto.cs similarity index 97% rename from src/core/DigitalData.MessagingService.Abstraction/EmailAttachmentContext.cs rename to src/core/DigitalData.MessagingService.Abstraction/EmailAttachmentDto.cs index 720d87d..3b0f3b2 100644 --- a/src/core/DigitalData.MessagingService.Abstraction/EmailAttachmentContext.cs +++ b/src/core/DigitalData.MessagingService.Abstraction/EmailAttachmentDto.cs @@ -3,7 +3,7 @@ namespace DigitalData.MessagingService.Abstraction; /// /// Represents a single email attachment. /// -public sealed class EmailAttachmentContext +public sealed class EmailAttachmentDto { /// /// Display name of the attachment (e.g. "invoice.pdf"). diff --git a/src/core/DigitalData.MessagingService.Abstraction/EmailContext.cs b/src/core/DigitalData.MessagingService.Abstraction/EmailContext.cs index 919e444..5ad2c00 100644 --- a/src/core/DigitalData.MessagingService.Abstraction/EmailContext.cs +++ b/src/core/DigitalData.MessagingService.Abstraction/EmailContext.cs @@ -48,8 +48,8 @@ public record EmailContext /// /// Optional list of attachments to include with the email. - /// Each entry may carry its content as a byte array () - /// or reference a file on disk via . + /// Each entry may carry its content as a byte array () + /// or reference a file on disk via . /// - public IEnumerable Attachments { get; set; } = []; + public IEnumerable Attachments { get; set; } = []; } \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Abstraction/ReceivedEmailContext.cs b/src/core/DigitalData.MessagingService.Abstraction/ReceivedEmailDto.cs similarity index 91% rename from src/core/DigitalData.MessagingService.Abstraction/ReceivedEmailContext.cs rename to src/core/DigitalData.MessagingService.Abstraction/ReceivedEmailDto.cs index 83be50f..8a4fe62 100644 --- a/src/core/DigitalData.MessagingService.Abstraction/ReceivedEmailContext.cs +++ b/src/core/DigitalData.MessagingService.Abstraction/ReceivedEmailDto.cs @@ -3,7 +3,7 @@ namespace DigitalData.MessagingService.Abstraction; /// /// Represents an email message received via IMAP. /// -public sealed record ReceivedEmailContext +public sealed record ReceivedEmailDto { /// /// Unique identifier of the message on the IMAP server (UID). @@ -81,9 +81,9 @@ public sealed record ReceivedEmailContext /// Attachments included with this message. /// #if NET - public IEnumerable Attachments { get; init; } = []; + public IEnumerable Attachments { get; init; } = []; #else - public IEnumerable Attachments { get; set; } = []; + public IEnumerable Attachments { get; set; } = []; #endif /// diff --git a/src/core/DigitalData.MessagingService.Application/Common/Interfaces/IImapEmailService.cs b/src/core/DigitalData.MessagingService.Application/Common/Interfaces/IImapEmailService.cs index 445127b..e11851d 100644 --- a/src/core/DigitalData.MessagingService.Application/Common/Interfaces/IImapEmailService.cs +++ b/src/core/DigitalData.MessagingService.Application/Common/Interfaces/IImapEmailService.cs @@ -17,7 +17,7 @@ public interface IImapEmailService /// Set to for a non-destructive read (uses BODY.PEEK internally). /// /// Cancellation token. - Task> FetchEmailsAsync( + Task> FetchEmailsAsync( EmailAccountDto account, MailSearchFilter filter, CancellationToken cancellationToken = default); diff --git a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Queries/FetchEmailsQuery.cs b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Queries/FetchEmailsQuery.cs index 9b1a6bb..7a5d610 100644 --- a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Queries/FetchEmailsQuery.cs +++ b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Queries/FetchEmailsQuery.cs @@ -10,7 +10,7 @@ namespace DigitalData.MessagingService.Application.EmailReceiving.Queries; /// /// Query to fetch emails from an IMAP mailbox. /// -public record FetchEmailsQuery : IRequest> +public record FetchEmailsQuery : IRequest> { /// /// Identifies the email account to use. @@ -25,9 +25,9 @@ public record FetchEmailsQuery : IRequest> public class FetchEmailsQueryHandler( ISender Sender, - IImapEmailService ImapService) : IRequestHandler> + IImapEmailService ImapService) : IRequestHandler> { - public async Task> Handle(FetchEmailsQuery request, CancellationToken cancellationToken) + public async Task> Handle(FetchEmailsQuery request, CancellationToken cancellationToken) { var account = await Sender.Send(request.Account, cancellationToken) ?? throw new NotFoundException( diff --git a/src/core/DigitalData.MessagingService.Application/EmailSending/Commands/PublishEmailCommand.cs b/src/core/DigitalData.MessagingService.Application/EmailSending/Commands/PublishEmailCommand.cs index 6edb84b..016e7f2 100644 --- a/src/core/DigitalData.MessagingService.Application/EmailSending/Commands/PublishEmailCommand.cs +++ b/src/core/DigitalData.MessagingService.Application/EmailSending/Commands/PublishEmailCommand.cs @@ -35,13 +35,13 @@ public record PublishEmailCommand : IRequest public bool IsHtml { get; init; } = true; [JsonIgnore] - internal IEnumerable Attachments { get; private init; } = []; + internal IEnumerable Attachments { get; private init; } = []; /// /// Returns a new command instance with the supplied attachments. /// Called by the controller after resolving uploaded files. /// - public PublishEmailCommand WithAttachments(IEnumerable attachments) + public PublishEmailCommand WithAttachments(IEnumerable attachments) => this with { Attachments = attachments }; } diff --git a/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/LimilabsEmailService.cs b/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/LimilabsEmailService.cs index 7616fbc..6f865ee 100644 --- a/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/LimilabsEmailService.cs +++ b/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/LimilabsEmailService.cs @@ -111,7 +111,7 @@ public class LimilabsEmailService( return message.ToString(); } - private static void AddAttachments(MailBuilder builder, IEnumerable attachments) + private static void AddAttachments(MailBuilder builder, IEnumerable attachments) { foreach (var attachment in attachments) { diff --git a/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/LimilabsImapEmailService.cs b/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/LimilabsImapEmailService.cs index 9aba1e5..69b6b2e 100644 --- a/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/LimilabsImapEmailService.cs +++ b/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/LimilabsImapEmailService.cs @@ -28,7 +28,7 @@ public class LimilabsImapEmailService( } // Public API - public async Task> FetchEmailsAsync( + public async Task> FetchEmailsAsync( EmailAccountDto account, MailSearchFilter filter, CancellationToken cancellationToken = default) @@ -60,7 +60,7 @@ public class LimilabsImapEmailService( if (uids.Count == 0) return []; - var results = new List(uids.Count); + var results = new List(uids.Count); foreach (var uid in uids) { @@ -77,11 +77,11 @@ public class LimilabsImapEmailService( var mail = new MailBuilder().CreateFromEml(eml); var flags = await imap.GetFlagsByUIDAsync(uid, cancellationToken); - var attachments = new List(); + var attachments = new List(); foreach (var att in mail.Attachments) { - attachments.Add(new EmailAttachmentContext + attachments.Add(new EmailAttachmentDto { FileName = att.FileName ?? "attachment", Content = att.Data, @@ -93,7 +93,7 @@ public class LimilabsImapEmailService( foreach (var vis in mail.Visuals) { - attachments.Add(new EmailAttachmentContext + attachments.Add(new EmailAttachmentDto { FileName = vis.FileName ?? "inline", Content = vis.Data, @@ -103,7 +103,7 @@ public class LimilabsImapEmailService( }); } - return new ReceivedEmailContext + return new ReceivedEmailDto { Uid = uid, From = mail.From.FirstOrDefault()?.Address ?? string.Empty, diff --git a/src/presentation/DigitalData.MessagingService.API/Controllers/EmailController.cs b/src/presentation/DigitalData.MessagingService.API/Controllers/EmailController.cs index 97913db..cfdcfd2 100644 --- a/src/presentation/DigitalData.MessagingService.API/Controllers/EmailController.cs +++ b/src/presentation/DigitalData.MessagingService.API/Controllers/EmailController.cs @@ -56,21 +56,21 @@ public class EmailController(IMediator mediator) : ControllerBase return Accepted(new { Id = eventId }); } - private static async Task> BuildAttachmentsAsync( + private static async Task> BuildAttachmentsAsync( IFormFileCollection? files, CancellationToken cancellationToken) { if (files is null || files.Count == 0) return []; - var result = new List(files.Count); + var result = new List(files.Count); foreach (var file in files) { using var ms = new MemoryStream(); await file.CopyToAsync(ms, cancellationToken); - result.Add(new EmailAttachmentContext + result.Add(new EmailAttachmentDto { FileName = file.FileName, Content = ms.ToArray(),