Merge branch 'organizations' (cherry-picked)
This commit is contained in:
+26
-1
@@ -2,7 +2,7 @@
|
||||
from collections.abc import AsyncGenerator
|
||||
|
||||
import jwt
|
||||
from fastapi import Depends, HTTPException, status
|
||||
from fastapi import Depends, Header, HTTPException, status
|
||||
from fastapi.security import OAuth2PasswordBearer
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
@@ -14,6 +14,12 @@ from app.repositories.deal_repo import DealRepository
|
||||
from app.repositories.org_repo import OrganizationRepository
|
||||
from app.repositories.user_repo import UserRepository
|
||||
from app.services.auth_service import AuthService
|
||||
from app.services.organization_service import (
|
||||
OrganizationAccessDeniedError,
|
||||
OrganizationContext,
|
||||
OrganizationContextMissingError,
|
||||
OrganizationService,
|
||||
)
|
||||
from app.services.user_service import UserService
|
||||
|
||||
oauth2_scheme = OAuth2PasswordBearer(tokenUrl=f"{settings.api_v1_prefix}/auth/token")
|
||||
@@ -51,6 +57,12 @@ def get_auth_service(
|
||||
)
|
||||
|
||||
|
||||
def get_organization_service(
|
||||
repo: OrganizationRepository = Depends(get_organization_repository),
|
||||
) -> OrganizationService:
|
||||
return OrganizationService(repository=repo)
|
||||
|
||||
|
||||
async def get_current_user(
|
||||
token: str = Depends(oauth2_scheme),
|
||||
repo: UserRepository = Depends(get_user_repository),
|
||||
@@ -72,3 +84,16 @@ async def get_current_user(
|
||||
if user is None:
|
||||
raise credentials_exception
|
||||
return user
|
||||
|
||||
|
||||
async def get_organization_context(
|
||||
x_organization_id: int | None = Header(default=None, alias="X-Organization-Id"),
|
||||
current_user: User = Depends(get_current_user),
|
||||
service: OrganizationService = Depends(get_organization_service),
|
||||
) -> OrganizationContext:
|
||||
try:
|
||||
return await service.get_context(user_id=current_user.id, organization_id=x_organization_id)
|
||||
except OrganizationContextMissingError as exc:
|
||||
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)) from exc
|
||||
except OrganizationAccessDeniedError as exc:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc
|
||||
|
||||
Reference in New Issue
Block a user