mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-22 08:38:13 +02:00
Initial Commit 🚀 🚀
This commit is contained in:
commit
4f2a629340
444 changed files with 76863 additions and 0 deletions
103
api/db/integration_client.py
Normal file
103
api/db/integration_client.py
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue