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.
57 lines
1.7 KiB
57 lines
1.7 KiB
from typing import Sequence
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from sqlalchemy import select, delete, update
|
|
from ..schemas import LoginRead, LoginCreate, LoginUpdate
|
|
from ..models import LoginModel
|
|
|
|
from utils.hashing import get_password_hash
|
|
|
|
async def get_all_logins(
|
|
session: AsyncSession
|
|
) -> Sequence[LoginModel]:
|
|
stmt = select(LoginModel).order_by(LoginModel.id)
|
|
result = await session.scalars(stmt)
|
|
return result.all()
|
|
|
|
async def get_login(
|
|
session: AsyncSession,
|
|
login_id: int
|
|
) -> LoginModel:
|
|
db_login = await session.get(LoginModel,login_id)
|
|
if db_login is None:
|
|
return None
|
|
return db_login
|
|
|
|
async def create_login(
|
|
session:AsyncSession,
|
|
login_create: LoginCreate
|
|
) -> LoginModel:
|
|
login = LoginModel(**login_create.model_dump())
|
|
login.password = get_password_hash(login.password)
|
|
session.add(login)
|
|
await session.commit()
|
|
return login
|
|
|
|
async def delete_login(
|
|
session: AsyncSession,
|
|
login_id: int
|
|
):
|
|
db_login = await session.get(LoginModel,login_id)
|
|
if db_login is None:
|
|
return None
|
|
stmt = delete(LoginModel).filter(LoginModel.id == login_id)
|
|
await session.execute(stmt)
|
|
await session.commit()
|
|
|
|
async def update_login(
|
|
session:AsyncSession,
|
|
login_id: int,
|
|
login_update: LoginUpdate
|
|
) -> LoginModel:
|
|
db_login = await session.get(LoginModel,login_id)
|
|
if db_login is None:
|
|
return None
|
|
for var, value in vars(login_update).items():
|
|
setattr(db_login, var, value if var != "password" else get_password_hash(value)) if value else None
|
|
await session.commit()
|
|
return db_login
|