-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschemas.py
More file actions
116 lines (78 loc) · 1.95 KB
/
schemas.py
File metadata and controls
116 lines (78 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from pydantic import BaseModel, EmailStr
from typing import Optional, List
from datetime import datetime
# User Schemas
class UserBase(BaseModel):
username: str
email: EmailStr
full_name: Optional[str] = None
bio: Optional[str] = None
class UserCreate(UserBase):
password: str
class UserUpdate(BaseModel):
full_name: Optional[str] = None
bio: Optional[str] = None
class UserResponse(UserBase):
id: int
created_at: datetime
is_active: bool
class Config:
from_attributes = True
class UserWithStats(UserResponse):
followers_count: int
following_count: int
posts_count: int
# Post Schemas
class PostBase(BaseModel):
title: str
content: str
image_url: Optional[str] = None
published: bool = True
class PostCreate(PostBase):
pass
class PostUpdate(BaseModel):
title: Optional[str] = None
content: Optional[str] = None
image_url: Optional[str] = None
published: Optional[bool] = None
class PostResponse(PostBase):
id: int
created_at: datetime
updated_at: datetime
author_id: int
author: UserResponse
likes_count: int
comments_count: int
class Config:
from_attributes = True
# Comment Schemas
class CommentBase(BaseModel):
content: str
class CommentCreate(CommentBase):
post_id: int
class CommentUpdate(BaseModel):
content: str
class CommentResponse(CommentBase):
id: int
created_at: datetime
updated_at: datetime
author_id: int
post_id: int
author: UserResponse
likes_count: int
class Config:
from_attributes = True
# Authentication Schemas
class Token(BaseModel):
access_token: str
token_type: str
class TokenData(BaseModel):
username: Optional[str] = None
class LoginRequest(BaseModel):
username: str
password: str
# Feed Schema
class FeedPost(PostResponse):
is_liked_by_user: bool
class Config:
from_attributes = True