diff --git a/chain_service/database/models/running_chain.py b/chain_service/database/models/running_chain.py new file mode 100644 index 0000000..4fe8057 --- /dev/null +++ b/chain_service/database/models/running_chain.py @@ -0,0 +1,9 @@ +from .base import BaseConfig +from pydantic import BaseModel + + +class RunningChain(BaseModel): + chain_id: str + + class Config(BaseConfig): + pass diff --git a/chain_service/dependencies/running_chain_repository.py b/chain_service/dependencies/running_chain_repository.py new file mode 100644 index 0000000..fb65f00 --- /dev/null +++ b/chain_service/dependencies/running_chain_repository.py @@ -0,0 +1,16 @@ +from .database import DatabaseDependency +from chain_service.repositories.running_chain import RunningChainRepository + +from fastapi import Depends +from typing import Annotated + + +def get_running_chain_repository( + database: DatabaseDependency, +) -> RunningChainRepository: + return RunningChainRepository(database=database) + + +RunningChainRepositoryDependency = Annotated[ + RunningChainRepository, Depends(get_running_chain_repository) +] diff --git a/chain_service/repositories/running_chain.py b/chain_service/repositories/running_chain.py new file mode 100644 index 0000000..8f326d1 --- /dev/null +++ b/chain_service/repositories/running_chain.py @@ -0,0 +1,23 @@ +from chain_service.database.database import Database +from chain_service.database.models.running_chain import RunningChain + +from uuid import UUID +from loguru import logger + + +class RunningChainRepository: + + def __init__(self, database: Database): + self.collection = database.get_collection("running_chains") + + async def add(self, chain_id: str): + query = payload = {"chainId": chain_id} + await self.collection.replace_one(query, payload, upsert=True) + + async def exists(self, chain_id: str) -> bool: + query = {"chainId": chain_id} + return bool(await self.collection.find_one(query)) + + async def delete(self, chain_id: str): + query = {"chainId": chain_id} + await self.collection.delete_one(query)