# DocumentOperator - 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 DocumentOperator 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:**
```json
{
  "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:**
```json
{
  "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:**
```json
{
  "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 saves them to the specified path

**Input:**
```json
{
  "file": "PDF (multipart/form-data)",
  "outputPath": string
}
```

**Output:**
```json
{
  "success": bool,
  "extractedFiles": [
    {
      "fileName": string,
      "savedPath": string,
      "size": long
    }
  ]
}
```

**Usage:** eParser (ZUGFeRD XML extraction)

---

## PdfOperationsController

### Endpoint: PDF Merge
**Route:** `POST /api/pdf/operations/merge`  
**Function:** Merges multiple PDFs into a single file

**Input:**
```json
{
  "sourceFiles": string[],
  "outputPath": string
}
```

**Output:**
```json
{
  "success": bool,
  "outputPath": string,
  "pageCount": int,
  "fileSize": long
}
```

**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:**
```json
{
  "file": "PDF (multipart/form-data)",
  "stamp": {
    "text": string,
    "position": string,
    "pages": string,
    "color": string,
    "opacity": float
  }
}
```

**Output:**
```json
{
  "success": bool,
  "outputPath": string
}
```

**Usage:** ErgebnisberichtCreator

---

### Endpoint: PDF Annotate
**Route:** `POST /api/pdf/operations/annotate`  
**Function:** Adds comments, highlights, and markings to the PDF

**Input:**
```json
{
  "file": "PDF (multipart/form-data)",
  "annotations": [
    {
      "type": string,
      "page": int,
      "position": object,
      "text": string
    }
  ]
}
```

**Output:**
```json
{
  "success": bool,
  "outputPath": string
}
```

**Usage:** signFLOW (Envelope Generator)

---

## PdfRenderController

### Endpoint: PDF Preview
**Route:** `POST /api/pdf/render/preview`  
**Function:** Renders PDF pages as PNG/JPEG for preview

**Input:**
```json
{
  "file": "PDF (multipart/form-data)",
  "page": int,
  "format": string,
  "dpi": int
}
```

**Output:**
```json
{
  "images": [
    {
      "page": int,
      "base64": string,
      "width": int,
      "height": int
    }
  ]
}
```

**Usage:** taskFLOW, fileFLOW, easyFLOW, orgFLOW - PDF preview

---

## PdfConversionController

### Endpoint: Convert PDF to PDF/A
**Route:** `POST /api/pdf/conversion/to-pdfa`  
**Function:** Converts a standard PDF to PDF/A

**Input:**
```json
{
  "file": "PDF (multipart/form-data)",
  "pdfaLevel": string
}
```

**Output:**
```json
{
  "success": bool,
  "outputPath": string,
  "pdfaVersion": string
}
```

**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:**
```json
{
  "file": "PDF (multipart/form-data)"
}
```

**Output:**
```json
{
  "success": bool,
  "outputPath": string
}
```

**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:**
```csharp
var client = new DocumentOperatorClient("https://api.example.com");
var result = await client.Pdf.Validation.ValidateAsync(pdfFile);
if (result.IsValid) { ... }
```

### Response Format
- Default: JSON
- Errors: HTTP Status Codes (400, 404, 500) + JSON error object
- Success: HTTP 200 + JSON response

### 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
2. PdfAttachmentController - both endpoints
3. PdfOperationsController - Merge endpoint

### Phase 2
4. PdfOperationsController - Stamp & Annotate
5. PdfRenderController - Preview

### Phase 3
6. PdfConversionController - both endpoints

---

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