You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

58 lines
1.5 KiB

from typing import Sequence
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, delete, update
from ..schemas import UserRead, UserCreate,UserUpdate
from ..models import UserModel
async def get_all_users(
session: AsyncSession
) -> Sequence[UserModel]:
stmt = select(UserModel).order_by(UserModel.id)
result = await session.scalars(stmt)
return result.all()
async def get_user(
session: AsyncSession,
user_id: int
) -> UserModel:
db_user = await session.get(UserModel, user_id)
if db_user is None:
return None
return db_user
async def create_user(
session:AsyncSession,
user_create: UserCreate
) -> UserModel:
user = UserModel(**user_create.model_dump())
session.add(user)
await session.commit()
return user
async def delete_user(
session: AsyncSession,
user_id: int
) -> UserModel:
db_user = await session.get(UserModel, user_id)
if db_user is None:
return None
stmt = delete(UserModel).filter(UserModel.id == user_id)
await session.execute(stmt)
await session.commit()
return db_user.one_or_none()
async def update_user(
session:AsyncSession,
user_id: int,
user_update: UserUpdate
) -> UserModel:
db_user = await session.get(UserModel, user_id)
if db_user is None:
return None
for var, value in vars(user_update).items():
setattr(db_user, var, value) if value else None
await session.commit()
await session.refresh(db_user)
return db_user