32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
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:
|
|
|
|
def __init__(self, database: Database):
|
|
self.collection = database.get_collection("namespaces")
|
|
|
|
async def upsert(self, namespace: Namespace) -> Namespace:
|
|
query = {"_id": namespace.id}
|
|
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
|