Files
auth-project/src/db/database.py
2026-07-12 22:06:20 +03:00

81 lines
3.0 KiB
Python

from sqlalchemy import create_engine, select
from sqlalchemy.orm import sessionmaker
from src.model.database_model.model import User, Permissions
class ActionsDB:
def __init__(self) -> None:
self.engine=create_engine("sqlite:///DB/database.db", echo=True)
self.Session=sessionmaker(self.engine,expire_on_commit=False)
def get_user_by_email(self, email: str) -> User | None:
with self.Session() as session:
with session.begin():
q=select(User).where(User.email==email)
r=session.scalars(q).first()
if r:
return r
else:
return None
def get_user_by_id(self, id:int)->User|None:
with self.Session() as session:
with session.begin():
q=select(User).where(User.id==id)
r=session.scalars(q).first()
if r:
return r
else:
return None
def create_user(self, user:dict, permission_names:list[str])->User:
with self.Session() as session:
with session.begin():
new_user=User(**user)
if permission_names:
perms = session.scalars(
select(Permissions).where(Permissions.permission.in_(permission_names))
).all()
new_user.permissions.extend(perms)
session.add(new_user)
session.refresh(new_user, attribute_names=["permissions"])
return new_user
def delete_user(self, id:int)->bool:
with self.Session() as session:
with session.begin():
q=select(User).where(User.id==id)
r=session.scalar(q)
if r is None:
return False
r.status = False
return True
def update_user(self, data: dict, permission_names: list[str]) -> User | None:
with self.Session() as session:
with session.begin():
q = select(User).where(User.id == data["id"])
user = session.execute(q).scalar_one_or_none()
if user is None:
return None
if permission_names:
perms = session.scalars(
select(Permissions).where(Permissions.permission.in_(permission_names))
).all()
user.permissions = list(perms)
for key, value in data.items():
if key != "id":
setattr(user, key, value)
session.refresh(user, attribute_names=["permissions"])
return user
def get_all_permissions(self)->list[str]:
with self.Session() as session:
with session.begin():
q=select(Permissions)
permissions=session.scalars(q).all()
return [p.permission for p in permissions]