Extract consent, audit log, cookie category, and consent stats endpoints from legal_document_routes into LegalDocumentConsentService. The route file is now a thin handler layer delegating to LegalDocumentService and LegalDocumentConsentService with translate_domain_errors(). Legacy helpers (_doc_to_response, _version_to_response, _transition, _log_approval) and schemas are re-exported for existing tests. Two transition tests updated to expect domain errors instead of HTTPException. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
122 lines
2.6 KiB
Python
122 lines
2.6 KiB
Python
"""
|
|
Legal document schemas — Rechtliche Texte with versioning + approval.
|
|
|
|
Phase 1 Step 4: extracted from ``compliance.api.legal_document_routes``.
|
|
"""
|
|
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class DocumentCreate(BaseModel):
|
|
type: str
|
|
name: str
|
|
description: Optional[str] = None
|
|
mandatory: bool = False
|
|
tenant_id: Optional[str] = None
|
|
|
|
|
|
class DocumentResponse(BaseModel):
|
|
id: str
|
|
tenant_id: Optional[str]
|
|
type: str
|
|
name: str
|
|
description: Optional[str]
|
|
mandatory: bool
|
|
created_at: datetime
|
|
updated_at: Optional[datetime]
|
|
|
|
|
|
class VersionCreate(BaseModel):
|
|
document_id: str
|
|
version: str
|
|
language: str = "de"
|
|
title: str
|
|
content: str
|
|
summary: Optional[str] = None
|
|
created_by: Optional[str] = None
|
|
|
|
|
|
class VersionUpdate(BaseModel):
|
|
title: Optional[str] = None
|
|
content: Optional[str] = None
|
|
summary: Optional[str] = None
|
|
version: Optional[str] = None
|
|
language: Optional[str] = None
|
|
|
|
|
|
class VersionResponse(BaseModel):
|
|
id: str
|
|
document_id: str
|
|
version: str
|
|
language: str
|
|
title: str
|
|
content: str
|
|
summary: Optional[str]
|
|
status: str
|
|
created_by: Optional[str]
|
|
approved_by: Optional[str]
|
|
approved_at: Optional[datetime]
|
|
rejection_reason: Optional[str]
|
|
created_at: datetime
|
|
updated_at: Optional[datetime]
|
|
|
|
|
|
class ApprovalHistoryEntry(BaseModel):
|
|
id: str
|
|
version_id: str
|
|
action: str
|
|
approver: Optional[str]
|
|
comment: Optional[str]
|
|
created_at: datetime
|
|
|
|
|
|
class ActionRequest(BaseModel):
|
|
approver: Optional[str] = None
|
|
comment: Optional[str] = None
|
|
|
|
|
|
class UserConsentCreate(BaseModel):
|
|
user_id: str
|
|
document_id: str
|
|
document_version_id: Optional[str] = None
|
|
document_type: str
|
|
consented: bool = True
|
|
ip_address: Optional[str] = None
|
|
user_agent: Optional[str] = None
|
|
|
|
|
|
class CookieCategoryCreate(BaseModel):
|
|
name_de: str
|
|
name_en: Optional[str] = None
|
|
description_de: Optional[str] = None
|
|
description_en: Optional[str] = None
|
|
is_required: bool = False
|
|
sort_order: int = 0
|
|
|
|
|
|
class CookieCategoryUpdate(BaseModel):
|
|
name_de: Optional[str] = None
|
|
name_en: Optional[str] = None
|
|
description_de: Optional[str] = None
|
|
description_en: Optional[str] = None
|
|
is_required: Optional[bool] = None
|
|
sort_order: Optional[int] = None
|
|
is_active: Optional[bool] = None
|
|
|
|
|
|
__all__ = [
|
|
"DocumentCreate",
|
|
"DocumentResponse",
|
|
"VersionCreate",
|
|
"VersionUpdate",
|
|
"VersionResponse",
|
|
"ApprovalHistoryEntry",
|
|
"ActionRequest",
|
|
"UserConsentCreate",
|
|
"CookieCategoryCreate",
|
|
"CookieCategoryUpdate",
|
|
]
|