coder16
updated claudio
67aa1ca
Raw
History Blame Contribute Delete
1.59 kB
"""Creación de índices de MongoDB.
Se ejecuta una vez al arrancar la aplicación (desde el ``lifespan``).
La creación de índices es idempotente: MongoDB la ignora si el índice
ya existe.
"""
from __future__ import annotations
import logging
from pymongo import ASCENDING, DESCENDING
from app.database import collections
from app.database.mongodb import get_database
logger = logging.getLogger(__name__)
async def ensure_indexes() -> None:
"""Crea los índices necesarios para todas las colecciones."""
db = get_database()
# Usuarios: username y email únicos.
await db[collections.USERS].create_index("username", unique=True)
await db[collections.USERS].create_index("email", unique=True)
# Categorías: slug único y búsqueda por jerarquía.
await db[collections.CATEGORIAS].create_index("slug", unique=True)
await db[collections.CATEGORIAS].create_index("parent_id")
# Negocios: filtros habituales.
await db[collections.NEGOCIOS].create_index("categoria_id")
await db[collections.NEGOCIOS].create_index("activo")
await db[collections.NEGOCIOS].create_index([("nombre", ASCENDING)])
# Items: filtros por negocio y tipo.
await db[collections.ITEMS].create_index("negocio_id")
await db[collections.ITEMS].create_index([("negocio_id", ASCENDING), ("tipo", ASCENDING)])
# Reseñas: listado por negocio y orden cronológico.
await db[collections.RESENAS].create_index(
[("negocio_id", ASCENDING), ("fecha_creacion", DESCENDING)]
)
logger.info("Índices de MongoDB verificados/creados.")