feat(users): add get user by id endpoint
This commit is contained in:
@@ -1,12 +1,14 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
|
from uuid import UUID
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends
|
from fastapi import APIRouter, Depends
|
||||||
|
|
||||||
from v1.users.dependencies import get_user_service
|
from v1.users.dependencies import get_user_service
|
||||||
from v1.users.schemas import UserResponse, UserSearchRequest, UserUpdateRequest
|
from v1.users.schemas import UserResponse, UserSearchRequest, UserUpdateRequest
|
||||||
from v1.users.service import UserService
|
from v1.users.service import UserService
|
||||||
|
from v1.friendships.schemas import UserBasicInfo
|
||||||
|
|
||||||
|
|
||||||
router = APIRouter(prefix="/users", tags=["users"])
|
router = APIRouter(prefix="/users", tags=["users"])
|
||||||
@@ -33,3 +35,11 @@ async def search_users(
|
|||||||
service: Annotated[UserService, Depends(get_user_service)],
|
service: Annotated[UserService, Depends(get_user_service)],
|
||||||
) -> list[UserResponse]:
|
) -> list[UserResponse]:
|
||||||
return await service.search_users(payload)
|
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 sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from v1.auth.schemas import UserByEmailResponse
|
from v1.auth.schemas import UserByEmailResponse
|
||||||
|
from v1.friendships.schemas import UserBasicInfo
|
||||||
|
|
||||||
logger = get_logger("v1.users.service")
|
logger = get_logger("v1.users.service")
|
||||||
|
|
||||||
@@ -99,6 +100,22 @@ class UserService(BaseService):
|
|||||||
bio=user.bio,
|
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:
|
async def update_me(self, update: UserUpdateRequest) -> UserResponse:
|
||||||
user_id = self.require_user_id()
|
user_id = self.require_user_id()
|
||||||
update_data: dict[str, str | None] = {
|
update_data: dict[str, str | None] = {
|
||||||
|
|||||||
Reference in New Issue
Block a user