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
|