first commit
This commit is contained in:
80
src/db/database.py
Normal file
80
src/db/database.py
Normal file
@@ -0,0 +1,80 @@
|
||||
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]
|
||||
Reference in New Issue
Block a user