routers.users
Endpoints for users.
1"""Endpoints for users.""" 2 3from fastapi import APIRouter, HTTPException, Response, UploadFile, status 4from internal.auth.middleware import BearerAuthDep 5from internal.auth.security import UpdatePasswordForm, update_pw 6from internal.block.management import block_management 7from internal.database.dependency import database_dependency 8from internal.queries.admin_issue_reports import ( 9 AsyncQuerier as AdminIssueReportsQuerier, 10) 11from internal.queries.admin_issue_reports import CreateAdminIssueReportParams 12from internal.queries.inbox import AsyncQuerier as InboxQuerier 13from internal.queries.inbox import CreateInboxMessageParams 14from internal.queries.models import ( 15 AdminIssueReport, 16 AdminIssueType, 17 Inbox, 18 SellerIssueReport, 19 SellerIssueType, 20 UserRole, 21) 22from internal.queries.reservations import AsyncQuerier as ReservationsQuerier 23from internal.queries.seller_issue_reports import ( 24 AsyncQuerier as SellerIssueReportsQuerier, 25) 26from internal.queries.seller_issue_reports import CreateSellerIssueReportParams 27from internal.queries.user import AsyncQuerier as UserQuerier 28from internal.queries.user import UpdateUserEmailParams 29from pydantic import BaseModel, EmailStr 30 31router = APIRouter(prefix="/users", tags=["users"]) 32 33 34class SendMessageForm(BaseModel): 35 """Form to send a new message.""" 36 37 user_id: int 38 message_subject: str 39 message_text: str 40 41 42@router.patch( 43 "/me/password", 44 status_code=status.HTTP_202_ACCEPTED, 45 summary="Update password", 46 description="Updates the password for the authenticated user.", 47) 48async def update_password( 49 form: UpdatePasswordForm, conn: database_dependency, session: BearerAuthDep 50) -> None: 51 """Update users password. 52 53 Args: 54 form: form for password change 55 conn: database connection 56 session: users session 57 """ 58 await update_pw(session.email, form, conn) 59 60 61@router.patch( 62 "/me/email", 63 status_code=status.HTTP_202_ACCEPTED, 64 summary="Update email", 65 description="Updates the email address for the authenticated user.", 66) 67async def update_email( 68 email: EmailStr, conn: database_dependency, session: BearerAuthDep 69) -> None: 70 """Update users email. 71 72 Args: 73 email: new users email 74 conn: database connection 75 session: users session 76 77 Raises: 78 HTTPException: failed to update user email 79 """ 80 user = await UserQuerier(conn).update_user_email( 81 UpdateUserEmailParams(user_id=session.user_id, email=email) 82 ) 83 if not user: 84 raise HTTPException( 85 status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, 86 detail="Failed to update users email", 87 ) 88 89 90@router.get( 91 "/me/inbox", 92 status_code=status.HTTP_200_OK, 93 summary="Get user inbox", 94 description="Gets all inbox messages for the authenticated user.", 95 response_model=list[Inbox], 96) 97async def get_inbox(conn: database_dependency, session: BearerAuthDep) -> list[Inbox]: 98 """Get inbox for user. 99 100 Args: 101 conn: database connection 102 session: users session 103 104 Returns: 105 A list of inbox messages. 106 """ 107 return [ 108 msg async for msg in InboxQuerier(conn).get_user_inbox(user_id=session.user_id) 109 ] 110 111 112@router.post( 113 "/me/inbox", 114 status_code=status.HTTP_201_CREATED, 115 summary="Send an inbox message", 116 description="Sends a new message to a user.", 117 response_model=Inbox, 118) 119async def send_message( 120 form: SendMessageForm, conn: database_dependency, session: BearerAuthDep 121) -> Inbox: 122 """Send a message. 123 124 Args: 125 form: The message form 126 conn: database connection 127 session: users session 128 129 Returns: 130 The created message. 131 132 Raises: 133 HTTPException: if message sending fails 134 """ 135 message = await InboxQuerier(conn).create_inbox_message( 136 CreateInboxMessageParams( 137 user_id=form.user_id, 138 sender_id=session.user_id, 139 message_subject=form.message_subject, 140 message_text=form.message_text, 141 ) 142 ) 143 if not message: 144 raise HTTPException( 145 status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, 146 detail="Failed to send message", 147 ) 148 return message 149 150 151@router.get( 152 path="/id/{username}", 153 summary="Get user ID by username", 154 description="Retrieves a user ID and role by their username.", 155) 156async def get_user_id(username: str, conn: database_dependency) -> tuple[int, UserRole]: 157 """Get user id from username. 158 159 Args: 160 username: username 161 conn: database connection 162 163 Returns: 164 user id and role 165 166 Raises: 167 HTTPException: if failed to find user 168 """ 169 if (user := await UserQuerier(conn).get_user_id(username=username)) is None: 170 raise HTTPException(status.HTTP_404_NOT_FOUND, "failed to find user") 171 return (user.user_id, user.role) 172 173 174@router.patch( 175 path="/me/image", 176 status_code=status.HTTP_202_ACCEPTED, 177 summary="Change profile image", 178 description="Updates the profile image for the authenticated user.", 179) 180async def change_profile_image(file: UploadFile, session: BearerAuthDep) -> None: 181 """Change user profile image. 182 183 Args: 184 file: profile image 185 session: user session 186 """ 187 await block_management.upload_profile_image(session.user_id, file) 188 189 190@router.get( 191 path="/me/image", 192 status_code=status.HTTP_200_OK, 193 summary="Get own profile image", 194 description="Retrieves the profile image for the authenticated user.", 195) 196async def get_profile_image_me(session: BearerAuthDep) -> Response: 197 """Get own profile image. 198 199 Args: 200 session: user session 201 202 Returns: 203 user profile image 204 """ 205 return Response( 206 block_management.get_profile_image(session.user_id), media_type="image/jpeg" 207 ) 208 209 210@router.get( 211 path="/{user_id}/image", 212 status_code=status.HTTP_200_OK, 213 summary="Get user profile image", 214 description="Retrieves the profile image for a specific user by their ID.", 215) 216async def get_profile_image_by_id(user_id: int) -> Response: 217 """Get user profile image by ID. 218 219 Args: 220 user_id: user id 221 222 Returns: 223 user profile image 224 """ 225 return Response( 226 block_management.get_profile_image(user_id), media_type="image/jpeg" 227 ) 228 229 230class CreateSellerIssueReportForm(BaseModel): 231 """Seller issue report creation form.""" 232 233 issue_type: SellerIssueType 234 description: str 235 236 237async def create_seller_issue_report( 238 reservation_id: int, 239 form: CreateSellerIssueReportForm, 240 conn: database_dependency, 241 user: BearerAuthDep, 242) -> SellerIssueReport: 243 """Create seller issue report. 244 245 Args: 246 reservation_id: reservation id from path 247 form: seller issue report creation form 248 conn: database connection 249 user: user session 250 251 Returns: 252 created seller issue report 253 254 Raises: 255 HTTPException: if failed to create report or reservation not owned by consumer 256 """ 257 reservation = await ReservationsQuerier(conn).get_reservation( 258 reservation_id=reservation_id 259 ) 260 if not reservation or reservation.consumer_id != user.user_id: 261 raise HTTPException( 262 status_code=status.HTTP_404_NOT_FOUND, 263 detail="Reservation not found or not owned by consumer", 264 ) 265 266 report = await SellerIssueReportsQuerier(conn).create_seller_issue_report( 267 CreateSellerIssueReportParams( 268 reservation_id=reservation_id, 269 issue_type=form.issue_type, 270 description=form.description, 271 ) 272 ) 273 if not report: 274 raise HTTPException( 275 status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, 276 detail="Failed to create seller issue report", 277 ) 278 return report 279 280 281class CreateAdminIssueReportForm(BaseModel): 282 """Admin issue report creation form.""" 283 284 issue_type: AdminIssueType 285 description: str 286 287 288@router.post( 289 "/me/reports/admin", 290 status_code=status.HTTP_201_CREATED, 291 summary="Create admin issue report", 292 description="Creates a new admin issue report.", 293 tags=["reports"], 294) 295async def create_admin_issue_report( 296 form: CreateAdminIssueReportForm, conn: database_dependency, user: BearerAuthDep 297) -> AdminIssueReport: 298 """Create admin issue report. 299 300 Args: 301 form: admin issue report creation form 302 conn: database connection 303 user: user session 304 305 Returns: 306 created admin issue report 307 308 Raises: 309 HTTPException: if failed to create report 310 """ 311 report = await AdminIssueReportsQuerier(conn).create_admin_issue_report( 312 CreateAdminIssueReportParams( 313 user_id=user.user_id, 314 issue_type=form.issue_type, 315 description=form.description, 316 ) 317 ) 318 if not report: 319 raise HTTPException( 320 status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, 321 detail="Failed to create admin issue report", 322 ) 323 return report 324 325 326@router.get( 327 "/me/reports/admin", 328 status_code=status.HTTP_200_OK, 329 summary="Get admin issue reports", 330 description="Retrieves a list of admin issue reports created by the user.", 331 tags=["reports"], 332) 333async def get_admin_issue_reports( 334 conn: database_dependency, user: BearerAuthDep 335) -> list[AdminIssueReport]: 336 """Get admin issue reports. 337 338 Args: 339 conn: database connection 340 user: user session 341 342 Returns: 343 list of admin issue reports 344 """ 345 return [ 346 r 347 async for r in AdminIssueReportsQuerier(conn).get_admin_issue_reports_by_user( 348 user_id=user.user_id 349 ) 350 ] 351 352 353@router.get( 354 "/me/reports/seller", 355 status_code=status.HTTP_200_OK, 356 summary="Get seller issue reports", 357 description="Retrieves a list of seller issue reports created by the user.", 358 tags=["reports"], 359) 360async def get_seller_issue_reports( 361 conn: database_dependency, user: BearerAuthDep 362) -> list[SellerIssueReport]: 363 """Get seller issue reports. 364 365 Args: 366 conn: database connection 367 user: user session 368 369 Returns: 370 list of seller issue reports 371 """ 372 return [ 373 r 374 async for r in SellerIssueReportsQuerier(conn).get_seller_issue_reports_by_user( 375 consumer_id=user.user_id 376 ) 377 ]
router =
<fastapi.routing.APIRouter object>
class
SendMessageForm(pydantic.main.BaseModel):
35class SendMessageForm(BaseModel): 36 """Form to send a new message.""" 37 38 user_id: int 39 message_subject: str 40 message_text: str
Form to send a new message.
@router.patch('/me/password', status_code=status.HTTP_202_ACCEPTED, summary='Update password', description='Updates the password for the authenticated user.')
async def
update_password( form: internal.auth.security.UpdatePasswordForm, conn: Annotated[sqlalchemy.ext.asyncio.engine.AsyncConnection, Depends(dependency=<bound method DatabaseManager.get_connection of <internal.database.manager.DatabaseManager object>>, use_cache=True, scope=None)], session: Annotated[internal.queries.token.GetSessionByTokenRow, Security(dependency=<function bearer_auth>, use_cache=True, scope=None, scopes=None)]) -> None:
43@router.patch( 44 "/me/password", 45 status_code=status.HTTP_202_ACCEPTED, 46 summary="Update password", 47 description="Updates the password for the authenticated user.", 48) 49async def update_password( 50 form: UpdatePasswordForm, conn: database_dependency, session: BearerAuthDep 51) -> None: 52 """Update users password. 53 54 Args: 55 form: form for password change 56 conn: database connection 57 session: users session 58 """ 59 await update_pw(session.email, form, conn)
Update users password.
Arguments:
- form: form for password change
- conn: database connection
- session: users session
@router.patch('/me/email', status_code=status.HTTP_202_ACCEPTED, summary='Update email', description='Updates the email address for the authenticated user.')
async def
update_email( email: pydantic.networks.EmailStr, conn: Annotated[sqlalchemy.ext.asyncio.engine.AsyncConnection, Depends(dependency=<bound method DatabaseManager.get_connection of <internal.database.manager.DatabaseManager object>>, use_cache=True, scope=None)], session: Annotated[internal.queries.token.GetSessionByTokenRow, Security(dependency=<function bearer_auth>, use_cache=True, scope=None, scopes=None)]) -> None:
62@router.patch( 63 "/me/email", 64 status_code=status.HTTP_202_ACCEPTED, 65 summary="Update email", 66 description="Updates the email address for the authenticated user.", 67) 68async def update_email( 69 email: EmailStr, conn: database_dependency, session: BearerAuthDep 70) -> None: 71 """Update users email. 72 73 Args: 74 email: new users email 75 conn: database connection 76 session: users session 77 78 Raises: 79 HTTPException: failed to update user email 80 """ 81 user = await UserQuerier(conn).update_user_email( 82 UpdateUserEmailParams(user_id=session.user_id, email=email) 83 ) 84 if not user: 85 raise HTTPException( 86 status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, 87 detail="Failed to update users email", 88 )
Update users email.
Arguments:
- email: new users email
- conn: database connection
- session: users session
Raises:
- HTTPException: failed to update user email
@router.get('/me/inbox', status_code=status.HTTP_200_OK, summary='Get user inbox', description='Gets all inbox messages for the authenticated user.', response_model=list[Inbox])
async def
get_inbox( conn: Annotated[sqlalchemy.ext.asyncio.engine.AsyncConnection, Depends(dependency=<bound method DatabaseManager.get_connection of <internal.database.manager.DatabaseManager object>>, use_cache=True, scope=None)], session: Annotated[internal.queries.token.GetSessionByTokenRow, Security(dependency=<function bearer_auth>, use_cache=True, scope=None, scopes=None)]) -> list[internal.queries.models.Inbox]:
91@router.get( 92 "/me/inbox", 93 status_code=status.HTTP_200_OK, 94 summary="Get user inbox", 95 description="Gets all inbox messages for the authenticated user.", 96 response_model=list[Inbox], 97) 98async def get_inbox(conn: database_dependency, session: BearerAuthDep) -> list[Inbox]: 99 """Get inbox for user. 100 101 Args: 102 conn: database connection 103 session: users session 104 105 Returns: 106 A list of inbox messages. 107 """ 108 return [ 109 msg async for msg in InboxQuerier(conn).get_user_inbox(user_id=session.user_id) 110 ]
Get inbox for user.
Arguments:
- conn: database connection
- session: users session
Returns:
A list of inbox messages.
@router.post('/me/inbox', status_code=status.HTTP_201_CREATED, summary='Send an inbox message', description='Sends a new message to a user.', response_model=Inbox)
async def
send_message( form: SendMessageForm, conn: Annotated[sqlalchemy.ext.asyncio.engine.AsyncConnection, Depends(dependency=<bound method DatabaseManager.get_connection of <internal.database.manager.DatabaseManager object>>, use_cache=True, scope=None)], session: Annotated[internal.queries.token.GetSessionByTokenRow, Security(dependency=<function bearer_auth>, use_cache=True, scope=None, scopes=None)]) -> internal.queries.models.Inbox:
113@router.post( 114 "/me/inbox", 115 status_code=status.HTTP_201_CREATED, 116 summary="Send an inbox message", 117 description="Sends a new message to a user.", 118 response_model=Inbox, 119) 120async def send_message( 121 form: SendMessageForm, conn: database_dependency, session: BearerAuthDep 122) -> Inbox: 123 """Send a message. 124 125 Args: 126 form: The message form 127 conn: database connection 128 session: users session 129 130 Returns: 131 The created message. 132 133 Raises: 134 HTTPException: if message sending fails 135 """ 136 message = await InboxQuerier(conn).create_inbox_message( 137 CreateInboxMessageParams( 138 user_id=form.user_id, 139 sender_id=session.user_id, 140 message_subject=form.message_subject, 141 message_text=form.message_text, 142 ) 143 ) 144 if not message: 145 raise HTTPException( 146 status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, 147 detail="Failed to send message", 148 ) 149 return message
Send a message.
Arguments:
- form: The message form
- conn: database connection
- session: users session
Returns:
The created message.
Raises:
- HTTPException: if message sending fails
@router.get(path='/id/{username}', summary='Get user ID by username', description='Retrieves a user ID and role by their username.')
async def
get_user_id( username: str, conn: Annotated[sqlalchemy.ext.asyncio.engine.AsyncConnection, Depends(dependency=<bound method DatabaseManager.get_connection of <internal.database.manager.DatabaseManager object>>, use_cache=True, scope=None)]) -> tuple[int, internal.queries.models.UserRole]:
152@router.get( 153 path="/id/{username}", 154 summary="Get user ID by username", 155 description="Retrieves a user ID and role by their username.", 156) 157async def get_user_id(username: str, conn: database_dependency) -> tuple[int, UserRole]: 158 """Get user id from username. 159 160 Args: 161 username: username 162 conn: database connection 163 164 Returns: 165 user id and role 166 167 Raises: 168 HTTPException: if failed to find user 169 """ 170 if (user := await UserQuerier(conn).get_user_id(username=username)) is None: 171 raise HTTPException(status.HTTP_404_NOT_FOUND, "failed to find user") 172 return (user.user_id, user.role)
Get user id from username.
Arguments:
- username: username
- conn: database connection
Returns:
user id and role
Raises:
- HTTPException: if failed to find user
@router.patch(path='/me/image', status_code=status.HTTP_202_ACCEPTED, summary='Change profile image', description='Updates the profile image for the authenticated user.')
async def
change_profile_image( file: fastapi.datastructures.UploadFile, session: Annotated[internal.queries.token.GetSessionByTokenRow, Security(dependency=<function bearer_auth>, use_cache=True, scope=None, scopes=None)]) -> None:
175@router.patch( 176 path="/me/image", 177 status_code=status.HTTP_202_ACCEPTED, 178 summary="Change profile image", 179 description="Updates the profile image for the authenticated user.", 180) 181async def change_profile_image(file: UploadFile, session: BearerAuthDep) -> None: 182 """Change user profile image. 183 184 Args: 185 file: profile image 186 session: user session 187 """ 188 await block_management.upload_profile_image(session.user_id, file)
Change user profile image.
Arguments:
- file: profile image
- session: user session
@router.get(path='/me/image', status_code=status.HTTP_200_OK, summary='Get own profile image', description='Retrieves the profile image for the authenticated user.')
async def
get_profile_image_me( session: Annotated[internal.queries.token.GetSessionByTokenRow, Security(dependency=<function bearer_auth>, use_cache=True, scope=None, scopes=None)]) -> starlette.responses.Response:
191@router.get( 192 path="/me/image", 193 status_code=status.HTTP_200_OK, 194 summary="Get own profile image", 195 description="Retrieves the profile image for the authenticated user.", 196) 197async def get_profile_image_me(session: BearerAuthDep) -> Response: 198 """Get own profile image. 199 200 Args: 201 session: user session 202 203 Returns: 204 user profile image 205 """ 206 return Response( 207 block_management.get_profile_image(session.user_id), media_type="image/jpeg" 208 )
Get own profile image.
Arguments:
- session: user session
Returns:
user profile image
@router.get(path='/{user_id}/image', status_code=status.HTTP_200_OK, summary='Get user profile image', description='Retrieves the profile image for a specific user by their ID.')
async def
get_profile_image_by_id(user_id: int) -> starlette.responses.Response:
211@router.get( 212 path="/{user_id}/image", 213 status_code=status.HTTP_200_OK, 214 summary="Get user profile image", 215 description="Retrieves the profile image for a specific user by their ID.", 216) 217async def get_profile_image_by_id(user_id: int) -> Response: 218 """Get user profile image by ID. 219 220 Args: 221 user_id: user id 222 223 Returns: 224 user profile image 225 """ 226 return Response( 227 block_management.get_profile_image(user_id), media_type="image/jpeg" 228 )
Get user profile image by ID.
Arguments:
- user_id: user id
Returns:
user profile image
class
CreateSellerIssueReportForm(pydantic.main.BaseModel):
231class CreateSellerIssueReportForm(BaseModel): 232 """Seller issue report creation form.""" 233 234 issue_type: SellerIssueType 235 description: str
Seller issue report creation form.
async def
create_seller_issue_report( reservation_id: int, form: CreateSellerIssueReportForm, conn: Annotated[sqlalchemy.ext.asyncio.engine.AsyncConnection, Depends(dependency=<bound method DatabaseManager.get_connection of <internal.database.manager.DatabaseManager object>>, use_cache=True, scope=None)], user: Annotated[internal.queries.token.GetSessionByTokenRow, Security(dependency=<function bearer_auth>, use_cache=True, scope=None, scopes=None)]) -> internal.queries.models.SellerIssueReport:
238async def create_seller_issue_report( 239 reservation_id: int, 240 form: CreateSellerIssueReportForm, 241 conn: database_dependency, 242 user: BearerAuthDep, 243) -> SellerIssueReport: 244 """Create seller issue report. 245 246 Args: 247 reservation_id: reservation id from path 248 form: seller issue report creation form 249 conn: database connection 250 user: user session 251 252 Returns: 253 created seller issue report 254 255 Raises: 256 HTTPException: if failed to create report or reservation not owned by consumer 257 """ 258 reservation = await ReservationsQuerier(conn).get_reservation( 259 reservation_id=reservation_id 260 ) 261 if not reservation or reservation.consumer_id != user.user_id: 262 raise HTTPException( 263 status_code=status.HTTP_404_NOT_FOUND, 264 detail="Reservation not found or not owned by consumer", 265 ) 266 267 report = await SellerIssueReportsQuerier(conn).create_seller_issue_report( 268 CreateSellerIssueReportParams( 269 reservation_id=reservation_id, 270 issue_type=form.issue_type, 271 description=form.description, 272 ) 273 ) 274 if not report: 275 raise HTTPException( 276 status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, 277 detail="Failed to create seller issue report", 278 ) 279 return report
Create seller issue report.
Arguments:
- reservation_id: reservation id from path
- form: seller issue report creation form
- conn: database connection
- user: user session
Returns:
created seller issue report
Raises:
- HTTPException: if failed to create report or reservation not owned by consumer
class
CreateAdminIssueReportForm(pydantic.main.BaseModel):
282class CreateAdminIssueReportForm(BaseModel): 283 """Admin issue report creation form.""" 284 285 issue_type: AdminIssueType 286 description: str
Admin issue report creation form.
@router.post('/me/reports/admin', status_code=status.HTTP_201_CREATED, summary='Create admin issue report', description='Creates a new admin issue report.', tags=['reports'])
async def
create_admin_issue_report( form: CreateAdminIssueReportForm, conn: Annotated[sqlalchemy.ext.asyncio.engine.AsyncConnection, Depends(dependency=<bound method DatabaseManager.get_connection of <internal.database.manager.DatabaseManager object>>, use_cache=True, scope=None)], user: Annotated[internal.queries.token.GetSessionByTokenRow, Security(dependency=<function bearer_auth>, use_cache=True, scope=None, scopes=None)]) -> internal.queries.models.AdminIssueReport:
289@router.post( 290 "/me/reports/admin", 291 status_code=status.HTTP_201_CREATED, 292 summary="Create admin issue report", 293 description="Creates a new admin issue report.", 294 tags=["reports"], 295) 296async def create_admin_issue_report( 297 form: CreateAdminIssueReportForm, conn: database_dependency, user: BearerAuthDep 298) -> AdminIssueReport: 299 """Create admin issue report. 300 301 Args: 302 form: admin issue report creation form 303 conn: database connection 304 user: user session 305 306 Returns: 307 created admin issue report 308 309 Raises: 310 HTTPException: if failed to create report 311 """ 312 report = await AdminIssueReportsQuerier(conn).create_admin_issue_report( 313 CreateAdminIssueReportParams( 314 user_id=user.user_id, 315 issue_type=form.issue_type, 316 description=form.description, 317 ) 318 ) 319 if not report: 320 raise HTTPException( 321 status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, 322 detail="Failed to create admin issue report", 323 ) 324 return report
Create admin issue report.
Arguments:
- form: admin issue report creation form
- conn: database connection
- user: user session
Returns:
created admin issue report
Raises:
- HTTPException: if failed to create report
@router.get('/me/reports/admin', status_code=status.HTTP_200_OK, summary='Get admin issue reports', description='Retrieves a list of admin issue reports created by the user.', tags=['reports'])
async def
get_admin_issue_reports( conn: Annotated[sqlalchemy.ext.asyncio.engine.AsyncConnection, Depends(dependency=<bound method DatabaseManager.get_connection of <internal.database.manager.DatabaseManager object>>, use_cache=True, scope=None)], user: Annotated[internal.queries.token.GetSessionByTokenRow, Security(dependency=<function bearer_auth>, use_cache=True, scope=None, scopes=None)]) -> list[internal.queries.models.AdminIssueReport]:
327@router.get( 328 "/me/reports/admin", 329 status_code=status.HTTP_200_OK, 330 summary="Get admin issue reports", 331 description="Retrieves a list of admin issue reports created by the user.", 332 tags=["reports"], 333) 334async def get_admin_issue_reports( 335 conn: database_dependency, user: BearerAuthDep 336) -> list[AdminIssueReport]: 337 """Get admin issue reports. 338 339 Args: 340 conn: database connection 341 user: user session 342 343 Returns: 344 list of admin issue reports 345 """ 346 return [ 347 r 348 async for r in AdminIssueReportsQuerier(conn).get_admin_issue_reports_by_user( 349 user_id=user.user_id 350 ) 351 ]
Get admin issue reports.
Arguments:
- conn: database connection
- user: user session
Returns:
list of admin issue reports
@router.get('/me/reports/seller', status_code=status.HTTP_200_OK, summary='Get seller issue reports', description='Retrieves a list of seller issue reports created by the user.', tags=['reports'])
async def
get_seller_issue_reports( conn: Annotated[sqlalchemy.ext.asyncio.engine.AsyncConnection, Depends(dependency=<bound method DatabaseManager.get_connection of <internal.database.manager.DatabaseManager object>>, use_cache=True, scope=None)], user: Annotated[internal.queries.token.GetSessionByTokenRow, Security(dependency=<function bearer_auth>, use_cache=True, scope=None, scopes=None)]) -> list[internal.queries.models.SellerIssueReport]:
354@router.get( 355 "/me/reports/seller", 356 status_code=status.HTTP_200_OK, 357 summary="Get seller issue reports", 358 description="Retrieves a list of seller issue reports created by the user.", 359 tags=["reports"], 360) 361async def get_seller_issue_reports( 362 conn: database_dependency, user: BearerAuthDep 363) -> list[SellerIssueReport]: 364 """Get seller issue reports. 365 366 Args: 367 conn: database connection 368 user: user session 369 370 Returns: 371 list of seller issue reports 372 """ 373 return [ 374 r 375 async for r in SellerIssueReportsQuerier(conn).get_seller_issue_reports_by_user( 376 consumer_id=user.user_id 377 ) 378 ]
Get seller issue reports.
Arguments:
- conn: database connection
- user: user session
Returns:
list of seller issue reports