feat(api): add Pydantic schemas

This commit is contained in:
bwstudio
2026-05-21 20:45:41 +08:00
parent 16baff934a
commit 29e06517cb
12 changed files with 120 additions and 1 deletions
+2 -1
View File
@@ -5,7 +5,8 @@
"Skill(writing-plans)",
"Skill(subagent-driven-development)",
"Bash(git add *)",
"Bash(git commit *)"
"Bash(git commit *)",
"Bash(python -c \"from app.models import Joke, JokeType, JokeCrowd, AdminUser; print\\('All models imported successfully'\\)\")"
]
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+29
View File
@@ -0,0 +1,29 @@
from .auth import LoginRequest, TokenResponse
from .category import (
JokeCrowdCreate,
JokeCrowdResponse,
JokeTypeCreate,
JokeTypeResponse,
)
from .joke import (
JokeCreate,
JokeResponse,
JokeUpdate,
PaginatedJokeResponse,
)
__all__ = [
"JokeBase",
"JokeCreate",
"JokeUpdate",
"JokeResponse",
"PaginatedJokeResponse",
"JokeTypeBase",
"JokeTypeCreate",
"JokeTypeResponse",
"JokeCrowdBase",
"JokeCrowdCreate",
"JokeCrowdResponse",
"LoginRequest",
"TokenResponse",
]
+11
View File
@@ -0,0 +1,11 @@
from pydantic import BaseModel
class LoginRequest(BaseModel):
username: str
password: str
class TokenResponse(BaseModel):
access_token: str
token_type: str = "bearer"
+35
View File
@@ -0,0 +1,35 @@
from pydantic import BaseModel
class JokeTypeBase(BaseModel):
name: str
icon: str | None = None
sort_order: int = 0
class JokeTypeCreate(JokeTypeBase):
pass
class JokeTypeResponse(JokeTypeBase):
id: int
class Config:
from_attributes = True
class JokeCrowdBase(BaseModel):
name: str
icon: str | None = None
sort_order: int = 0
class JokeCrowdCreate(JokeCrowdBase):
pass
class JokeCrowdResponse(JokeCrowdBase):
id: int
class Config:
from_attributes = True
+43
View File
@@ -0,0 +1,43 @@
from datetime import datetime
from pydantic import BaseModel
class JokeBase(BaseModel):
title: str
content: str
type_id: int | None = None
crowd_id: int | None = None
class JokeCreate(JokeBase):
pass
class JokeUpdate(BaseModel):
title: str | None = None
content: str | None = None
type_id: int | None = None
crowd_id: int | None = None
status: str | None = None
class JokeResponse(JokeBase):
id: int
status: str
view_count: int
like_count: int
created_at: datetime
updated_at: datetime
type_name: str | None = None
crowd_name: str | None = None
class Config:
from_attributes = True
class PaginatedJokeResponse(BaseModel):
items: list[JokeResponse]
total: int
page: int
page_size: int