feat(users): add get user by id endpoint
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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] = {
|
||||
|
||||
Reference in New Issue
Block a user