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
Descripción
Implementar la clase
ResourceRepositoryensrc/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
BaseRepository."resources".2. Método
createdef create(self, resource: Resource) -> Resource3. Método
search(Full-Text Search)def search(self, query: str) -> List[Resource]$texty$search.scorede relevancia ({"$meta": "textScore"}) y ordenar por ese puntaje para mostrar los resultados más relevantes primero.4. Método
get_by_categorydef get_by_category(self, category: str) -> List[Resource]5. Método
get_recentdef get_recent(self, limit: int = 5) -> List[Resource]added_atdescendente).Ejemplo de Uso
Criterios de Aceptación
BaseRepository.searchdevuelve resultados relevantes basados en la consulta de texto.get_by_categoryfiltra correctamente.