test/backend/app/schemas/schemas.py
Z User bc20de7567 fix: Change login endpoint to accept JSON instead of OAuth2 form data
- Added UserLogin schema for JSON login request
- Updated auth.py to use UserLogin instead of OAuth2PasswordRequestForm
- Added file_ids to ChatRequest schema
2026-03-24 03:09:21 +00:00

140 lines
2.6 KiB
Python

from datetime import datetime
from typing import Optional, List
from pydantic import BaseModel, EmailStr
# User schemas
class UserBase(BaseModel):
email: EmailStr
username: str
class UserCreate(UserBase):
password: str
class UserLogin(BaseModel):
email: EmailStr
password: str
class UserUpdate(BaseModel):
email: Optional[EmailStr] = None
username: Optional[str] = None
password: Optional[str] = None
role: Optional[str] = None
is_active: Optional[bool] = None
class UserResponse(UserBase):
id: int
role: str
is_active: bool
created_at: datetime
class Config:
from_attributes = True
# Token schemas
class Token(BaseModel):
access_token: str
token_type: str = "bearer"
class TokenData(BaseModel):
user_id: Optional[int] = None
# AIEndpoint schemas
class AIEndpointBase(BaseModel):
name: str
endpoint_type: str # "openai" or "ollama"
base_url: str
api_key: Optional[str] = None
model_name: str
is_active: bool = True
is_default: bool = False
class AIEndpointCreate(AIEndpointBase):
pass
class AIEndpointUpdate(BaseModel):
name: Optional[str] = None
endpoint_type: Optional[str] = None
base_url: Optional[str] = None
api_key: Optional[str] = None
model_name: Optional[str] = None
is_active: Optional[bool] = None
is_default: Optional[bool] = None
class AIEndpointResponse(AIEndpointBase):
id: int
created_at: datetime
class Config:
from_attributes = True
# ChatMessage schemas
class ChatMessageBase(BaseModel):
role: str
content: str
class ChatMessageCreate(ChatMessageBase):
endpoint_id: Optional[int] = None
class ChatMessageResponse(ChatMessageBase):
id: int
user_id: int
endpoint_id: Optional[int]
created_at: datetime
class Config:
from_attributes = True
# UploadedFile schemas
class UploadedFileBase(BaseModel):
original_filename: str
file_type: Optional[str] = None
class UploadedFileResponse(UploadedFileBase):
id: int
user_id: int
filename: str
file_path: str
file_size: int
created_at: datetime
class Config:
from_attributes = True
# Chat schemas
class ChatRequest(BaseModel):
message: str
endpoint_id: Optional[int] = None
file_ids: Optional[List[int]] = None
conversation_history: Optional[List[dict]] = None
class ChatResponse(BaseModel):
response: str
endpoint_used: Optional[str] = None
model_used: Optional[str] = None
# AdminStats schema
class AdminStats(BaseModel):
total_users: int
total_endpoints: int
total_messages: int
active_endpoints: int