Coverage for polar/customer_portal/service/customer_meter.py: 50%
26 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 16:17 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 16:17 +0000
1import uuid 1a
2from collections.abc import Sequence 1a
4from sqlalchemy.orm import joinedload 1a
5from sqlalchemy.orm.strategy_options import contains_eager 1a
7from polar.auth.models import AuthSubject 1a
8from polar.kit.db.postgres import AsyncSession 1a
9from polar.kit.pagination import PaginationParams 1a
10from polar.kit.sorting import Sorting 1a
11from polar.models import Customer, CustomerMeter, Meter 1a
13from ..repository.customer_meter import CustomerMeterRepository 1a
14from ..sorting.customer_meter import CustomerCustomerMeterSortProperty 1a
17class CustomerMeterService: 1a
18 async def list( 1a
19 self,
20 session: AsyncSession,
21 auth_subject: AuthSubject[Customer],
22 *,
23 meter_id: Sequence[uuid.UUID] | None = None,
24 query: str | None = None,
25 pagination: PaginationParams,
26 sorting: list[Sorting[CustomerCustomerMeterSortProperty]] = [
27 (CustomerCustomerMeterSortProperty.modified_at, True)
28 ],
29 ) -> tuple[Sequence[CustomerMeter], int]:
30 repository = CustomerMeterRepository.from_session(session)
31 statement = (
32 repository.get_readable_statement(auth_subject)
33 .join(CustomerMeter.meter)
34 .options(
35 contains_eager(CustomerMeter.meter),
36 )
37 )
39 if meter_id is not None:
40 statement = statement.where(CustomerMeter.meter_id.in_(meter_id))
42 if query is not None:
43 statement = statement.where(Meter.name.ilike(f"%{query}%"))
45 statement = repository.apply_sorting(statement, sorting)
47 return await repository.paginate(
48 statement, limit=pagination.limit, page=pagination.page
49 )
51 async def get( 1a
52 self,
53 session: AsyncSession,
54 auth_subject: AuthSubject[Customer],
55 id: uuid.UUID,
56 ) -> CustomerMeter | None:
57 repository = CustomerMeterRepository.from_session(session)
58 statement = (
59 repository.get_readable_statement(auth_subject)
60 .where(CustomerMeter.id == id)
61 .options(joinedload(CustomerMeter.meter))
62 )
63 return await repository.get_one_or_none(statement)
66customer_meter = CustomerMeterService() 1a