Files
FastapiAdmin/backend/app/api/v1/module_resource/resource/schema.py
T
zhangtao 4df6241e8b refactor(api): 统一更新接口使用路径参数传递ID
refactor(backend): 重构CRUD基类查询方法去除重复结果

feat(application): 新增应用系统模块基础结构

fix(backend): 修复多处日志记录ID变量名错误

style(backend): 清理无用代码和注释

fix(frontend): 修复用户导入功能参数错误

docs(backend): 更新环境配置示例注释

perf(backend): 优化导出功能数据处理逻辑

test(frontend): 添加任务日志功能开发中提示

chore: 更新角色菜单权限数据
2025-09-05 01:00:38 +08:00

127 lines
5.2 KiB
Python

# -*- coding: utf-8 -*-
from typing import Optional, List, Dict, Any
from datetime import datetime
from pydantic import BaseModel, ConfigDict, Field, field_validator
from pathlib import Path
from enum import Enum
class ResourceType(Enum):
"""资源类型枚举"""
IMAGE = "image" # 图片
VIDEO = "video" # 视频
AUDIO = "audio" # 音频
DOCUMENT = "document" # 文档
ARCHIVE = "archive" # 压缩包
OTHER = "other" # 其他
class ResourceItemSchema(BaseModel):
"""资源项目模型"""
name: str = Field(..., description="文件名")
path: str = Field(..., description="文件路径")
relative_path: str = Field(..., description="相对路径")
is_file: bool = Field(..., description="是否为文件")
is_dir: bool = Field(..., description="是否为目录")
size: Optional[int] = Field(None, description="文件大小(字节)")
file_type: Optional[str] = Field(None, description="文件类型")
file_extension: Optional[str] = Field(None, description="文件扩展名")
resource_type: Optional[ResourceType] = Field(None, description="资源类型")
created_time: Optional[datetime] = Field(None, description="创建时间")
modified_time: Optional[datetime] = Field(None, description="修改时间")
accessed_time: Optional[datetime] = Field(None, description="访问时间")
parent_path: Optional[str] = Field(None, description="父目录路径")
depth: int = Field(0, description="目录深度")
class ResourceDirectorySchema(BaseModel):
"""资源目录模型"""
path: str = Field(..., description="目录路径")
name: str = Field(..., description="目录名称")
items: List[ResourceItemSchema] = Field(default_factory=list, description="目录项")
total_files: int = Field(0, description="文件总数")
total_dirs: int = Field(0, description="目录总数")
total_size: int = Field(0, description="总大小")
class ResourceStatsSchema(BaseModel):
"""资源统计模型"""
mount_point: str = Field(..., description="挂载点")
total_files: int = Field(0, description="文件总数")
total_dirs: int = Field(0, description="目录总数")
total_size: int = Field(0, description="总大小")
free_space: int = Field(0, description="可用空间")
used_space: int = Field(0, description="已用空间")
total_space: int = Field(0, description="总空间")
type_stats: Dict[str, int] = Field(default_factory=dict, description="类型统计")
extension_stats: Dict[str, int] = Field(default_factory=dict, description="扩展名统计")
class ResourceSearchSchema(BaseModel):
"""资源搜索模型"""
keyword: Optional[str] = Field(None, description="关键词")
file_type: Optional[str] = Field(None, description="文件类型")
resource_type: Optional[ResourceType] = Field(None, description="资源类型")
min_size: Optional[int] = Field(None, description="最小文件大小")
max_size: Optional[int] = Field(None, description="最大文件大小")
start_date: Optional[datetime] = Field(None, description="开始日期")
end_date: Optional[datetime] = Field(None, description="结束日期")
extensions: Optional[List[str]] = Field(None, description="文件扩展名列表")
include_hidden: bool = Field(False, description="包含隐藏文件")
max_depth: int = Field(10, description="最大搜索深度")
class ResourceUploadSchema(BaseModel):
"""资源上传响应模型"""
filename: str = Field(..., description="文件名")
file_path: str = Field(..., description="文件路径")
file_url: str = Field(..., description="访问URL")
file_size: int = Field(..., description="文件大小")
resource_type: ResourceType = Field(..., description="资源类型")
upload_time: datetime = Field(..., description="上传时间")
class ResourceMoveSchema(BaseModel):
"""资源移动模型"""
source_path: str = Field(..., description="源路径")
target_path: str = Field(..., description="目标路径")
overwrite: bool = Field(False, description="是否覆盖")
@field_validator('source_path', 'target_path')
@classmethod
def validate_paths(cls, value: str):
if not value or len(value.strip()) == 0:
raise ValueError("路径不能为空")
return value.strip()
class ResourceCopySchema(ResourceMoveSchema):
"""资源复制模型"""
pass
class ResourceRenameSchema(BaseModel):
"""资源重命名模型"""
old_path: str = Field(..., description="原路径")
new_name: str = Field(..., description="新名称")
@field_validator('old_path', 'new_name')
@classmethod
def validate_inputs(cls, value: str):
if not value or len(value.strip()) == 0:
raise ValueError("参数不能为空")
return value.strip()
class ResourceCreateDirSchema(BaseModel):
"""创建目录模型"""
parent_path: str = Field(..., description="父目录路径")
dir_name: str = Field(..., description="目录名称")
@field_validator('parent_path', 'dir_name')
@classmethod
def validate_inputs(cls, value: str):
if not value or len(value.strip()) == 0:
raise ValueError("参数不能为空")
return value.strip()