from typing import List from bson import ObjectId from motor.motor_asyncio import AsyncIOMotorClient from models.Character import Character class CharacterRepo: def __init__(self, client: AsyncIOMotorClient, db_name="bot_db"): self.collection = client[db_name]["characters"] async def add_character(self, character: Character) -> Character: op = await self.collection.insert_one(character.model_dump()) character.id = op.inserted_id return character async def get_character(self, character_id: str) -> Character | None: res = await self.collection.find_one({"_id": ObjectId(character_id)}) if res is None: return None else: res["id"] = str(res.pop("_id")) return Character(**res) async def get_all_characters(self) -> List[Character]: docs = await self.collection.find().to_list(None) characters = [] for doc in docs: # Конвертируем ObjectId в строку и кладем в поле id doc["id"] = str(doc.pop("_id")) # Создаем объект characters.append(Character(**doc)) return characters