Updated PHASENPLAN.md and ROADMAP.md to reflect the new
feature order, making "ExtractSwissQrCode" Feature 2 and
renumbering previous Features 2-5 to 3-6. Added detailed
steps, endpoints, and acceptance criteria for the new
feature.
Implemented `ISwissQrCodeProcessor` interface with
`DevExpressSwissQrCodeProcessor` for extracting and parsing
Swiss QR Codes using DevExpress and Codecrete libraries.
Registered the new service in DependencyInjection.cs.
Introduced `SwissQrCodeData` value object and
`SwissQrCodeNotFoundException` for domain modeling and
error handling. Updated project dependencies to include
libraries for QR code processing.
Adjusted existing feature descriptions and steps to align
with the new feature order.
Refactored `DevExpressPdfProcessor` to improve attachment detection:
- Changed `DetectEmbeddedFiles` return type to a tuple for better
handling of attachment presence and count.
- Enhanced logic to parse `/Names` arrays and count object references
for accurate attachment detection.
- Implemented robust search for `/EmbeddedFiles` to handle multiple
occurrences and ensure proper context validation.
Updated PHASENPLAN.md and ROADMAP.md to reflect these changes, including
the addition of fixes for attachment detection and counting logic.
Added new tests in `DevExpressPdfProcessorTests`:
- Verified detection of multiple attachments and accurate counts.
- Ensured no crashes when processing PDFs with `/EmbeddedFiles`.
Included a new test resource (`pdfWithMoreThanOneAttachment.pdf`) for
validating multiple attachment scenarios.
Updated PHASENPLAN.md and ROADMAP.md to reflect a complete restructuring of the development plan and added a "Bugfix: Attachment Detection" entry.
Implemented attachment detection in DevExpressPdfProcessor.cs using the new `DetectEmbeddedFiles` method, which scans raw PDF data for the `/EmbeddedFiles` keyword. Updated the `hasAttachments` property to use this method and set `attachmentCount` to `-1` when attachments are detected.
Added a new test, `ValidateAsync_PdfWithoutAttachments_ReturnsNoAttachments`, in DevExpressPdfProcessorTests.cs to verify that PDFs without attachments are correctly identified. Included a note about future testing for PDFs with attachments using ZUGFeRD files.
All related tests are passing (12/12 green).
Implemented the ValidatePDF feature end-to-end:
- Added `/api/v1/documents/validate` Minimal API endpoint.
- Introduced centralized ExceptionHandlingMiddleware.
- Configured Swagger with `AddSwaggerDocumentation` extension.
- Enabled XML comments in `DocumentOperator.API.csproj`.
- Updated DTOs with XML comments and added `FileSizeMB`.
- Added integration tests for the ValidatePDF endpoint (3 tests).
- Registered infrastructure services (e.g., `IPdfProcessor`).
- Refactored `Program.cs` to include middleware and endpoints.
- Updated PHASENPLAN.md and ROADMAP.md to reflect progress.
- Cleaned up code and made `Program` accessible for tests.
Updated PHASENPLAN and ROADMAP to reflect progress on Feature 1 - ValidatePDF (75% complete). Marked Step 1.1 as completed, including MediatR setup, pipeline behaviors (`ValidationBehavior`, `LoggingBehavior`), ValidatePDF feature (Query, Handler, Validator), and DTOs.
Added `DependencyInjection.cs` for Application Layer DI configuration. Introduced `LoggingBehavior` and `ValidationBehavior` for MediatR pipelines. Implemented `ValidatePdfHandler`, `ValidatePdfQuery`, and `ValidatePdfValidator`.
Created DTOs (`ValidatePdfRequest`, `ValidatePdfResponse`) for the ValidatePDF feature. Added unit tests for `ValidatePdfHandler` to verify metadata handling and exception propagation.
Removed unused folder references in `DocumentOperator.Application.csproj`.
Updated PROJECT_STATUS.md, ROADMAP.md, and PHASENPLAN.md to adopt a feature-driven development approach. Replaced the layer-by-layer methodology with a focus on delivering complete, testable features.
Key changes:
- PROJECT_STATUS.md: Added detailed status updates, milestones, and removed Azure dependencies in favor of local solutions (e.g., temp folders, in-memory queues).
- ROADMAP.md: Restructured tasks by feature (e.g., ValidatePDF, ExtractAttachments) with detailed steps and acceptance criteria. Introduced cross-cutting concerns like multi-tenancy and resilience.
- PHASENPLAN.md: Introduced a week-by-week breakdown, progress tracking, and next steps for each feature.
These changes improve clarity, align tasks with deliverables, and provide a clear roadmap for project completion.
Updated `PROJECT_STATUS.md` to reflect the current progress, including updates to the project status, phase overview, and milestones. Added a new section summarizing completed milestones (Phases 1-2.5) and detailed progress for Phase 3.
Created `STATUS_UPDATE_17_01_2025.md` to document the latest project status, including the availability of the DevExpress Universal License, completed phases, and a step-by-step plan for the next sprint. Highlighted action items such as cleaning up the Application Layer and implementing the `DevExpressPdfProcessor` using TDD.
These changes ensure alignment between the roadmap and the actual project status while providing clear next steps for stakeholders.
Updated the ROADMAP.md file to reflect the completion of Phase 3 (Infrastructure Layer) and the transition to Phase 4 (Application Layer).
Marked Step 3.2 (DevExpressPdfProcessor implementation) as completed, including sub-steps such as creating tests, implementing the processor, and preparing for execution.
Added a new Phase 4 section detailing next steps, including MediatR setup. Removed references to incomplete Phase 3 steps, as they are now finished.
Highlighted a major update noting production-ready features and added architectural notes for multi-tenancy, async processing, file storage, and resilience using Polly.
Updated project documentation to reflect the completion of the `DevExpressPdfProcessor` implementation in Phase 3. Adjusted progress in `PROJECT_STATUS.md` to 75% and updated the overall progress to ~28%.
Documented the successful execution of all six tests for `DevExpressPdfProcessor` and added implementation details, including the use of `PdfDocumentProcessor` from `DevExpress.Document.Processor` (v26.1.3), exception handling, and metadata extraction. Deferred attachment handling to Phase 6 due to API limitations.
Updated the "Last Updated" date in `PROJECT_STATUS.md` and `ROADMAP.md` to **17.01.2025** and adjusted the estimated time effort for the implementation to ~2 days.
Replaced Azure Blob Storage and Storage Queue with local
temp folders and an in-memory queue for file storage and
async processing. Updated `IFileStorage` and `IJobQueue`
interfaces to support the new architecture.
Modified `TenantSettings` and `ApplyStampHandler` to use
local file paths. Updated `JobProcessorService` to handle
in-memory queue jobs. Added file cleanup policies to
`LocalFileStorage`.
Revised roadmap and documentation to reflect the shift
to local-first architecture, emphasizing simplicity,
reduced cloud dependencies, and single-server readiness.
Logging now uses file-based storage instead of Application
Insights. Adjusted production deployment and health check
phases to align with the new approach.
The roadmap has been updated to reflect a shift towards a
scalable, resilient, and production-ready architecture. Key
changes include:
- Multi-tenancy with EF Core, SQLite, and Redis Cache.
- Async processing using Azure Storage Queue and workers.
- File storage abstraction with Azure Blob and local storage.
- Resilience with Polly (retry, circuit breaker, timeout).
- Early health checks for Kubernetes readiness/liveness.
- Enhanced logging with Correlation IDs, Seq, and App Insights.
- Expanded roadmap to 11 phases with new production features.
- Added Swagger updates for API-Key auth and response examples.
- Introduced EF Core tenant management with CRUD operations.
- Added background services for async jobs and temp cleanup.
- Updated testing strategy for resilience and async processing.
- Documented 11 key learnings and updated best practices.
Updated ROADMAP.md to reflect progress on the TDD process for
DevExpressPdfProcessor, including the creation of unit tests
(6 tests in the Red Phase). Updated progress to 4/7 mini-steps
completed and outlined the next step (Green Phase).
Added `DevExpressPdfProcessorTests.cs` with unit tests to
validate PDF files and extract metadata. Tests cover valid
PDFs, null/empty inputs, corrupted PDFs, and file size
calculations. Used `FluentAssertions` for assertions.
Cleaned up `DocumentOperator.Tests.csproj` by removing an
unused folder reference. No functional changes to the project
structure.
Updated ROADMAP.md to reflect progress on Phase 3, Step 3.2:
- Created test folder structure under Unit/Infrastructure/Services/PdfProcessing.
- Updated progress status to 2/7 mini-steps completed.
- Documented next step (adding a test PDF file) and marked DevExpressPdfProcessor.cs implementation as "IN PROGRESS."
- Highlighted availability of the DevExpress Universal License.
Modified DocumentOperator.Tests.csproj:
- Added the new test folder structure to the project file.
Removed the obsolete `ProcessDocument` folder and its files
(`ProcessDocumentCommand.cs`, `ProcessDocumentHandler.cs`,
`ProcessDocumentValidator.cs`) as part of Application Layer
cleanup. Updated `ROADMAP.md` to reflect progress, including
the start of `DevExpressPdfProcessor` implementation (Step 3.2)
and actionable steps for creating a test folder structure.
Documented the availability of the `DevExpress Universal License`.
Extensively updated `ROADMAP.md` to reflect the current
project status, including documentation of the DevExpress
Universal License, completion of Phases 1 and 2, and
progress in Phase 3. Clarified discrepancies in the
Application Layer and identified gaps in the Tests Layer
and Infrastructure Services.
Created `STATUS_UPDATE_17_01_2025.md` to summarize the
current status, key learnings, and next steps. Outlined
a TDD-driven approach for implementing the
`DevExpressPdfProcessor` and cleaning up the Application
Layer. Confirmed build success and updated documentation
to align with the latest roadmap.
The `IPdfProcessor` interface was added to the `Application/Common/Interfaces/` directory. It includes the `ValidateAsync` method for validating PDFs and extracting metadata, with proper XML documentation and dependency on domain value objects.
Updated `ROADMAP.md` to mark Step 3.1 as completed, detailing the creation of the `IPdfProcessor` interface and its implementation status.
Removed the `<Folder Include="Common\Interfaces\" />` entry from `DocumentOperator.Application.csproj` to reflect the transition from a placeholder folder structure to actual implementation.
Updated ROADMAP.md to mark Phase 2 as completed and added detailed descriptions of completed tasks. Introduced three new value objects (`Base64String`, `TenantId`, and `PdfMetadata`) in the `DocumentOperator.Domain.Models.ValueObjects` namespace. These classes ensure type safety, immutability, and encapsulated validation.
- `Base64String`: Handles Base64 string creation, validation, and conversion.
- `TenantId`: Represents a tenant identifier with validation and normalization.
- `PdfMetadata`: Represents PDF metadata with computed properties.
Updated `DocumentOperator.Domain.csproj` to reflect the addition of these value objects. The project is now ready to begin Phase 3 (Infrastructure Layer).
Updated ROADMAP.md to mark Step 2.2 ("Enums erstellen") as completed, documenting the creation of `DocumentOperationType` and `ProcessingStatus` enums.
Added `DocumentOperationType` and `ProcessingStatus` enums under the `DocumentOperator.Domain.Models.Enums` namespace to represent document operations and processing statuses, respectively.
Modified `DocumentOperator.Domain.csproj` to remove the `Models\Enums\` folder from the `<ItemGroup>` section, reflecting changes in the inclusion strategy for enums.
The roadmap document was restructured to reflect a pragmatic, iterative, and test-driven development (TDD) approach. Key updates include:
- Title updated to "Pragmatic Edition" with revised last updated date.
- Table of contents reorganized with new sections (e.g., "Development Philosophy," "Testing Strategy").
- Expanded "Core Features" and "Business Workflow" sections with additional details and updated flow diagrams.
- Revised "Architecture & Design Decisions" to emphasize minimal domain layers, dependency rules, and vertical slice architecture.
- Updated "CQRS with MediatR" and "Minimal APIs" sections with examples and best practices.
- Added "Development Philosophy," "Testing Strategy," and "Key Learnings & Decisions" sections.
- Updated "Technology Stack" to include testing libraries and remove unused dependencies.
- Reflected new folder structure, including a `Tests` project for unit and integration tests.
- Rewrote "Development Roadmap" with detailed steps for each phase, focusing on TDD and outside-in development.
- Updated "References & Best Practices" and "Update Log" to align with the new approach.
These changes aim to improve clarity, maintainability, and alignment with modern .NET practices.
- Added "Last Updated" timestamp, current status, and phase.
- Introduced a "TABLE OF CONTENTS" for easier navigation.
- Expanded "PROJECT OVERVIEW" with vision, purpose, and workflow.
- Detailed "ARCHITECTURE & DESIGN DECISIONS" with key patterns.
- Listed frameworks, libraries, and components in "TECH STACK."
- Provided a breakdown of the solution's folder structure.
- Outlined development phases in "DEVELOPMENT ROADMAP."
- Documented progress in "CURRENT STATUS" and added "UPDATE LOG."
- Included "LEARNING NOTES" and references to best practices.
- Improved formatting for clarity and readability.
Enhanced logging with Serilog, including request logging and
structured exception handling during startup. Added support
for the Options Pattern with new configuration classes:
`DocumentOperatorSettings`, `RedisSettings`, and
`ApiKeySettings`. Introduced `TenantInfo` class for tenant
management. Updated project files to include new dependencies
and removed unused `Configuration` folder reference.
Replaced the `Logging` configuration in both `appsettings.json`
and `appsettings.Development.json` with Serilog, enabling
structured logging with configurable sinks and enrichment.
Added `DocumentOperatorSettings` to manage temporary files
and logging details. Introduced `RedisSettings` for Redis
integration, including connection string and cache settings.
Added `ApiKeySettings` to support tenant-specific API key
validation with detailed configuration for each tenant.
These changes improve logging, caching, and configuration
management for better maintainability and extensibility.
Restructured project files across all layers:
- Removed `Controllers` folder reference from `DocumentOperator.API.csproj`.
- Added folder structure to `DocumentOperator.Application`, `DocumentOperator.Domain`, and `DocumentOperator.Infrastructure` projects for better organization.
Introduced new API configurations and middleware:
- Added `SerilogConfiguration` and `SwaggerConfiguration` classes.
- Added `ExceptionHandlingMiddleware`, `RequestLoggingMiddleware`, and `TenantResolutionMiddleware`.
Implemented new document processing feature:
- Added `ProcessDocumentCommand`, `ProcessDocumentHandler`, and `ProcessDocumentValidator` classes in the application layer.
Added `Asp.Versioning.Http`, `Microsoft.Extensions.Caching.StackExchangeRedis`, and `Serilog.AspNetCore` to `DocumentOperator.API` for API versioning, Redis caching, and structured logging.
Added `Ardalis.Result`, `FluentValidation`, `FluentValidation.DependencyInjectionExtensions`, and `MediatR` to `DocumentOperator.Application` for result handling, validation, and mediator pattern support.
Added `DevExpress.Pdf.Core` and `Microsoft.Extensions.Options.ConfigurationExtensions` to `DocumentOperator.Infrastructure` for PDF processing and configuration management.