From 85dd85aa9266171f3ac5c56698487df219c6c70b Mon Sep 17 00:00:00 2001 From: TekH Date: Fri, 2 Oct 2026 09:50:15 +0200 Subject: [PATCH] Refactor architecture and optimize PDF rendering Refactor `EnvelopeSenderPage.razor` to focus on UI composition and state orchestration, avoiding heavy domain logic. Adopt a modular page architecture to improve maintainability by splitting large pages into smaller subcomponents and centralizing shared logic. Conduct a performance review of sender/receiver flows to optimize route transitions, component lifecycle behavior, and loading-state correctness. Audit `Services` for redundant request/payload remapping and eliminate unnecessary transformations. Centralize dependency injection registrations into dedicated extension methods to reduce startup composition sprawl. Refactor `PdfRenderController.cs` and its client service contract to replace JSON/base64 transport for PDF rendering with binary streaming (`application/octet-stream` or multipart). Add a `TODO` comment to highlight the need for further optimization of large PDF handling to reduce payload size and memory pressure. --- AGENTS.md | 1 + .../EnvelopeGenerator.Server/Controllers/PdfRenderController.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 4f9961dc..30c719ce 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -245,6 +245,7 @@ Manual testing workflow: - Perform a senior-level page performance review across sender/receiver flows before further UX changes: verify route transitions, component mount/unmount behavior, loading-state correctness, duplicate API calls, and perceived latency (first meaningful paint and return-navigation responsiveness). Treat loading logic defects as architecture/performance issues first, not styling problems. - Audit `EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/` for unnecessary request/payload remapping and remove redundant mappings where direct request DTO usage is safe; review client HTTP methods end-to-end for similar avoidable transformation layers. - Centralize dependency injection registrations into dedicated extension methods/modules (especially server + client service registrations in `Program.cs`) to reduce startup composition sprawl and improve maintainability. +- Refactor `EnvelopeGenerator.Server/EnvelopeGenerator.Server/Controllers/PdfRenderController.cs` + matching client service contract to remove JSON/base64 `byte[]` transport for PDF rendering; prefer binary streaming (`application/octet-stream` or multipart), avoid `data:` URL bloat where possible, and validate end-to-end memory/latency behavior with large PDFs. ## Database diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Controllers/PdfRenderController.cs b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Controllers/PdfRenderController.cs index 3639c536..0958384a 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Controllers/PdfRenderController.cs +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Controllers/PdfRenderController.cs @@ -11,6 +11,7 @@ namespace EnvelopeGenerator.Server.Controllers; [Route("api/[controller]")] public class PdfRenderController(IPdfPageImageRenderer renderer) : ControllerBase { + // TODO(perf): Replace JSON/base64 transport for PdfBytes with application/octet-stream (or multipart) and stream-based request parsing to reduce payload size and allocation pressure for large PDFs. [HttpPost("pages")] [Authorize(AuthenticationSchemes = AuthScheme.Sender)] public async Task RenderPages([FromBody] PdfRenderRequestDto? request, CancellationToken cancel)