fix: improve friendships schemas type safety and consistency
This commit is contained in:
@@ -1,38 +1,42 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Optional
|
from typing import ClassVar, Literal
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, ConfigDict, Field
|
||||||
|
|
||||||
|
|
||||||
class UserBasicInfo(BaseModel):
|
class UserBasicInfo(BaseModel):
|
||||||
id: str
|
id: str
|
||||||
username: str
|
username: str
|
||||||
avatar_url: Optional[str] = None
|
avatar_url: str | None = None
|
||||||
|
|
||||||
|
|
||||||
class FriendRequestCreate(BaseModel):
|
class FriendRequestCreate(BaseModel):
|
||||||
|
model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid")
|
||||||
|
|
||||||
target_user_id: UUID
|
target_user_id: UUID
|
||||||
content: Optional[str] = Field(None, max_length=200)
|
content: str | None = Field(None, max_length=200)
|
||||||
|
|
||||||
|
|
||||||
class FriendRequestResponse(BaseModel):
|
class FriendRequestResponse(BaseModel):
|
||||||
id: UUID
|
id: UUID
|
||||||
sender: UserBasicInfo
|
sender: UserBasicInfo
|
||||||
recipient: UserBasicInfo
|
recipient: UserBasicInfo
|
||||||
content: Optional[str]
|
content: str | None
|
||||||
status: str
|
status: Literal["pending", "accepted", "rejected"]
|
||||||
created_at: datetime
|
created_at: datetime
|
||||||
|
|
||||||
|
|
||||||
class FriendResponse(BaseModel):
|
class FriendResponse(BaseModel):
|
||||||
id: UUID
|
id: UUID
|
||||||
friend: UserBasicInfo
|
friend: UserBasicInfo
|
||||||
status: str
|
status: Literal["active"]
|
||||||
created_at: datetime
|
created_at: datetime
|
||||||
accepted_at: Optional[datetime]
|
accepted_at: datetime | None
|
||||||
|
|
||||||
|
|
||||||
class FriendRequestAction(BaseModel):
|
class FriendRequestAction(BaseModel):
|
||||||
|
model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid")
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user