v1.0.0提交
This commit is contained in:
131
backend/schemas.py
Normal file
131
backend/schemas.py
Normal file
@@ -0,0 +1,131 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
PerToolBox Server - Pydantic 模型
|
||||
Copyright (C) 2024 Sea Network Technology Studio
|
||||
Author: Canglan <admin@sea-studio.top>
|
||||
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
|
||||
Reference in New Issue
Block a user