diff --git a/backend/src/v1/users/router.py b/backend/src/v1/users/router.py index ab52184..f3263c1 100644 --- a/backend/src/v1/users/router.py +++ b/backend/src/v1/users/router.py @@ -1,12 +1,14 @@ from __future__ import annotations from typing import Annotated +from uuid import UUID from fastapi import APIRouter, Depends from v1.users.dependencies import get_user_service from v1.users.schemas import UserResponse, UserSearchRequest, UserUpdateRequest from v1.users.service import UserService +from v1.friendships.schemas import UserBasicInfo router = APIRouter(prefix="/users", tags=["users"]) @@ -33,3 +35,11 @@ async def search_users( service: Annotated[UserService, Depends(get_user_service)], ) -> list[UserResponse]: return await service.search_users(payload) + + +@router.get("/{user_id}", response_model=UserBasicInfo) +async def get_user( + user_id: UUID, + service: Annotated[UserService, Depends(get_user_service)], +) -> UserBasicInfo: + return await service.get_user_by_id(user_id) diff --git a/backend/src/v1/users/service.py b/backend/src/v1/users/service.py index 3ed8fad..0b44b93 100644 --- a/backend/src/v1/users/service.py +++ b/backend/src/v1/users/service.py @@ -20,6 +20,7 @@ if TYPE_CHECKING: from sqlalchemy.ext.asyncio import AsyncSession from v1.auth.schemas import UserByEmailResponse + from v1.friendships.schemas import UserBasicInfo logger = get_logger("v1.users.service") @@ -99,6 +100,22 @@ class UserService(BaseService): bio=user.bio, ) + async def get_user_by_id(self, user_id: UUID) -> "UserBasicInfo": + from v1.friendships.schemas import UserBasicInfo + + try: + profile = await self._repository.get_by_user_id(user_id) + except SQLAlchemyError: + raise HTTPException(status_code=503, detail="User store unavailable") + + if profile is None: + raise HTTPException(status_code=404, detail="User not found") + return UserBasicInfo( + id=str(profile.id), + username=profile.username, + avatar_url=profile.avatar_url, + ) + async def update_me(self, update: UserUpdateRequest) -> UserResponse: user_id = self.require_user_id() update_data: dict[str, str | None] = {