04/27 Fixed some issues 2

This commit is contained in:
2026-04-27 13:46:02 -04:00
parent 821cd929f1
commit 7d27a8ec49
4 changed files with 39 additions and 17 deletions
+21 -14
View File
@@ -48,25 +48,32 @@ def get_customer_scope(user) -> list[int] | None:
assignments = CustomerAssignment.query.filter_by(user_id=user.id).all()
facility_ids = set()
if not assignments:
return []
for assignment in assignments:
if assignment.facility_id:
# Scoped to a specific facility
facility_ids.add(assignment.facility_id)
else:
# Scoped to an entire project — include all facilities in that project
project_facilities = (
Facility.query
.filter_by(project_id=assignment.project_id, active=True)
.all()
# Separate direct facility assignments from project-level assignments
direct_facility_ids = {a.facility_id for a in assignments if a.facility_id}
project_ids = {a.project_id for a in assignments if not a.facility_id}
facility_ids = set(direct_facility_ids)
# Single bulk query for all project-scoped facilities — replaces the
# previous per-assignment Facility.query loop (N+1 pattern).
if project_ids:
project_facilities = (
Facility.query
.filter(
Facility.project_id.in_(project_ids),
Facility.active == True,
)
for f in project_facilities:
facility_ids.add(f.id)
.all()
)
for f in project_facilities:
facility_ids.add(f.id)
logger.debug(
'SCOPE | customer_scope | user_id=%s username=%s facility_ids=%s',
user.id, user.username, sorted(facility_ids),
)
return sorted(facility_ids)
return sorted(facility_ids)