92 lines
No EOL
4.1 KiB
Python
92 lines
No EOL
4.1 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import List, Dict, Any, Optional
|
|
from datetime import datetime
|
|
|
|
|
|
class Label(BaseModel):
|
|
"""Label für ein Attribut oder eine Klasse mit Unterstützung für mehrere Sprachen"""
|
|
default: str
|
|
translations: Dict[str, str] = {}
|
|
|
|
def get_label(self, language: str = None):
|
|
"""Gibt das Label in der angegebenen Sprache zurück, oder den Standardwert wenn nicht verfügbar"""
|
|
if language and language in self.translations:
|
|
return self.translations[language]
|
|
return self.default
|
|
|
|
|
|
class Mandate(BaseModel):
|
|
"""Datenmodell für einen Mandanten"""
|
|
id: int = Field(description="Eindeutige ID des Mandanten")
|
|
name: str = Field(description="Name des Mandanten")
|
|
language: str = Field(description="Standardsprache des Mandanten")
|
|
|
|
label: Label = Field(
|
|
default=Label(default="Mandant", translations={"en": "Mandate", "fr": "Mandat"}),
|
|
description="Label für die Klasse"
|
|
)
|
|
|
|
# Labels für Attribute
|
|
field_labels: Dict[str, Label] = {
|
|
"id": Label(default="ID", translations={}),
|
|
"name": Label(default="Name des Mandanten", translations={"en": "Mandate name", "fr": "Nom du mandat"}),
|
|
"language": Label(default="Sprache", translations={"en": "Language", "fr": "Langue"})
|
|
}
|
|
|
|
class User(BaseModel):
|
|
"""Datenmodell für einen Benutzer"""
|
|
id: int = Field(description="Eindeutige ID des Benutzers")
|
|
mandate_id: int = Field(description="ID des zugehörigen Mandanten")
|
|
username: str = Field(description="Benutzername für die Anmeldung")
|
|
email: Optional[str] = Field(None, description="E-Mail-Adresse des Benutzers")
|
|
full_name: Optional[str] = Field(None, description="Vollständiger Name des Benutzers")
|
|
disabled: Optional[bool] = Field(False, description="Gibt an, ob der Benutzer deaktiviert ist")
|
|
language: str = Field(description="Bevorzugte Sprache des Benutzers")
|
|
|
|
label: Label = Field(
|
|
default=Label(default="Benutzer", translations={"en": "User", "fr": "Utilisateur"}),
|
|
description="Label für die Klasse"
|
|
)
|
|
|
|
# Labels für Attribute
|
|
field_labels: Dict[str, Label] = {
|
|
"id": Label(default="ID", translations={}),
|
|
"mandate_id": Label(default="Mandanten-ID", translations={"en": "Mandate ID", "fr": "ID de mandat"}),
|
|
"username": Label(default="Benutzername", translations={"en": "Username", "fr": "Nom d'utilisateur"}),
|
|
"email": Label(default="E-Mail", translations={"en": "Email", "fr": "E-mail"}),
|
|
"full_name": Label(default="Vollständiger Name", translations={"en": "Full name", "fr": "Nom complet"}),
|
|
"disabled": Label(default="Deaktiviert", translations={"en": "Disabled", "fr": "Désactivé"}),
|
|
"language": Label(default="Sprache", translations={"en": "Language", "fr": "Langue"})
|
|
}
|
|
|
|
|
|
class UserInDB(User):
|
|
"""Erweiterte Benutzerklasse mit Passwort-Hash"""
|
|
hashed_password: str = Field(description="Hash des Benutzerpassworts")
|
|
|
|
label: Label = Field(
|
|
default=Label(default="Benutzer Zugriff", translations={"en": "User Access", "fr": "Accès de l'utilisateur"}),
|
|
description="Label für die Klasse"
|
|
)
|
|
|
|
# Zusätzliches Label für das Passwort-Feld
|
|
field_labels: Dict[str, Label] = {
|
|
"hashed_password": Label(default="Passwort-Hash", translations={"en": "Password hash", "fr": "Hachage de mot de passe"})
|
|
}
|
|
|
|
|
|
class Token(BaseModel):
|
|
"""Datenmodell für ein Authentifizierungstoken"""
|
|
access_token: str = Field(description="Das ausgestellte Zugriffstoken")
|
|
token_type: str = Field(description="Typ des Tokens (meist 'bearer')")
|
|
|
|
label: Label = Field(
|
|
default=Label(default="Token", translations={"en": "Token", "fr": "Jeton"}),
|
|
description="Label für die Klasse"
|
|
)
|
|
|
|
# Labels für Attribute
|
|
field_labels: Dict[str, Label] = {
|
|
"access_token": Label(default="Zugriffstoken", translations={"en": "Access token", "fr": "Jeton d'accès"}),
|
|
"token_type": Label(default="Token-Typ", translations={"en": "Token type", "fr": "Type de jeton"})
|
|
} |