118 lines
2.9 KiB
Python
Raw Normal View History

2025-11-09 23:29:07 +01:00
from datetime import datetime
from pydantic import BaseModel, EmailStr
from typing import Optional, List
from tortoise.contrib.pydantic import pydantic_model_creator
class UserCreate(BaseModel):
username: str
email: EmailStr
password: str
class UserLogin(BaseModel):
username: str
password: str
2025-11-10 01:58:41 +01:00
class UserLoginWith2FA(UserLogin):
2025-11-10 15:46:40 +01:00
two_factor_code: Optional[str] = None
2025-11-10 01:58:41 +01:00
class UserAdminUpdate(BaseModel):
username: Optional[str] = None
email: Optional[EmailStr] = None
password: Optional[str] = None
is_active: Optional[bool] = None
is_superuser: Optional[bool] = None
storage_quota_bytes: Optional[int] = None
plan_type: Optional[str] = None
is_2fa_enabled: Optional[bool] = None
2025-11-09 23:29:07 +01:00
class Token(BaseModel):
access_token: str
token_type: str
class TokenData(BaseModel):
username: str | None = None
2025-11-10 01:58:41 +01:00
two_factor_verified: bool = False
2025-11-09 23:29:07 +01:00
class FolderCreate(BaseModel):
name: str
parent_id: Optional[int] = None
class FolderUpdate(BaseModel):
name: Optional[str] = None
parent_id: Optional[int] = None
class ShareCreate(BaseModel):
file_id: Optional[int] = None
folder_id: Optional[int] = None
expires_at: Optional[datetime] = None
password: Optional[str] = None
permission_level: str = "viewer"
2025-11-11 15:06:02 +01:00
invite_email: Optional[EmailStr] = None
2025-11-09 23:29:07 +01:00
class TeamCreate(BaseModel):
name: str
class TeamOut(BaseModel):
id: int
name: str
owner_id: int
created_at: datetime
class Config:
2025-11-10 15:46:40 +01:00
from_attributes = True
2025-11-09 23:29:07 +01:00
class ActivityOut(BaseModel):
id: int
user_id: Optional[int] = None
action: str
target_type: str
target_id: int
ip_address: Optional[str] = None
timestamp: datetime
class Config:
2025-11-10 15:46:40 +01:00
from_attributes = True
2025-11-09 23:29:07 +01:00
class FileRequestCreate(BaseModel):
title: str
description: Optional[str] = None
target_folder_id: int
expires_at: Optional[datetime] = None
class FileRequestOut(BaseModel):
id: int
title: str
description: Optional[str] = None
token: str
owner_id: int
target_folder_id: int
created_at: datetime
expires_at: Optional[datetime] = None
is_active: bool
class Config:
2025-11-10 15:46:40 +01:00
from_attributes = True
2025-11-09 23:29:07 +01:00
from rbox.models import Folder, File, Share, FileVersion
FolderOut = pydantic_model_creator(Folder, name="FolderOut")
FileOut = pydantic_model_creator(File, name="FileOut")
ShareOut = pydantic_model_creator(Share, name="ShareOut")
FileVersionOut = pydantic_model_creator(FileVersion, name="FileVersionOut")
2025-11-10 01:58:41 +01:00
class ErrorResponse(BaseModel):
code: int
message: str
details: Optional[str] = None
class BatchFileOperation(BaseModel):
file_ids: List[int]
operation: str # e.g., "delete", "move", "copy", "star", "unstar"
class BatchFolderOperation(BaseModel):
folder_ids: List[int]
operation: str # e.g., "delete", "move", "star", "unstar"
class BatchMoveCopyPayload(BaseModel):
target_folder_id: Optional[int] = None