fix: Restore all files lost during destructive rebase
A previous `git pull --rebase origin main` dropped 177 local commits,
losing 3400+ files across admin-v2, backend, studio-v2, website,
klausur-service, and many other services. The partial restore attempt
(660295e2) only recovered some files.
This commit restores all missing files from pre-rebase ref 98933f5e
while preserving post-rebase additions (night-scheduler, night-mode UI,
NightModeWidget dashboard integration).
Restored features include:
- AI Module Sidebar (FAB), OCR Labeling, OCR Compare
- GPU Dashboard, RAG Pipeline, Magic Help
- Klausur-Korrektur (8 files), Abitur-Archiv (5+ files)
- Companion, Zeugnisse-Crawler, Screen Flow
- Full backend, studio-v2, website, klausur-service
- All compliance SDKs, agent-core, voice-service
- CI/CD configs, documentation, scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
152
klausur-service/backend/models/requests.py
Normal file
152
klausur-service/backend/models/requests.py
Normal file
@@ -0,0 +1,152 @@
|
||||
"""
|
||||
Klausur-Service Request Models
|
||||
|
||||
Pydantic models for API request/response validation.
|
||||
"""
|
||||
|
||||
from typing import Optional, List, Dict, Any
|
||||
from pydantic import BaseModel
|
||||
|
||||
from .enums import KlausurModus
|
||||
|
||||
|
||||
# =============================================
|
||||
# KLAUSUR REQUESTS
|
||||
# =============================================
|
||||
|
||||
class KlausurCreate(BaseModel):
|
||||
"""Request to create a new Klausur."""
|
||||
title: str
|
||||
subject: str
|
||||
modus: KlausurModus = KlausurModus.VORABITUR
|
||||
class_id: Optional[str] = None
|
||||
year: int = 2025
|
||||
semester: str = "Q1"
|
||||
|
||||
|
||||
class KlausurUpdate(BaseModel):
|
||||
"""Request to update a Klausur."""
|
||||
title: Optional[str] = None
|
||||
subject: Optional[str] = None
|
||||
erwartungshorizont: Optional[Dict[str, Any]] = None
|
||||
|
||||
|
||||
# =============================================
|
||||
# STUDENT REQUESTS
|
||||
# =============================================
|
||||
|
||||
class StudentUpload(BaseModel):
|
||||
"""Request for student work upload metadata."""
|
||||
student_name: str
|
||||
student_id: Optional[str] = None
|
||||
|
||||
|
||||
# =============================================
|
||||
# GRADING REQUESTS
|
||||
# =============================================
|
||||
|
||||
class CriterionScoreUpdate(BaseModel):
|
||||
"""Request to update a criterion score."""
|
||||
criterion: str
|
||||
score: int
|
||||
annotations: Optional[List[str]] = None
|
||||
|
||||
|
||||
class GutachtenUpdate(BaseModel):
|
||||
"""Request to update the Gutachten."""
|
||||
einleitung: str
|
||||
hauptteil: str
|
||||
fazit: str
|
||||
staerken: Optional[List[str]] = None
|
||||
schwaechen: Optional[List[str]] = None
|
||||
|
||||
|
||||
class GutachtenGenerateRequest(BaseModel):
|
||||
"""Request to generate a KI-based Gutachten."""
|
||||
include_strengths: bool = True
|
||||
include_weaknesses: bool = True
|
||||
tone: str = "formal" # formal, friendly, constructive
|
||||
# BYOEH RAG Integration
|
||||
use_eh: bool = False # Whether to use Erwartungshorizont for context
|
||||
eh_passphrase: Optional[str] = None # Passphrase for EH decryption
|
||||
|
||||
|
||||
# =============================================
|
||||
# EXAMINER REQUESTS
|
||||
# =============================================
|
||||
|
||||
class ExaminerAssignment(BaseModel):
|
||||
"""Request to assign an examiner."""
|
||||
examiner_id: str
|
||||
examiner_role: str # first_examiner, second_examiner
|
||||
notes: Optional[str] = None
|
||||
|
||||
|
||||
class ExaminerResult(BaseModel):
|
||||
"""Request to submit an examiner's result."""
|
||||
grade_points: int
|
||||
notes: Optional[str] = None
|
||||
|
||||
|
||||
# =============================================
|
||||
# BYOEH REQUESTS
|
||||
# =============================================
|
||||
|
||||
class EHMetadata(BaseModel):
|
||||
"""Metadata for an Erwartungshorizont."""
|
||||
title: str
|
||||
subject: str
|
||||
niveau: str # 'eA' | 'gA'
|
||||
year: int
|
||||
aufgaben_nummer: Optional[str] = None
|
||||
|
||||
|
||||
class EHUploadMetadata(BaseModel):
|
||||
"""Metadata for EH upload including encryption info."""
|
||||
metadata: EHMetadata
|
||||
encryption_key_hash: str
|
||||
salt: str
|
||||
rights_confirmed: bool
|
||||
original_filename: str
|
||||
|
||||
|
||||
class EHRAGQuery(BaseModel):
|
||||
"""Request for RAG query against Erwartungshorizonte."""
|
||||
query_text: str
|
||||
passphrase: str
|
||||
subject: Optional[str] = None
|
||||
limit: int = 5
|
||||
|
||||
|
||||
class EHIndexRequest(BaseModel):
|
||||
"""Request to index an Erwartungshorizont."""
|
||||
passphrase: str
|
||||
|
||||
|
||||
class EHShareRequest(BaseModel):
|
||||
"""Request to share EH with another examiner."""
|
||||
user_id: str # User to share with
|
||||
role: str # second_examiner, third_examiner, supervisor
|
||||
encrypted_passphrase: str # Passphrase encrypted for recipient
|
||||
passphrase_hint: Optional[str] = None
|
||||
klausur_id: Optional[str] = None # Optional: link to specific Klausur
|
||||
|
||||
|
||||
class EHLinkKlausurRequest(BaseModel):
|
||||
"""Request to link EH to a Klausur."""
|
||||
klausur_id: str
|
||||
|
||||
|
||||
class EHInviteRequest(BaseModel):
|
||||
"""Request to invite another user to access an EH."""
|
||||
invitee_email: str # Email of the recipient
|
||||
invitee_id: Optional[str] = None # User ID if known
|
||||
role: str # second_examiner, third_examiner, supervisor, department_head
|
||||
klausur_id: Optional[str] = None # Optional: link to specific Klausur
|
||||
message: Optional[str] = None # Optional message for the invitee
|
||||
expires_in_days: int = 14 # Default 14 days expiration
|
||||
|
||||
|
||||
class EHAcceptInviteRequest(BaseModel):
|
||||
"""Request to accept an invitation and receive the encrypted passphrase."""
|
||||
encrypted_passphrase: str # The passphrase encrypted for the invitee
|
||||
Reference in New Issue
Block a user