All checks were successful
Deploy FluentGerman.ai / deploy (push) Successful in 53s
93 lines
2.7 KiB
Python
93 lines
2.7 KiB
Python
"""FluentGerman.ai — Pydantic request/response schemas."""
|
|
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, EmailStr
|
|
|
|
|
|
# ── Auth ──────────────────────────────────────────────────────────────
|
|
class Token(BaseModel):
|
|
access_token: str
|
|
token_type: str = "bearer"
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
username: str
|
|
password: str
|
|
|
|
|
|
# ── User ──────────────────────────────────────────────────────────────
|
|
class UserCreate(BaseModel):
|
|
username: str
|
|
email: EmailStr
|
|
password: str
|
|
|
|
|
|
class UserUpdate(BaseModel):
|
|
username: str | None = None
|
|
email: EmailStr | None = None
|
|
password: str | None = None
|
|
is_active: bool | None = None
|
|
|
|
|
|
class UserOut(BaseModel):
|
|
id: int
|
|
username: str
|
|
email: str
|
|
is_admin: bool
|
|
is_active: bool
|
|
created_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
# ── Instruction ───────────────────────────────────────────────────────
|
|
class InstructionCreate(BaseModel):
|
|
user_id: int | None = None
|
|
title: str
|
|
content: str
|
|
type: str = "personal" # global | personal | homework
|
|
|
|
|
|
class InstructionUpdate(BaseModel):
|
|
title: str | None = None
|
|
content: str | None = None
|
|
type: str | None = None
|
|
|
|
|
|
class InstructionOut(BaseModel):
|
|
id: int
|
|
user_id: int | None
|
|
title: str
|
|
content: str
|
|
type: str
|
|
created_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
# ── Dashboard ────────────────────────────────────────────────────────
|
|
class DashboardOut(BaseModel):
|
|
username: str
|
|
latest_instruction_at: datetime | None = None
|
|
|
|
|
|
# ── Chat ──────────────────────────────────────────────────────────────
|
|
class ChatMessage(BaseModel):
|
|
role: str # "user" | "assistant"
|
|
content: str
|
|
|
|
|
|
class ChatRequest(BaseModel):
|
|
message: str
|
|
history: list[ChatMessage] = []
|
|
|
|
|
|
# ── Voice / Admin ────────────────────────────────────────────────────
|
|
class VoiceInstructionRequest(BaseModel):
|
|
raw_text: str
|
|
|
|
|
|
class VoiceConfigOut(BaseModel):
|
|
voice_mode: str # "api" | "browser"
|