from pydantic import BaseModel,Field from typing import Annotated from decimal import Decimal # Token相关的模型 class Token(BaseModel): access_token: str token_type: str class TokenData(BaseModel): username: str = None # User相关的模型 class User(BaseModel): username: Annotated[str,Field( title="用户", examples=["admin"], pattern=r'^.{4,20}$', description="允许4-20的字符" )] email: Annotated[str,Field( examples=["examples@example.com"], max_length=50, pattern=r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$', description="邮箱需要满足正则标准" )] full_name: Annotated[str,Field( examples=["admin"], pattern=r'^.{2,20}$', description="允许2-20个字符" )] disabled: bool = True class UserInDB(User): hashed_password: str = None class Label(BaseModel): labelname:Annotated[str,Field( title="标签名称", description="名称不允许为空" )] descr:Annotated[str,Field( title="备注", default=None, description="备注允许为空" )] class MoreLable(Label): id:Annotated[int,Field( title="标签id", description="主键自增" )] labelname:Annotated[str,Field( title="标签名称", description="名称不允许为空" )] descr:Annotated[str,Field( title="备注", default=None, description="备注允许为空" )] class Blog(BaseModel): blogtitle:Annotated[str,Field( title="博客标题", pattern=r'^.{4,20}$', examples=[""], description="允许6-20个字符" )] blogcontent:Annotated[str,Field( title="博客内容", min_length=1, description="最少1个字符" )] imglink:Annotated[str,Field( title="文图地址", )] typeid:Annotated[int,Field( title="类型id", default=None, description="类型id允许为空" )] descr:Annotated[str,Field( title="备注", default=None, description="备注允许为空" )] class Diary(BaseModel): diarytitle:Annotated[str,Field( title="日记标题", pattern=r'^.{4,20}$', examples=[""], description="允许6-20个字符" )] diarycontent:Annotated[str,Field( title="日记内容", min_length=1, description="最少1个字符" )] imglink:Annotated[str,Field( title="文图地址", )] typeid:Annotated[int,Field( title="类型id", default=None, description="类型id允许为空" )] descr:Annotated[str,Field( title="备注", default=None, description="备注允许为空" )] class Classtic(BaseModel): header:Annotated[str,Field( title="语录名称", description="语录名称不允许为空" )] text:Annotated[str,Field( title="语录内容", description="语录内容不允许为空" )] descr:Annotated[str,Field( title="备注", default=None, description="备注允许为空" )] class Comment(BaseModel): parent_id:Annotated[int,Field( title="父级评论id", description="父级评论允许为空" )]=None blog_id:Annotated[int,Field( title="博客id", description="博客id允许为空" )] commentname:Annotated[str,Field( title="评论用户", description="评论用户不允许为空" )] email:Annotated[str,Field( title="评论用户邮箱", description="评论用户邮箱不允许为空" )] commenturl:Annotated[str,Field( title="评论地址", description="评论地址不允许为空" )] commentcontent:Annotated[str,Field( title="评论内容", description="评论内容不允许为空" )] class ComLink(BaseModel): linktext:Annotated[str,Field( title="链接名称", description="名称不允许为空" )] linkurl:Annotated[str,Field( title="链接地址", description="地址不允许为空" )] descr:Annotated[str,Field( title="备注", default=None, description="备注允许为空" )] class Type(BaseModel): typename:Annotated[str,Field( title="类型名称", description="名称不允许为空" )] descr:Annotated[str,Field( title="备注", default=None, description="备注允许为空" )] class Expense(BaseModel): pay_price:Annotated[Decimal,Field( title="支出", default=0.00, description="支出不允许为空" )] live_price:Annotated[Decimal,Field( title="收入", default=0.00, description="收入不允许为空" )] typeid:Annotated[int,Field( title="类型id", default=None, description="类型id允许为空" )] descr:Annotated[str,Field( title="备注", default=None, description="备注允许为空" )]