#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ PerToolBox Server - Pydantic 模型 Copyright (C) 2024 Sea Network Technology Studio Author: Canglan License: AGPL v3 """ from pydantic import BaseModel, Field, validator from datetime import datetime from typing import Optional, List, Dict, Any # ========== 用户相关 ========== class SendCodeRequest(BaseModel): account: str # 手机号或邮箱 type: str # phone / email class RegisterRequest(BaseModel): account: str code: str password: str = Field(..., min_length=6, max_length=20) class LoginRequest(BaseModel): account: str password: Optional[str] = None code: Optional[str] = None class UserResponse(BaseModel): id: int username: Optional[str] phone: Optional[str] email: Optional[str] avatar: Optional[str] created_at: datetime class Config: from_attributes = True class UserUpdateRequest(BaseModel): username: Optional[str] = None avatar: Optional[str] = None # ========== 待办事项 ========== class TodoBase(BaseModel): title: str = Field(..., min_length=1, max_length=200) description: Optional[str] = None completed: bool = False priority: int = Field(1, ge=1, le=3) category: str = Field("学习", max_length=50) due_date: Optional[datetime] = None class TodoCreate(TodoBase): pass class TodoUpdate(BaseModel): title: Optional[str] = None description: Optional[str] = None completed: Optional[bool] = None priority: Optional[int] = None category: Optional[str] = None due_date: Optional[datetime] = None class TodoResponse(TodoBase): id: int created_at: datetime updated_at: Optional[datetime] class Config: from_attributes = True # ========== 便签 ========== class NoteBase(BaseModel): title: str = Field(..., min_length=1, max_length=200) content: Optional[str] = None tags: List[str] = [] is_archived: bool = False class NoteCreate(NoteBase): pass class NoteUpdate(BaseModel): title: Optional[str] = None content: Optional[str] = None tags: Optional[List[str]] = None is_archived: Optional[bool] = None class NoteResponse(NoteBase): id: int created_at: datetime updated_at: Optional[datetime] class Config: from_attributes = True # ========== 加密工具 ========== class HashRequest(BaseModel): algorithm: str # md5, sha1, sha256, sha512 text: str class Base64Request(BaseModel): action: str # encode / decode text: str class URLRequest(BaseModel): action: str # encode / decode text: str class AESRequest(BaseModel): mode: str = "ECB" # ECB, CBC, GCM action: str # encrypt / decrypt key: str iv: Optional[str] = None text: str # ========== JSON 校验 ========== class JSONValidateRequest(BaseModel): json_string: str class JSONValidateResponse(BaseModel): valid: bool formatted: Optional[str] = None error: Optional[Dict[str, Any]] = None # ========== 热度统计 ========== class ToolStatsResponse(BaseModel): today: int total: int class ToolUsageRequest(BaseModel): tool_name: str