diff --git a/chain_service/controllers/chain.py b/chain_service/controllers/chain.py index 85edada..768ef7d 100644 --- a/chain_service/controllers/chain.py +++ b/chain_service/controllers/chain.py @@ -8,17 +8,18 @@ from typing import Annotated from fastapi import APIRouter, Depends, HTTPException router = APIRouter(prefix="/chain") +ChainRepositoryDependency = Annotated[ChainRepository, Depends(get_chain_repository)] @router.post("/") -async def chain_create_controller( +async def chain_upsert_controller( chain: Chain, - chain_repository: Annotated[ChainRepository, Depends(get_chain_repository)], + chain_repository: ChainRepositoryDependency, ): try: - created_chain = await chain_repository.create(chain) - return created_chain + upserted_chain = await chain_repository.upsert(chain) + return upserted_chain except Exception: - logger.exception(f"Error during chain creation {chain.model_dump_json()}") - return HTTPException(status_code=500, detail="Error during chain creation") + logger.exception(f"Error during chain upsert {chain.model_dump_json()}") + return HTTPException(status_code=500, detail="Error during chain upsert") diff --git a/chain_service/repositories/chain.py b/chain_service/repositories/chain.py index 259f7e2..778850a 100644 --- a/chain_service/repositories/chain.py +++ b/chain_service/repositories/chain.py @@ -7,6 +7,9 @@ class ChainRepository: def __init__(self, database: Database): self.collection = database.get_collection("chains") - async def create(self, chain: Chain) -> Chain: - await self.collection.insert_one(chain.model_dump(by_alias=True)) + async def upsert(self, chain: Chain) -> Chain: + await self.collection.replace_one( + {"_id": chain.id}, chain.model_dump(by_alias=True), upsert=True + ) + return chain