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)