from typing import Optional from sqlalchemy.orm import Session from app.role.model import Role def create_role(db: Session, role: Role) -> Role: role.name = role.name.lower() if get_role_by_name(db, role.name) is not None: raise Exception() db.add(role) db.commit() db.refresh(role) return role def get_role_by_name(db: Session, name: str) -> Optional[Role]: return db.query(Role).filter(Role.name == name).one_or_none() def get_role_by_id(db: Session, id: int) -> Optional[Role]: return db.query(Role).filter(Role.id == id).one_or_none() def get_roles(db: Session) -> list[Role]: return db.query(Role).all() def create_admin_role(db: Session): admin_role = get_role_by_name(db, "admin") if admin_role is None: db.add(Role(name="admin")) db.commit() def delete_role_by_id(db: Session, id: int): role = get_role_by_id(db, id) if role.name == "admin": return if role is not None: db.delete(role) db.commit()