11from typing import Annotated , Any , cast
2+
23from fastapi import APIRouter , Depends , Request
34from fastcrud import PaginatedListResponse , compute_offset , paginated_response
45from sqlalchemy .ext .asyncio import AsyncSession
@@ -22,28 +23,30 @@ async def write_post(
2223 post : PostCreate ,
2324 current_user : Annotated [dict , Depends (get_current_user )],
2425 db : Annotated [AsyncSession , Depends (async_get_db )],
25- ) -> PostRead :
26- db_user = await crud_users .get (
27- db = db , username = username , is_deleted = False , schema_to_select = UserRead , return_as_model = True
28- )
26+ ) -> dict [str , Any ]:
27+ db_user = await crud_users .get (db = db , username = username , is_deleted = False , schema_to_select = UserRead )
2928 if db_user is None :
3029 raise NotFoundException ("User not found" )
3130
32- db_user = cast (UserRead , db_user )
33- if current_user ["id" ] != db_user .id :
31+ db_user = cast (dict [str , Any ], db_user )
32+
33+ if current_user ["id" ] != db_user ["id" ]:
3434 raise ForbiddenException ()
3535
3636 post_internal_dict = post .model_dump ()
37- post_internal_dict ["created_by_user_id" ] = db_user . id
37+ post_internal_dict ["created_by_user_id" ] = db_user [ "id" ]
3838
3939 post_internal = PostCreateInternal (** post_internal_dict )
4040 created_post = await crud_posts .create (db = db , object = post_internal )
4141
42- post_read = await crud_posts .get (db = db , id = created_post .id , schema_to_select = PostRead )
42+ if created_post is None :
43+ raise NotFoundException ("Failed to create post" )
44+
45+ post_read = await crud_posts .get (db = db , id = created_post ["id" ], schema_to_select = PostRead )
4346 if post_read is None :
4447 raise NotFoundException ("Created post not found" )
4548
46- return cast (PostRead , post_read )
49+ return cast (dict [ str , Any ] , post_read )
4750
4851
4952@router .get ("/{username}/posts" , response_model = PaginatedListResponse [PostRead ])
@@ -59,22 +62,16 @@ async def read_posts(
5962 page : int = 1 ,
6063 items_per_page : int = 10 ,
6164) -> dict :
62- db_user = await crud_users .get (
63- db = db ,
64- username = username ,
65- is_deleted = False ,
66- schema_to_select = UserRead ,
67- return_as_model = True
68- )
65+ db_user = await crud_users .get (db = db , username = username , is_deleted = False , schema_to_select = UserRead )
6966 if not db_user :
7067 raise NotFoundException ("User not found" )
7168
72- db_user = cast (UserRead , db_user )
69+ db_user = cast (dict [ str , Any ] , db_user )
7370 posts_data = await crud_posts .get_multi (
7471 db = db ,
7572 offset = compute_offset (page , items_per_page ),
7673 limit = items_per_page ,
77- created_by_user_id = db_user . id ,
74+ created_by_user_id = db_user [ "id" ] ,
7875 is_deleted = False ,
7976 )
8077
@@ -86,25 +83,20 @@ async def read_posts(
8683@cache (key_prefix = "{username}_post_cache" , resource_id_name = "id" )
8784async def read_post (
8885 request : Request , username : str , id : int , db : Annotated [AsyncSession , Depends (async_get_db )]
89- ) -> PostRead :
90- db_user = await crud_users .get (
91- db = db ,
92- username = username ,
93- is_deleted = False ,
94- schema_to_select = UserRead ,
95- return_as_model = True
96- )
86+ ) -> dict [str , Any ]:
87+ db_user = await crud_users .get (db = db , username = username , is_deleted = False , schema_to_select = UserRead )
9788 if db_user is None :
9889 raise NotFoundException ("User not found" )
9990
100- db_user = cast (UserRead , db_user )
91+ db_user = cast (dict [str , Any ], db_user )
92+
10193 db_post = await crud_posts .get (
102- db = db , id = id , created_by_user_id = db_user . id , is_deleted = False , schema_to_select = PostRead
94+ db = db , id = id , created_by_user_id = db_user [ "id" ] , is_deleted = False , schema_to_select = PostRead
10395 )
10496 if db_post is None :
10597 raise NotFoundException ("Post not found" )
10698
107- return cast (PostRead , db_post )
99+ return cast (dict [ str , Any ] , db_post )
108100
109101
110102@router .patch ("/{username}/post/{id}" )
@@ -117,24 +109,21 @@ async def patch_post(
117109 current_user : Annotated [dict , Depends (get_current_user )],
118110 db : Annotated [AsyncSession , Depends (async_get_db )],
119111) -> dict [str , str ]:
120- db_user = await crud_users .get (
121- db = db ,
122- username = username ,
123- is_deleted = False ,
124- schema_to_select = UserRead ,
125- return_as_model = True
126- )
112+ db_user = await crud_users .get (db = db , username = username , is_deleted = False , schema_to_select = UserRead )
127113 if db_user is None :
128114 raise NotFoundException ("User not found" )
129115
130- db_user = cast (UserRead , db_user )
131- if current_user ["id" ] != db_user .id :
116+ db_user = cast (dict [str , Any ], db_user )
117+
118+ if current_user ["id" ] != db_user ["id" ]:
132119 raise ForbiddenException ()
133120
134121 db_post = await crud_posts .get (db = db , id = id , is_deleted = False , schema_to_select = PostRead )
135122 if db_post is None :
136123 raise NotFoundException ("Post not found" )
137124
125+ db_post = cast (dict [str , Any ], db_post )
126+
138127 await crud_posts .update (db = db , object = values , id = id )
139128 return {"message" : "Post updated" }
140129
@@ -148,24 +137,21 @@ async def erase_post(
148137 current_user : Annotated [dict , Depends (get_current_user )],
149138 db : Annotated [AsyncSession , Depends (async_get_db )],
150139) -> dict [str , str ]:
151- db_user = await crud_users .get (
152- db = db ,
153- username = username ,
154- is_deleted = False ,
155- schema_to_select = UserRead ,
156- return_as_model = True
157- )
140+ db_user = await crud_users .get (db = db , username = username , is_deleted = False , schema_to_select = UserRead )
158141 if db_user is None :
159142 raise NotFoundException ("User not found" )
160143
161- db_user = cast (UserRead , db_user )
162- if current_user ["id" ] != db_user .id :
144+ db_user = cast (dict [str , Any ], db_user )
145+
146+ if current_user ["id" ] != db_user ["id" ]:
163147 raise ForbiddenException ()
164148
165149 db_post = await crud_posts .get (db = db , id = id , is_deleted = False , schema_to_select = PostRead )
166150 if db_post is None :
167151 raise NotFoundException ("Post not found" )
168152
153+ db_post = cast (dict [str , Any ], db_post )
154+
169155 await crud_posts .delete (db = db , id = id )
170156
171157 return {"message" : "Post deleted" }
@@ -176,19 +162,17 @@ async def erase_post(
176162async def erase_db_post (
177163 request : Request , username : str , id : int , db : Annotated [AsyncSession , Depends (async_get_db )]
178164) -> dict [str , str ]:
179- db_user = await crud_users .get (
180- db = db ,
181- username = username ,
182- is_deleted = False ,
183- schema_to_select = UserRead ,
184- return_as_model = True
185- )
165+ db_user = await crud_users .get (db = db , username = username , is_deleted = False , schema_to_select = UserRead )
186166 if db_user is None :
187167 raise NotFoundException ("User not found" )
188168
169+ db_user = cast (dict [str , Any ], db_user )
170+
189171 db_post = await crud_posts .get (db = db , id = id , is_deleted = False , schema_to_select = PostRead )
190172 if db_post is None :
191173 raise NotFoundException ("Post not found" )
192174
175+ db_post = cast (dict [str , Any ], db_post )
176+
193177 await crud_posts .db_delete (db = db , id = id )
194- return {"message" : "Post deleted from the database" }
178+ return {"message" : "Post deleted from the database" }
0 commit comments