Coverage for polar/customer_portal/endpoints/organization.py: 68%

17 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-12-05 15:52 +0000

1from typing import Annotated 1a

2 

3from fastapi import Depends, Path 1a

4 

5from polar.exceptions import ResourceNotFound 1a

6from polar.openapi import APITag 1a

7from polar.postgres import AsyncSession, get_db_session 1a

8from polar.routing import APIRouter 1a

9 

10from ..schemas.organization import CustomerOrganizationData 1a

11from ..service.organization import ( 1a

12 customer_organization as customer_organization_service, 

13) 

14 

15router = APIRouter(prefix="/organizations", tags=["organizations", APITag.public]) 1a

16 

17OrganizationSlug = Annotated[str, Path(description="The organization slug.")] 1a

18OrganizationNotFound = { 1a

19 "description": "Organization not found.", 

20 "model": ResourceNotFound.schema(), 

21} 

22 

23 

24@router.get( 1a

25 "/{slug}", 

26 summary="Get Organization", 

27 response_model=CustomerOrganizationData, 

28 responses={404: OrganizationNotFound}, 

29) 

30async def get( 1ab

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) 

36 

37 if organization is None: 

38 raise ResourceNotFound() 

39 

40 return CustomerOrganizationData.model_validate( 

41 {"organization": organization, "products": organization.products} 

42 )