chain get

This commit is contained in:
Robert 2024-02-25 17:19:59 +07:00
parent 1cd490a199
commit 99cef43899
No known key found for this signature in database
GPG Key ID: F631C7FD957D5F22
2 changed files with 23 additions and 0 deletions

View File

@ -34,3 +34,20 @@ async def chain_list_controller(chain_repository: ChainRepositoryDependency):
except Exception:
logger.exception(f"Error during chain list")
return HTTPException(status_code=500, detail="Error during chain list")
@router.get("/{chain_id}")
async def chain_get_controller(
chain_id: str, chain_repository: ChainRepositoryDependency
):
try:
assert (chain := await chain_repository.get_by_id(chain_id))
return chain
except AssertionError:
logger.info(f"Chain not found {chain_id}")
return HTTPException(status_code=404, detail="Chain not found")
except Exception:
logger.exception("Error during chain get")
return HTTPException(status_code=500, detail="Error during chain get")

View File

@ -1,4 +1,5 @@
import pymongo
from uuid import UUID
from typing import List
from pydantic import TypeAdapter
@ -21,3 +22,8 @@ class ChainRepository:
sort_order = [("last_modified", pymongo.DESCENDING)]
chains = [chain async for chain in self.collection.find().sort(sort_order)]
return TypeAdapter(List[Chain]).validate_python(chains)
async def get_by_id(self, chain_id: str) -> Chain | None:
query = {"_id": UUID(chain_id)}
chain = await self.collection.find_one(query)
return Chain.model_validate(chain) if chain else None