Initiale Ablage der umsortierten Skrift-Programme

Struktur: Docker/ (skrift-backend, signature-service), Webseite/
(skrift-configurator, skrift-job-manager), Produktion/ (skrift-produktion,
AutoRecover). Aufgeräumt: signature-to-svg entfernt, Backend-PayPal-Service
entfernt (PayPal läuft client-seitig im Configurator), Dev-/Test-Artefakte
und Deployment-Dokus bereinigt, .dockerignore repariert. CLAUDE.md mit
Architektur ergänzt. Secrets (.env, config.json) via .gitignore ausgeschlossen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Lucas Orth
2026-07-20 12:21:08 +02:00
commit 0341c4eaea
90 changed files with 40401 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
"""Pydantic-Modelle für die Job-Definition des Signatur-Plotter-Service."""
from typing import Literal
from pydantic import BaseModel, Field, field_validator
class SignatureJob(BaseModel):
"""Ein Eintrag der Job-Definition: ordnet genau einen Marker-Token einer SVG zu."""
token: str # unsichtbarer Token im PDF, z.B. "§§SIG1§§"
svg_id: str # Dateiname der hochgeladenen SVG
# Lage relativ zum Token. "genau" = direkt an der Marker-Position (Standard),
# "ueber"/"unter" = mit Abstand darüber/darunter.
position: Literal["genau", "ueber", "unter"] = "genau"
breite_mm: float = Field(default=45.0, gt=0) # Zielbreite der Unterschrift
abstand_mm: float = Field(default=8.0, ge=0) # Abstand (nur bei ueber/unter relevant)
# Feinjustierung relativ zur berechneten Position (darf negativ sein):
versatz_x_mm: float = 0.0 # + = nach rechts, − = nach links
versatz_y_mm: float = 0.0 # + = nach unten, − = nach oben
# Signaturen werden grundsätzlich als Single-Stroke gezeichnet (keine Füllung).
linienstaerke_mm: float = Field(default=0.35, gt=0) # Linienstärke der Kontur
@field_validator("token", "svg_id")
@classmethod
def _not_blank(cls, v: str) -> str:
if not v or not v.strip():
raise ValueError("darf nicht leer sein")
return v