Files
DocumentService/CONTROLLER_ENDPOINTS.md
TekH 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

8.2 KiB

DocumentService - Controller & Endpoint Specification

Project: DocumentService (DOC)
Ticket: DOC-1 - GDPicture and Nutrient Replacing
Owner: Hakan Tek
Date: July 3, 2026


Overview

This specification defines the controller structure and REST API endpoints for the DocumentService service.


PdfValidationController

Endpoint: PDF Validation

Route: POST /api/pdf/validation/validate
Function: Checks whether the file is a valid PDF, whether it is corrupted, and returns basic information

Input:

  • PDF file (multipart/form-data)

Output:

{
  "isValid": bool,
  "pdfVersion": string,
  "pageCount": int,
  "fileSize": long,
  "encrypted": bool,
  "errors": string[]
}

Usage: All products - basic PDF input check


Endpoint: PDF/A Validation

Route: POST /api/pdf/validation/validate-pdfa
Function: PDF/A conformance check (embedded fonts, encryption, JavaScript, etc.)

Input:

  • PDF file (multipart/form-data)

Output:

{
  "isValid": bool,
  "pdfaVersion": string,
  "pageCount": int,
  "errors": string[],
  "warnings": string[]
}

Usage: taskFLOW, eParser - ensuring PDF/A conformance


PdfAttachmentController

Endpoint: Attachment Check

Route: POST /api/pdf/attachments/check
Function: Detects whether embedded files (e.g. ZUGFeRD XML) are present in the PDF

Input:

  • PDF file (multipart/form-data)

Output:

{
  "hasAttachments": bool,
  "attachmentCount": int,
  "attachments": [
    {
      "fileName": string,
      "mimeType": string,
      "size": long
    }
  ]
}

Usage: eParser (ZUGFeRD), ErgebnisberichtCreator


Endpoint: Attachment Extraction

Route: POST /api/pdf/attachments/extract
Function: Extracts all embedded files from the PDF and returns them as a ZIP archive

Input:

  • PDF file (multipart/form-data)

Output:

  • Binary stream (application/zip)
  • Content-Disposition: attachment; filename="attachments.zip"
  • ZIP archive containing all extracted files

Usage: eParser (ZUGFeRD XML extraction)


Endpoint: Add Attachment

Route: POST /api/pdf/attachments/add
Function: Embeds one or more files as attachments in a PDF (supports PDF/A-3)

Input:

  • PDF file (multipart/form-data)
  • Attachment files (multipart/form-data, multiple)

Output:

  • Binary stream (application/pdf)
  • Content-Disposition: attachment; filename="with-attachments.pdf"
  • PDF with embedded attachments

Usage: eParser (ZUGFeRD XML embedding), PDF/A-3 archiving


PdfOperationsController

Endpoint: PDF Merge

Route: POST /api/pdf/operations/merge
Function: Merges multiple PDFs into a single file

Input:

  • Multiple PDF files (multipart/form-data)
  • Field name: "files" (array of IFormFile)

Output:

  • Binary stream (application/pdf)
  • Content-Disposition: attachment; filename="merged.pdf"
  • Merged PDF document

Usage: signFLOW (Envelope Generator), ErgebnisberichtCreator, ResultHandler (windream)


Endpoint: PDF Stamp

Route: POST /api/pdf/operations/stamp
Function: Adds stamps to PDF pages (APPROVED, CONFIDENTIAL, etc.)

Input:

  • PDF file (multipart/form-data)
  • Stamp configuration (JSON):
    {
      "text": string,
      "position": string,
      "pages": string,
      "color": string,
      "opacity": float
    }
    

Output:

  • Binary stream (application/pdf)
  • Content-Disposition: attachment; filename="stamped.pdf"
  • PDF with applied stamps

Usage: ErgebnisberichtCreator


Endpoint: PDF Annotate

Route: POST /api/pdf/operations/annotate
Function: Adds comments, highlights, and markings to the PDF

Input:

  • PDF file (multipart/form-data)
  • Annotations (JSON):
    {
      "annotations": [
        {
          "type": string,
          "page": int,
          "position": object,
          "text": string
        }
      ]
    }
    

Output:

  • Binary stream (application/pdf)
  • Content-Disposition: attachment; filename="annotated.pdf"
  • PDF with applied annotations

Usage: signFLOW (Envelope Generator)


SwissQrCodeController

Endpoint: Swiss QR Code Extraction

