Skip to content

Crear repositorio ResourceRepository #59

Description

@YarielZC

Descripción

Implementar la clase ResourceRepository en src/repositories/resource_repository.py.
Este repositorio gestionará la biblioteca de recursos y enlaces de la comunidad.

La funcionalidad distintiva de este repositorio es la búsqueda de texto completo (Full-Text Search), que permitirá a los usuarios encontrar recursos buscando palabras clave en el título, aprovechando el índice de texto que definimos en la infraestructura.

Tareas Técnicas

1. Definición de Clase

  • Heredar de BaseRepository.
  • Inicializar con la colección "resources".

2. Método create

  • Firma: def create(self, resource: Resource) -> Resource
  • Responsabilidad: Insertar el recurso en la BD.

3. Método search (Full-Text Search)

  • Firma: def search(self, query: str) -> List[Resource]
  • Responsabilidad:
    • Ejecutar una consulta usando el operador $text y $search.
    • Opcional: Proyectar el score de relevancia ({"$meta": "textScore"}) y ordenar por ese puntaje para mostrar los resultados más relevantes primero.

4. Método get_by_category

  • Firma: def get_by_category(self, category: str) -> List[Resource]
  • Responsabilidad: Filtrar recursos por coincidencia exacta de categoría.

5. Método get_recent

  • Firma: def get_recent(self, limit: int = 5) -> List[Resource]
  • Responsabilidad: Obtener los últimos recursos añadidos (ordenar por added_at descendente).

Ejemplo de Uso

def find_docs(db, search_term: str):
    repo = ResourceRepository(db)
    
    # Búsqueda inteligente (ej: "fastapi tutorial")
    results = repo.search(search_term)
    
    for res in results:
        print(f"🔗 {res.title} - {res.url}")

def list_backend_resources(db):
    repo = ResourceRepository(db)
    resources = repo.get_by_category("Backend")

Criterios de Aceptación

  • La clase hereda de BaseRepository.
  • El método search devuelve resultados relevantes basados en la consulta de texto.
  • El método get_by_category filtra correctamente.
  • Se pueden añadir y eliminar recursos.

Metadata

Metadata

Assignees

Labels

EASY ISSUEThis label will be used only for issues considered easy due to their level of complexity.enhancementNew feature or request

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions