From c6e2dd3641a99c36638d1517af0b047b6aa07663 Mon Sep 17 00:00:00 2001 From: Robert Date: Sun, 25 Feb 2024 16:35:34 +0700 Subject: [PATCH] chain list --- chain_service/controllers/chain.py | 11 +++++++++++ chain_service/repositories/chain.py | 15 ++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/chain_service/controllers/chain.py b/chain_service/controllers/chain.py index 768ef7d..942596b 100644 --- a/chain_service/controllers/chain.py +++ b/chain_service/controllers/chain.py @@ -23,3 +23,14 @@ async def chain_upsert_controller( except Exception: logger.exception(f"Error during chain upsert {chain.model_dump_json()}") return HTTPException(status_code=500, detail="Error during chain upsert") + + +@router.get("/list") +async def chain_list_controller(chain_repository: ChainRepositoryDependency): + try: + chains = await chain_repository.get_list() + return chains + + except Exception: + logger.exception(f"Error during chain list") + return HTTPException(status_code=500, detail="Error during chain list") diff --git a/chain_service/repositories/chain.py b/chain_service/repositories/chain.py index 778850a..02db532 100644 --- a/chain_service/repositories/chain.py +++ b/chain_service/repositories/chain.py @@ -1,3 +1,7 @@ +import pymongo +from typing import List +from pydantic import TypeAdapter + from chain_service.database.database import Database from chain_service.database.models.chain import Chain @@ -8,8 +12,13 @@ class ChainRepository: self.collection = database.get_collection("chains") async def upsert(self, chain: Chain) -> Chain: - await self.collection.replace_one( - {"_id": chain.id}, chain.model_dump(by_alias=True), upsert=True - ) + query = {"_id": chain.id} + payload = chain.model_dump(by_alias=True) + await self.collection.replace_one(query, payload, upsert=True) return chain + + async def get_list(self) -> List[Chain]: + 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)