Spaces:
Sleeping
Sleeping
| from fastapi import APIRouter, Depends, HTTPException, status, Request | |
| from sqlmodel.ext.asyncio.session import AsyncSession | |
| from ...database.session import get_session_dep | |
| from ...schemas.user import UserRead, UserCreate | |
| from ...services.user_service import UserService | |
| from ...utils.logging import get_logger | |
| router = APIRouter() | |
| logger = get_logger(__name__) | |
| async def get_user( | |
| request: Request, | |
| user_id: int, | |
| session: AsyncSession = Depends(get_session_dep) | |
| ): | |
| """ | |
| Retrieve a specific user by ID. | |
| Args: | |
| request: FastAPI request object | |
| user_id: The ID of the user to retrieve | |
| session: Database session | |
| Returns: | |
| UserRead object | |
| Raises: | |
| HTTPException: If user not found | |
| """ | |
| try: | |
| user = await UserService.get_user_by_id(session, user_id) | |
| if not user: | |
| logger.warning(f"User {user_id} not found") | |
| raise HTTPException( | |
| status_code=status.HTTP_404_NOT_FOUND, | |
| detail="User not found" | |
| ) | |
| logger.info(f"Successfully retrieved user {user_id}") | |
| return user | |
| except HTTPException: | |
| # Re-raise HTTP exceptions | |
| raise | |
| except Exception as e: | |
| logger.error(f"Error retrieving user {user_id}: {str(e)}") | |
| raise HTTPException( | |
| status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, | |
| detail="Error retrieving user" | |
| ) | |
| async def create_user( | |
| request: Request, | |
| user_data: UserCreate, | |
| session: AsyncSession = Depends(get_session_dep) | |
| ): | |
| """ | |
| Create a new user. | |
| Args: | |
| request: FastAPI request object | |
| user_data: User creation data | |
| session: Database session | |
| Returns: | |
| Created UserRead object | |
| Raises: | |
| HTTPException: If user creation fails | |
| """ | |
| try: | |
| created_user = await UserService.create_user(session, user_data) | |
| logger.info(f"Successfully created user {created_user.id}") | |
| return created_user | |
| except HTTPException: | |
| # Re-raise HTTP exceptions | |
| raise | |
| except Exception as e: | |
| logger.error(f"Error creating user: {str(e)}") | |
| raise HTTPException( | |
| status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, | |
| detail="Error creating user" | |
| ) |