Route: POST /api/swissqrcode/extract
Function: Extracts and parses Swiss QR Bill (Swiss QR Code) from PDF

Input:

  • PDF file (multipart/form-data)

Output:

{
  "qrType": "SwissQrBill",
  "version": "0200",
  "creditorIban": "CH4431999123000889012",
  "creditorName": "Example AG",
  "creditorAddress": {
    "addressType": "Structured",
    "street": "Musterstrasse",
    "houseNumber": "1",
    "postalCode": "8000",
    "city": "Zürich",
    "country": "CH"
  },
  "amount": 1234.56,
  "currency": "CHF",
  "debtorName": "Max Mustermann",
  "debtorAddress": { ... },
  "referenceType": "QRR",
  "reference": "210000000003139471430009017",
  "unstructuredMessage": "Invoice #12345",
  "billInformation": "//S1/10/12345",
  "alternativeProcedures": ["UV1", "UV2"]
}

Usage: eParser (Swiss QR Bill processing), signFLOW (payment reference extraction)

Note: Supports only Structured Address (S-Type) as per Swiss QR Bill Standard 2.0. Combined Address (K-Type) deprecated November 21, 2025.


PdfRenderController

Status: REMOVED - PDF preview functionality will be implemented in .NET client library using DevExpress WinForms/WPF controls. Server-side rendering is unnecessary CPU/memory overhead.


PdfConversionController

Endpoint: Convert PDF to PDF/A

Route: POST /api/pdf/conversion/to-pdfa
Function: Converts a standard PDF to PDF/A

Input:

  • PDF file (multipart/form-data)
  • PDF/A level (query parameter): "PDF/A-1b", "PDF/A-2b", "PDF/A-3b"

Output:

  • Binary stream (application/pdf)
  • Content-Disposition: attachment; filename="converted-pdfa.pdf"
  • PDF/A compliant document

Usage: taskFLOW (optional conversion)


Endpoint: Convert PDF/A to PDF

Route: POST /api/pdf/conversion/from-pdfa
Function: Converts PDF/A to a standard PDF

Input:

  • PDF/A file (multipart/form-data)

Output:

  • Binary stream (application/pdf)
  • Content-Disposition: attachment; filename="converted-pdf.pdf"
  • Standard PDF document

Usage: taskFLOW (optional conversion)


Technical Specifications

Framework Support

  • ✓ .NET Core (3.1+, 6.0+, 8.0+)
  • ✓ .NET Framework (4.7.2+, 4.8+)

Client Usage

The service can be used on the client side without manual HTTP response handling:

  • Provide REST client wrapper
  • SDK for C# clients
  • Automatic serialization/deserialization
  • Abstracted error handling

Example Client SDK:

var client = new DocumentServiceClient("https://api.example.com");
var result = await client.Pdf.Validation.ValidateAsync(pdfFile);
if (result.IsValid) { ... }

Response Format

  • Default: JSON (for metadata endpoints like validation, check)
  • Binary streams: application/pdf, application/zip (for operations, conversion, extraction)
  • Content-Disposition header: attachment; filename=""
  • Errors: HTTP Status Codes (400, 404, 500) + JSON error object
  • Success: HTTP 200 + JSON/Binary response

Binary Stream Endpoints:

  • PDF Operations: merge, stamp, annotate
  • PDF Conversion: to-pdfa, from-pdfa
  • Attachment Operations: extract (ZIP), add (PDF)

JSON Response Endpoints:

  • PDF Validation: validate, validate-pdfa
  • Attachment Check: check
  • Swiss QR Code: extract

Authentication

  • API Key (Header: X-API-Key)
  • Optional: OAuth2/JWT for advanced scenarios

Swagger/OpenAPI

  • Complete API documentation
  • Interactive test UI
  • Code generation for clients

Prioritization

Phase 1 (Priority)

  1. PdfValidationController - both endpoints (validate, validate-pdfa)
  2. PdfAttachmentController - check endpoint
  3. SwissQrCodeController - extract endpoint (already implemented)
  4. PdfAttachmentController - extract endpoint
  5. PdfOperationsController - merge endpoint

Phase 2

  1. PdfOperationsController - stamp & annotate endpoints
  2. PdfAttachmentController - add attachment endpoint

Phase 3

  1. PdfConversionController - both endpoints (to-pdfa, from-pdfa)

Removed

  • PdfRenderController - moved to .NET client library (WinForms/WPF DevExpress controls)

Last Updated: July 3, 2026
Author: Hakan Tek
Status: Draft - Awaiting Feedback