Files
NovalRedot/backend/app/schemas.py

106 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from datetime import datetime
from pydantic import BaseModel, Field
class NovelCreate(BaseModel):
title: str = Field(min_length=1, max_length=200)
description: str = Field(default="", max_length=2000)
class NovelUpdate(BaseModel):
title: str | None = Field(default=None, min_length=1, max_length=200)
description: str | None = Field(default=None, max_length=2000)
class NovelRead(BaseModel):
id: int
title: str
description: str
created_at: datetime
updated_at: datetime
class NovelList(BaseModel):
items: list[NovelRead]
total: int
# ── 大纲 ──
class OutlineCreate(BaseModel):
summary: str = Field(min_length=1, max_length=200)
detail: str = Field(default="", max_length=1000)
class OutlineUpdate(BaseModel):
summary: str | None = Field(default=None, min_length=1, max_length=200)
detail: str | None = Field(default=None, max_length=1000)
sort_order: int | None = None
class OutlineRead(BaseModel):
id: int
novel_id: int
sort_order: int
summary: str
detail: str
created_at: datetime
updated_at: datetime
class OutlineList(BaseModel):
items: list[OutlineRead]
total: int
class OutlineReorder(BaseModel):
"""排序请求按顺序传入大纲id列表"""
ordered_ids: list[int]
# ── AI配置 ──
class AIConfigSave(BaseModel):
provider: str = Field(default="openai")
base_url: str = Field(default="https://api.openai.com/v1")
api_key: str = Field(min_length=1)
model: str = Field(default="gpt-4o")
class AIConfigRead(BaseModel):
id: int
provider: str
base_url: str
api_key_masked: str # 脱敏后的key
model: str
updated_at: datetime
# ── 聊天 ──
class ChatMessageInput(BaseModel):
role: str
content: str
class ChatRequest(BaseModel):
messages: list[ChatMessageInput]
novel_id: int | None = None
class ChatMessageRead(BaseModel):
id: int
novel_id: int | None
role: str
content: str
created_at: datetime
class ChatMessageList(BaseModel):
items: list[ChatMessageRead]
total: int