Files
piaps-course-work-university/backend/app/routers/users.py

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