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.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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<IActionResult> RenderPages([FromBody] PdfRenderRequestDto? request, CancellationToken cancel)
|
||||
|
||||
Reference in New Issue
Block a user