From d1dbe29366c937fea5ad030046617c5066fe073b Mon Sep 17 00:00:00 2001 From: chuks68 Date: Sat, 20 Jun 2026 01:50:44 +0100 Subject: [PATCH] fix: eager load Position and TelegramUser to eliminate N+1 queries in get_users_for_notifications --- quantara/web_app/db/crud/user.py | 3 ++- quantara/web_app/db/models.py | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/quantara/web_app/db/crud/user.py b/quantara/web_app/db/crud/user.py index 52e503d86..38a90e16d 100644 --- a/quantara/web_app/db/crud/user.py +++ b/quantara/web_app/db/crud/user.py @@ -8,6 +8,7 @@ from sqlalchemy.exc import SQLAlchemyError from web_app.db.models import Base, Position, Status, TelegramUser, User +from sqlalchemy.orm import joinedload from .base import DBConnector @@ -37,7 +38,7 @@ def get_users_for_notifications(self) -> list[tuple[str, str]]: Position.status == Status.OPENED.value, TelegramUser.is_allowed_notification == True, ) - .distinct() + .options(joinedload(User.positions), joinedload(User.telegram_user)) .all() ) return results diff --git a/quantara/web_app/db/models.py b/quantara/web_app/db/models.py index f367524a4..62713a163 100644 --- a/quantara/web_app/db/models.py +++ b/quantara/web_app/db/models.py @@ -5,6 +5,8 @@ between the data entities. """ +from web_app.db.database import Base +from sqlalchemy.orm import relationship from datetime import datetime from enum import Enum as PyEnum from uuid import uuid4 @@ -24,7 +26,7 @@ from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.sql import func -from web_app.db.database import Base + class Status(PyEnum): @@ -55,6 +57,9 @@ class User(Base): is_contract_deployed = Column(Boolean, default=False) wallet_id = Column(String, nullable=False, unique=True, index=True) contract_address = Column(String) + # Relationships + positions = relationship("Position", backref="user") + telegram_user = relationship("TelegramUser", backref="user", uselist=False) class Referal(Base): """