10 Commits

Author SHA1 Message Date
0e88b349d7 Rebrand project: DocumentOperator to DocumentService
This commit implements a complete rebranding of the project:
- Updated all namespaces from `DocumentOperator` to `DocumentService`.
- Renamed file paths, embedded resources, and test data references.
- Updated configuration keys, logging paths, and Redis instance names.
- Revised documentation to reflect the new project name.
- Modified project and solution files to align with the new structure.
- Updated class names, DTOs, commands, queries, and handlers.
- Adjusted middleware, controllers, and API endpoints.
- Updated Swagger metadata and API titles to `DocumentService API`.
- Refactored test namespaces, resource paths, and embedded resources.
- Updated build and deployment configurations for the new name.
- Replaced all references to `DocumentOperator` in comments and literals.

These changes ensure consistency across the codebase and documentation.
2026-07-30 14:02:56 +02:00
e2bec710e0 feat(stamp): Add Domain value objects for stamp operations
- Add StampType enum (Text, Image, Predefined)
- Add PredefinedStampType enum (CONFIDENTIAL, APPROVED, DRAFT, etc.)
- Add StampPlacement enum (Foreground, Background)
- All enums in DocumentOperator.Domain namespace
2026-07-21 14:38:22 +02:00
c1bb3abeef feat(annotation): Add AnnotationOrigin value object
- Add AnnotationOrigin enum (BottomLeft/TopLeft)
- BottomLeft = PDF native coordinate system (default)
- TopLeft = UI-friendly coordinate system (requires Y-axis conversion)
- Shared with stamp operations for consistency
2026-07-21 14:37:54 +02:00
e95f070b9b feat(domain): Add annotation value objects for Feature 6
- Add AnnotationType enum (TextMarkup, FreeText, StickyNote, Circle, Square)
- Add TextMarkupStyle enum (Highlight, Underline, Strikeout)
- Support 5 annotation types as per CONTROLLER_ENDPOINTS.md requirements
2026-07-21 12:27:41 +02:00
f2e6ef0260 chore: Remove obsolete Domain enums (DocumentOperationType, ProcessingStatus)
- These enums were part of initial scaffolding but never used
- Domain layer cleanup - removing unused code
2026-07-20 11:55:55 +02:00
d123bc996e refactor: Move DTOs from Domain to Application layer
- Move PdfMetadata, PdfAMetadata from Domain.Models.ValueObjects to Application.Common.DTOs
- Move AttachmentInfo, AttachmentMetadata from Domain.Models.ValueObjects to Application.Common.DTOs
- Reason: DTOs belong in Application layer, Domain should have zero external dependencies (Clean Architecture)
2026-07-20 11:55:01 +02:00
cd50d45bd5 feat: Add PDF/A validation endpoint (Feature 3)
Domain layer:

  - PdfAMetadata value object (isValid, pdfVersion, pageCount, encrypted, pdfaVersion, pdfaCompliant, errors, warnings)

Infrastructure layer:

  - IPdfProcessor.ValidatePdfAAsync() interface method

  - DevExpressPdfProcessor.ValidatePdfAAsync() implementation

  - DetectEncryption() - scans PDF raw data for /Encrypt keyword

  - DetectPdfAConformance() - parses XMP metadata (pdfaid:part, pdfaid:conformance)

  - Validation: encrypted PDF cannot be PDF/A compliant

Application layer:

  - ValidatePdfAQuery + ValidatePdfAQueryHandler (co-located)

  - ValidatePdfAQueryValidator (FluentValidation: PdfBytes XOR Base64Pdf)

  - PdfAValidationResult DTO

  - AutoMapper: PdfAMetadata -> PdfAValidationResult

API layer:

  - PdfValidationController.ValidatePdfAFromFile() (multipart/form-data)

  - PdfValidationController.ValidatePdfAFromBase64() (application/json)

  - XML documentation with response codes

Result:

  - POST /api/pdf/validation/validate-pdfa (both multipart and JSON)

  - Returns: conformance level, errors, warnings

  - Build: 0 errors, 4 warnings (DevExpress eval)

  - Tests: 20/20 passing

Next: Integration tests + Swagger test case
2026-07-09 12:59:24 +02:00
b460d8df39 refactor: Remove Base64String value object per YAGNI principle
Remove unnecessary Base64String value object:

  - Performance overhead (validation runs twice: value object + FluentValidation)

  - Unnecessary abstraction (Convert.FromBase64String already validates)

  - YAGNI principle: use string directly + extension methods if needed

Replaced with:

  - Direct string usage in DTOs

  - FluentValidation for Base64 format validation

  - FormatException handling in ExceptionHandlingMiddleware (maps to 400)

Result: Simpler code, better performance, same validation coverage
2026-07-07 19:00:43 +02:00
OlgunR
3a87ace144 Complete Phase 2: Domain Layer 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).
2026-06-18 14:32:06 +02:00
OlgunR
cdb942210c Complete Step 2.2: Add enums for business concepts
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.
2026-06-17 16:43:03 +02:00