From 5473be3675aafbef4f83c0f3faf96ae2787478ba Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 13 Mar 2024 03:01:26 +0700 Subject: [PATCH] more methods --- chain_service/controllers/namespace.py | 17 +++++++++++++++++ chain_service/repositories/namespace.py | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/chain_service/controllers/namespace.py b/chain_service/controllers/namespace.py index 65455de..d706e49 100644 --- a/chain_service/controllers/namespace.py +++ b/chain_service/controllers/namespace.py @@ -21,3 +21,20 @@ async def namespace_controller( except Exception: logger.exception(f"Error during namespace upsert {namespace.model_dump_json()}") return HTTPException(status_code=500, detail="Error during namespace upsert") + + +# @router.get("/{namespace_name}") +async def namespace_get_by_name_controller( + namespace_name: str, namespace_repository: NamespaceRepositoryDependency +): + try: + assert (namespace := await namespace_repository.get_by_name(namespace_name)) + return namespace + + except AssertionError: + logger.warning(f"Namespace not found {namespace_name}") + return HTTPException(status_code=404, detail="Namespace not found") + + except Exception: + logger.exception("Error during chain get") + return HTTPException(status_code=500, detail="Error during namespace get") diff --git a/chain_service/repositories/namespace.py b/chain_service/repositories/namespace.py index 5ea5c30..f1bade0 100644 --- a/chain_service/repositories/namespace.py +++ b/chain_service/repositories/namespace.py @@ -1,6 +1,9 @@ from chain_service.database.database import Database from chain_service.database.models.namespace import Namespace +from uuid import UUID +from loguru import logger + class NamespaceRepository: @@ -12,3 +15,17 @@ class NamespaceRepository: payload = namespace.model_dump(by_alias=True) await self.collection.replace_one(query, payload, upsert=True) return namespace + + async def get_by_id(self, namespace_id: str) -> Namespace | None: + try: + query = {"_id": UUID(namespace_id)} + namespace = await self.collection.find_one(query) + return Namespace.model_validate(namespace) if namespace else None + + except ValueError: + logger.error(f"Cannot convert {namespace_id} to UUID") + + async def get_by_name(self, name: str) -> Namespace | None: + query = {"name": name} + namespace = await self.collection.find_one(query) + return Namespace.model_validate(namespace) if namespace else None