Added a new test project, `DocumentOperator.Tests`, to the solution targeting .NET 8.0. Configured the project as a non-packable test project with support for nullable reference types and implicit usings. Included dependencies for `xunit`, `Microsoft.NET.Test.Sdk`, and `coverlet.collector` for testing and code coverage.
Added a placeholder test class, `UnitTest1`, with a single test method, `Test1`, marked with the `[Fact]` attribute.
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.
Implemented a structured exception-handling mechanism in the
domain layer with the addition of `DomainException`,
`DomainValidationException`, `NotFoundException`, and
`PdfProcessingException` classes. These exceptions provide
specific error handling for domain logic and integrate with
centralized middleware.
Updated `ROADMAP.md` to mark Step 2.1 (Domain Exceptions) as
completed and Step 2.2 (Value Objects) as the next task.
Added timeline entries to reflect progress.
Cleaned up `DocumentOperator.Domain.csproj` by removing
unused folder inclusions, indicating a project structure
reorganization.
- Updated section headers with emojis for better navigation.
- Added "Last Updated" date and project status to the header.
- Corrected German umlauts and special characters for encoding.
- Improved formatting of "TABLE OF CONTENTS" and "PROJECT OVERVIEW."
- Replaced ASCII diagrams with modern box-based structures.
- Clarified dependency rules and workflow diagrams with arrows (→).
- Highlighted benefits using checkmarks (✅) for key sections.
- Removed Ardalis.Result and marked it with ❌ in "TECHNOLOGY STACK."
- Enhanced "DEVELOPMENT ROADMAP" with emoji-based phase statuses.
- Improved overall consistency, clarity, and visual appeal.
Introduced a comprehensive roadmap in `ROADMAP.md` to outline
the vision, purpose, and development phases of the
`DocumentOperator` service. Key additions include:
- Table of contents for navigation.
- Project overview with problem statement, solution, and core
features.
- Business workflow description for API operations.
- Architecture and design decisions:
- Clean Architecture principles and dependency rules.
- CQRS with MediatR and Vertical Slice Architecture.
- Exception-based error handling and Minimal APIs.
- Multi-tenancy strategy using API keys.
- Technology stack and detailed project structure.
- Development roadmap with nine phases, highlighting current
progress (Phase 1 completed, Phase 2 in progress).
- Learning notes, references, and an update log.
The roadmap serves as a living document to guide development
and ensure alignment on goals and strategies.
The `<PackageReference Include="Ardalis.Result" Version="10.1.0" />` was removed from the `DocumentOperator.Application.csproj` file. This indicates that the project no longer relies on the `Ardalis.Result` library. Other package references remain unchanged.
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.