diff --git a/atst/domain/applications.py b/atst/domain/applications.py index c5a1d94a..7205a24a 100644 --- a/atst/domain/applications.py +++ b/atst/domain/applications.py @@ -109,6 +109,7 @@ class Applications(BaseDomainClass): ) application_role.status = ApplicationRoleStatus.DISABLED + application_role.deleted = True db.session.add(application_role) db.session.commit() diff --git a/atst/models/application.py b/atst/models/application.py index 37489715..414cacef 100644 --- a/atst/models/application.py +++ b/atst/models/application.py @@ -1,16 +1,10 @@ from sqlalchemy import Column, ForeignKey, String -from sqlalchemy.orm import relationship +from sqlalchemy.orm import relationship, synonym from atst.models import Base from atst.models.types import Id from atst.models import mixins -from atst.models.application_role import ( - ApplicationRole, - Status as ApplicationRoleStatuses, -) -from atst.database import db - class Application( Base, mixins.TimestampsMixin, mixins.AuditableMixin, mixins.DeletableMixin @@ -28,26 +22,16 @@ class Application( back_populates="application", primaryjoin="and_(Environment.application_id==Application.id, Environment.deleted==False)", ) - # TODO: filter condition on this relationship? - roles = relationship("ApplicationRole") + roles = relationship( + "ApplicationRole", + primaryjoin="and_(ApplicationRole.application_id==Application.id, ApplicationRole.deleted==False)", + ) + members = synonym("roles") @property def users(self): return set(role.user for role in self.members) - @property - def members(self): - return ( - db.session.query(ApplicationRole) - .filter(ApplicationRole.application_id == self.id) - .filter(ApplicationRole.status != ApplicationRoleStatuses.DISABLED) - .all() - ) - - @property - def num_users(self): - return len(self.users) - @property def displayname(self): return self.name diff --git a/templates/portfolios/applications/index.html b/templates/portfolios/applications/index.html index 6a20e277..923de347 100644 --- a/templates/portfolios/applications/index.html +++ b/templates/portfolios/applications/index.html @@ -54,7 +54,7 @@ - {{ "portfolios.applications.team_text" | translate }} ({{ application.num_users }}) + {{ "portfolios.applications.team_text" | translate }} ({{ application.users | length }})
{% endif %} diff --git a/tests/models/test_application.py b/tests/models/test_application.py index 5c8fbb79..711930ab 100644 --- a/tests/models/test_application.py +++ b/tests/models/test_application.py @@ -8,16 +8,6 @@ from tests.factories import ( ) -def test_application_num_users(): - application = ApplicationFactory.create( - environments=[{"name": "dev"}, {"name": "staging"}, {"name": "prod"}] - ) - assert application.num_users == 0 - - ApplicationRoleFactory.create(application=application) - assert application.num_users == 1 - - def test_application_environments_excludes_deleted(): app = ApplicationFactory.create() env = EnvironmentFactory.create(application=app)