133 lines
3.0 KiB
Python
Raw Normal View History

2025-11-09 23:29:07 +01:00
from datetime import datetime
2025-11-13 23:05:26 +01:00
from pydantic import BaseModel, EmailStr, ConfigDict
2025-11-09 23:29:07 +01:00
from typing import Optional, List
from tortoise.contrib.pydantic import pydantic_model_creator
2025-11-13 23:22:05 +01:00
from mywebdav.models import Folder, File, Share, FileVersion
2025-11-09 23:29:07 +01:00
class UserCreate(BaseModel):
username: str
email: EmailStr
password: str
2025-11-13 23:22:05 +01:00
2025-11-09 23:29:07 +01:00
class UserLogin(BaseModel):
username: str
password: str
2025-11-13 23:22:05 +01:00
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
2025-11-13 23:22:05 +01:00
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-13 23:22:05 +01:00
2025-11-09 23:29:07 +01:00
class Token(BaseModel):
access_token: str
token_type: str
2025-11-13 23:22:05 +01:00
2025-11-09 23:29:07 +01:00
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
2025-11-13 23:22:05 +01:00
2025-11-09 23:29:07 +01:00
class FolderCreate(BaseModel):
name: str
parent_id: Optional[int] = None
2025-11-13 23:22:05 +01:00
2025-11-09 23:29:07 +01:00
class FolderUpdate(BaseModel):
name: Optional[str] = None
parent_id: Optional[int] = None
2025-11-13 23:22:05 +01:00
2025-11-09 23:29:07 +01:00
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
2025-11-13 23:22:05 +01:00
2025-11-09 23:29:07 +01:00
class TeamCreate(BaseModel):
name: str
2025-11-13 23:22:05 +01:00
2025-11-09 23:29:07 +01:00
class TeamOut(BaseModel):
id: int
name: str
owner_id: int
created_at: datetime
2025-11-13 23:05:26 +01:00
model_config = ConfigDict(from_attributes=True)
2025-11-09 23:29:07 +01:00
2025-11-13 23:22:05 +01:00
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
2025-11-13 23:05:26 +01:00
model_config = ConfigDict(from_attributes=True)
2025-11-09 23:29:07 +01:00
2025-11-13 23:22:05 +01:00
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
2025-11-13 23:22:05 +01:00
2025-11-09 23:29:07 +01:00
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
2025-11-13 23:05:26 +01:00
model_config = ConfigDict(from_attributes=True)
2025-11-09 23:29:07 +01:00
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
2025-11-13 23:22:05 +01:00
2025-11-10 01:58:41 +01:00
class ErrorResponse(BaseModel):
code: int
message: str
details: Optional[str] = None
2025-11-13 23:22:05 +01:00
2025-11-10 01:58:41 +01:00
class BatchFileOperation(BaseModel):
file_ids: List[int]
2025-11-13 23:22:05 +01:00
operation: str # e.g., "delete", "move", "copy", "star", "unstar"
2025-11-10 01:58:41 +01:00
class BatchFolderOperation(BaseModel):
folder_ids: List[int]
2025-11-13 23:22:05 +01:00
operation: str # e.g., "delete", "move", "star", "unstar"
2025-11-10 01:58:41 +01:00
class BatchMoveCopyPayload(BaseModel):
target_folder_id: Optional[int] = None