Coverage for polar/benefit/repository.py: 84%
27 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 12:42 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 12:42 +0000
1from uuid import UUID
3from sqlalchemy import Select, select
4from sqlalchemy.orm import joinedload
6from polar.auth.models import AuthSubject, Organization, User, is_organization, is_user
7from polar.kit.repository import (
8 Options,
9 RepositoryBase,
10 RepositorySoftDeletionIDMixin,
11 RepositorySoftDeletionMixin,
12 RepositorySortingMixin,
13 SortingClause,
14)
15from polar.models import Benefit, UserOrganization
17from .sorting import BenefitSortProperty
20class BenefitRepository(
21 RepositorySortingMixin[Benefit, BenefitSortProperty],
22 RepositorySoftDeletionIDMixin[Benefit, UUID],
23 RepositorySoftDeletionMixin[Benefit],
24 RepositoryBase[Benefit],
25):
26 model = Benefit
28 def get_eager_options(self) -> Options:
29 return (joinedload(Benefit.organization),)
31 def get_readable_statement(
32 self, auth_subject: AuthSubject[User | Organization]
33 ) -> Select[tuple[Benefit]]:
34 statement = self.get_base_statement()
36 if is_user(auth_subject): 36 ↛ 46line 36 didn't jump to line 46 because the condition on line 36 was always true
37 user = auth_subject.subject
38 statement = statement.where(
39 Benefit.organization_id.in_(
40 select(UserOrganization.organization_id).where(
41 UserOrganization.user_id == user.id,
42 UserOrganization.deleted_at.is_(None),
43 )
44 )
45 )
46 elif is_organization(auth_subject):
47 statement = statement.where(
48 Benefit.organization_id == auth_subject.subject.id,
49 )
51 return statement
53 def get_sorting_clause(self, property: BenefitSortProperty) -> SortingClause:
54 match property:
55 case BenefitSortProperty.created_at:
56 return Benefit.created_at
57 case BenefitSortProperty.description:
58 return Benefit.description
59 case BenefitSortProperty.type: 59 ↛ exitline 59 didn't return from function 'get_sorting_clause' because the pattern on line 59 always matched
60 return Benefit.type