mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-07 07:55:16 +02:00
103 lines
3.7 KiB
Python
103 lines
3.7 KiB
Python
from typing import List
|
|
|
|
from sqlalchemy.future import select
|
|
|
|
from api.db.base_client import BaseDBClient
|
|
from api.db.models import IntegrationModel
|
|
|
|
|
|
class IntegrationClient(BaseDBClient):
|
|
async def get_integrations_by_organization_id(
|
|
self, organization_id: int
|
|
) -> list[IntegrationModel]:
|
|
"""Get all integrations for a specific organization."""
|
|
async with self.async_session() as session:
|
|
result = await session.execute(
|
|
select(IntegrationModel).where(
|
|
IntegrationModel.organisation_id == organization_id
|
|
)
|
|
)
|
|
return result.scalars().all()
|
|
|
|
async def create_integration(
|
|
self,
|
|
integration_id: str,
|
|
provider: str,
|
|
organisation_id: int,
|
|
connection_details: dict,
|
|
created_by: int = None,
|
|
is_active: bool = True,
|
|
) -> IntegrationModel:
|
|
"""Create a new integration for an organization."""
|
|
async with self.async_session() as session:
|
|
new_integration = IntegrationModel(
|
|
integration_id=integration_id,
|
|
organisation_id=organisation_id,
|
|
created_by=created_by,
|
|
is_active=is_active,
|
|
provider=provider,
|
|
connection_details=connection_details,
|
|
)
|
|
session.add(new_integration)
|
|
try:
|
|
await session.commit()
|
|
except Exception as e:
|
|
await session.rollback()
|
|
raise e
|
|
await session.refresh(new_integration)
|
|
return new_integration
|
|
|
|
async def update_integration_status(
|
|
self, integration_id: int, is_active: bool
|
|
) -> IntegrationModel | None:
|
|
"""Update the active status of an integration."""
|
|
async with self.async_session() as session:
|
|
result = await session.execute(
|
|
select(IntegrationModel).where(IntegrationModel.id == integration_id)
|
|
)
|
|
integration = result.scalars().first()
|
|
if not integration:
|
|
return None
|
|
|
|
integration.is_active = is_active
|
|
try:
|
|
await session.commit()
|
|
except Exception as e:
|
|
await session.rollback()
|
|
raise e
|
|
await session.refresh(integration)
|
|
return integration
|
|
|
|
async def update_integration_connection_details(
|
|
self, integration_id: int, connection_details: dict
|
|
) -> IntegrationModel | None:
|
|
"""Update the connection details of an integration."""
|
|
async with self.async_session() as session:
|
|
result = await session.execute(
|
|
select(IntegrationModel).where(IntegrationModel.id == integration_id)
|
|
)
|
|
integration = result.scalars().first()
|
|
if not integration:
|
|
return None
|
|
|
|
integration.connection_details = connection_details
|
|
try:
|
|
await session.commit()
|
|
except Exception as e:
|
|
await session.rollback()
|
|
raise e
|
|
await session.refresh(integration)
|
|
return integration
|
|
|
|
async def get_active_integrations_by_organization(
|
|
self, organization_id: int
|
|
) -> List[IntegrationModel]:
|
|
"""Get all active integrations for a specific organization."""
|
|
async with self.async_session() as session:
|
|
result = await session.execute(
|
|
select(IntegrationModel).where(
|
|
IntegrationModel.organisation_id == organization_id,
|
|
IntegrationModel.is_active == True,
|
|
)
|
|
)
|
|
return result.scalars().all()
|