Coverage for polar/customer_portal/endpoints/organization.py: 89%
17 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 typing import Annotated
3from fastapi import Depends, Path
5from polar.exceptions import ResourceNotFound
6from polar.openapi import APITag
7from polar.postgres import AsyncSession, get_db_session
8from polar.routing import APIRouter
10from ..schemas.organization import CustomerOrganizationData
11from ..service.organization import (
12 customer_organization as customer_organization_service,
13)
15router = APIRouter(prefix="/organizations", tags=["organizations", APITag.public])
17OrganizationSlug = Annotated[str, Path(description="The organization slug.")]
18OrganizationNotFound = {
19 "description": "Organization not found.",
20 "model": ResourceNotFound.schema(),
21}
24@router.get(
25 "/{slug}",
26 summary="Get Organization",
27 response_model=CustomerOrganizationData,
28 responses={404: OrganizationNotFound},
29)
30async def get(
31 slug: OrganizationSlug,
32 session: AsyncSession = Depends(get_db_session),
33) -> CustomerOrganizationData:
34 """Get a customer portal's organization by slug."""
35 organization = await customer_organization_service.get_by_slug(session, slug)
37 if organization is None: 37 ↛ 38line 37 didn't jump to line 38 because the condition on line 37 was never true
38 raise ResourceNotFound()
40 return CustomerOrganizationData.model_validate(
41 {"organization": organization, "products": organization.products}
42 )