57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
"""
|
||
用户页面编辑相关的API模型
|
||
"""
|
||
|
||
from pydantic import BaseModel, Field, field_validator
|
||
|
||
|
||
class UpdateUserpageRequest(BaseModel):
|
||
"""更新用户页面请求模型(匹配官方osu-web格式)"""
|
||
|
||
body: str = Field(
|
||
description="用户页面的BBCode原始内容",
|
||
max_length=60000,
|
||
examples=["[b]Hello![/b] This is my profile page.\n[color=blue]Blue text[/color]"],
|
||
)
|
||
|
||
@field_validator("body")
|
||
@classmethod
|
||
def validate_body_content(cls, v: str) -> str:
|
||
"""验证原始内容"""
|
||
if not v.strip():
|
||
return ""
|
||
|
||
# 基本长度验证
|
||
if len(v) > 60000:
|
||
msg = "Content too long. Maximum 60000 characters allowed."
|
||
raise ValueError(msg)
|
||
|
||
return v
|
||
|
||
|
||
class UpdateUserpageResponse(BaseModel):
|
||
"""更新用户页面响应模型(匹配官方osu-web格式)"""
|
||
|
||
html: str = Field(description="处理后的HTML内容")
|
||
|
||
|
||
class UserpageResponse(BaseModel):
|
||
"""用户页面响应模型(包含html和raw,匹配官方格式)"""
|
||
|
||
html: str = Field(description="处理后的HTML内容")
|
||
raw: str = Field(description="原始BBCode内容")
|
||
|
||
|
||
class ValidateBBCodeRequest(BaseModel):
|
||
"""验证BBCode请求模型"""
|
||
|
||
content: str = Field(description="要验证的BBCode内容", max_length=60000)
|
||
|
||
|
||
class ValidateBBCodeResponse(BaseModel):
|
||
"""验证BBCode响应模型"""
|
||
|
||
valid: bool = Field(description="BBCode是否有效")
|
||
errors: list[str] = Field(default_factory=list, description="错误列表")
|
||
preview: dict[str, str] = Field(description="预览内容")
|