81 lines
3.0 KiB
Python
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]
|