59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.dao import UsersDAO
|
|
from app.dependencies.dao_dep import get_session_with_commit, get_session_without_commit
|
|
from app.exceptions import UserAlreadyExistsException
|
|
from app.schemas import UserSchema, EmailSchema, UserAddDBSchema
|
|
|
|
router = APIRouter(prefix="/users", tags=["Users"])
|
|
|
|
|
|
@router.get("/{user_id}")
|
|
async def get_user_by_id(user_id: int, session: AsyncSession = Depends(get_session_without_commit)) -> UserSchema:
|
|
user = await UsersDAO(session).find_one_or_none_by_id(data_id=user_id)
|
|
|
|
if not user:
|
|
raise HTTPException(status_code=404)
|
|
|
|
return UserSchema.model_validate(user)
|
|
|
|
|
|
@router.get("")
|
|
async def get_all_users(session: AsyncSession = Depends(get_session_without_commit)) -> list[UserSchema]:
|
|
users_dao = UsersDAO(session)
|
|
users = await users_dao.find_all()
|
|
return [UserSchema.model_validate(user) for user in users]
|
|
|
|
|
|
@router.post("")
|
|
async def create_user(user_data, session: AsyncSession = Depends(get_session_with_commit)) -> dict:
|
|
# Проверка существования пользователя
|
|
user_dao = UsersDAO(session)
|
|
|
|
existing_user = await user_dao.find_one_or_none(
|
|
filters=EmailSchema(email=user_data.email)
|
|
)
|
|
|
|
if existing_user:
|
|
raise UserAlreadyExistsException
|
|
|
|
# Подготовка данных для добавления
|
|
user_data_dict = user_data.model_dump()
|
|
user_data_dict.pop("confirm_password", None)
|
|
|
|
# Добавление пользователя
|
|
await user_dao.add(values=UserAddDBSchema(**user_data_dict))
|
|
|
|
return {"message": "Вы успешно зарегистрированы!"}
|
|
|
|
|
|
@router.put("/{user_id}")
|
|
async def update_user(user_id: int, user_data, session: AsyncSession = Depends(get_session_with_commit)):
|
|
pass
|
|
|
|
|
|
@router.delete("/{user_id}")
|
|
async def delete_user(user_id: int, session: AsyncSession = Depends(get_session_with_commit)):
|
|
pass
|