55from fastapi import Request
66import fastapi
77
8- from app .schemas .user import UserCreate , UserCreateInternal , UserUpdate , UserRead , UserTierUpdate
98from app .api .dependencies import get_current_user , get_current_superuser
9+ from app .api .exceptions import privileges_exception
10+ from app .api .paginated import PaginatedListResponse , paginated_response , compute_offset
1011from app .core .database import async_get_db
1112from app .core .security import get_password_hash
1213from app .crud .crud_users import crud_users
1314from app .crud .crud_tier import crud_tiers
1415from app .crud .crud_rate_limit import crud_rate_limits
15- from app .api .exceptions import privileges_exception
16- from app .api .paginated import PaginatedListResponse , paginated_response , compute_offset
16+ from app .models .tier import Tier
17+ from app .schemas .user import UserCreate , UserCreateInternal , UserUpdate , UserRead , UserTierUpdate
18+ from app .schemas .tier import TierRead
1719
1820router = fastapi .APIRouter (tags = ["users" ])
1921
@@ -166,6 +168,32 @@ async def read_user_rate_limits(
166168 return db_user
167169
168170
171+ @router .get ("/user/{username}/tier" )
172+ async def read_user_tier (
173+ request : Request ,
174+ username : str ,
175+ db : Annotated [AsyncSession , Depends (async_get_db )]
176+ ):
177+ db_user = await crud_users .get (db = db , username = username , schema_to_select = UserRead )
178+ if db_user is None :
179+ raise HTTPException (status_code = 404 , detail = "User not found" )
180+
181+ db_tier = await crud_tiers .exists (db = db , id = db_user ["tier_id" ])
182+ if not db_tier :
183+ raise HTTPException (status_code = 404 , detail = "Tier not found" )
184+
185+ joined = await crud_users .get_joined (
186+ db = db ,
187+ join_model = Tier ,
188+ join_prefix = "tier_" ,
189+ schema_to_select = UserRead ,
190+ join_schema_to_select = TierRead ,
191+ username = username
192+ )
193+
194+ return joined
195+
196+
169197@router .patch ("/user/{username}/tier" , dependencies = [Depends (get_current_superuser )])
170198async def patch_user_tier (
171199 request : Request ,
@@ -180,6 +208,6 @@ async def patch_user_tier(
180208 db_tier = await crud_tiers .get (db = db , id = values .tier_id )
181209 if db_tier is None :
182210 raise HTTPException (status_code = 404 , detail = "Tier not found" )
183-
211+
184212 await crud_users .update (db = db , object = values , username = username )
185213 return {"message" : f"User { db_user ['name' ]} Tier updated" }
0 commit comments