55 lines
2.2 KiB
Python
55 lines
2.2 KiB
Python
from sqlalchemy import delete, select
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.models.company import Company
|
|
from app.models.role import Role
|
|
from app.models.site import Site
|
|
from app.models.site_role import SiteRole
|
|
from app.models.system import System
|
|
from app.models.user import User
|
|
from app.models.user_site import UserSite
|
|
|
|
|
|
class UserSitesRepository:
|
|
def __init__(self, db: Session) -> None:
|
|
self.db = db
|
|
|
|
def list_user_site_rows(self, user_id: str) -> list[tuple[UserSite, Site, Company]]:
|
|
stmt = (
|
|
select(UserSite, Site, Company)
|
|
.join(Site, Site.id == UserSite.site_id)
|
|
.join(Company, Company.id == Site.company_id)
|
|
.where(UserSite.user_id == user_id)
|
|
.order_by(Company.name.asc(), Site.display_name.asc())
|
|
)
|
|
return list(self.db.execute(stmt).all())
|
|
|
|
def list_site_member_rows(self, site_id: str) -> list[tuple[UserSite, User]]:
|
|
stmt = (
|
|
select(UserSite, User)
|
|
.join(User, User.id == UserSite.user_id)
|
|
.where(UserSite.site_id == site_id)
|
|
.order_by(User.display_name.asc().nulls_last(), User.username.asc().nulls_last(), User.user_sub.asc())
|
|
)
|
|
return list(self.db.execute(stmt).all())
|
|
|
|
def set_user_sites(self, *, user_id: str, site_ids: list[str]) -> None:
|
|
self.db.execute(delete(UserSite).where(UserSite.user_id == user_id))
|
|
for site_id in site_ids:
|
|
self.db.add(UserSite(user_id=user_id, site_id=site_id))
|
|
self.db.commit()
|
|
|
|
def get_user_role_rows(self, user_id: str) -> list[tuple[Site, Company, Role, System]]:
|
|
stmt = (
|
|
select(Site, Company, Role, System)
|
|
.select_from(UserSite)
|
|
.join(Site, Site.id == UserSite.site_id)
|
|
.join(Company, Company.id == Site.company_id)
|
|
.join(SiteRole, SiteRole.site_id == Site.id)
|
|
.join(Role, Role.id == SiteRole.role_id)
|
|
.join(System, System.id == Role.system_id)
|
|
.where(UserSite.user_id == user_id)
|
|
.order_by(Company.name.asc(), Site.display_name.asc(), System.name.asc(), Role.name.asc())
|
|
)
|
|
return list(self.db.execute(stmt).all())
|