1602 / 1602/jugglingdb

Feature: promises for related records

Abierto
#181 2 comentarios 0 reacciones 1 asignado Reclamado por @anatoliychakkaev Ver en GitHub
Lenguaje dominante
JavaScript
Estrellas
2k
Forks
238
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

Currently, to display parent-child references in views, when using jugglingDB in CompoundJS, we need to do something like:
controller:

``` javascript
User.findOne({userId: id}, function(err, user){
user.Posts.all(
function(posts){
this.posts = posts;
render({user: user, posts: posts})
})
})
```

allowing in the view:

``` jade
.li #{user.name}
ul.posts
- each post in posts
li.post #{post.title}
```

Which while not awful for a single relationship is grim - controllers have to force load & attach child records in order to access them in views.
As you add more complex or nested relationships it becomes difficult to keep clear separation between controllers & stay dry.
Compound makes sharing code between controllers really simple - so you can implement patterns to minimise overlap - but it's a bit of a band aid.

A nicer solution would be for jugglingDB to return promises - for relationships - which allow implicit loading of associated child records.
With such an approach - it would allow the controller to look more like:

``` javascript
User.findOne({userId: id}, {withChildren: true}, function(err, user){
render({user: user})
})
```

and the view being:

``` javascript
.li #{user.name}
ul.posts
- each post in user.posts
li.post #{post.title}
```

Here I've gone for an explicit approach to requesting child relationships when fetching the user - to balance the fear/concern about memory or runtime performance.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

El issue trata sobre agregar carga diferida basada en promesas para las relaciones en jugglingDB, un ORM. Comience examinando el código de definición del modelo y configuración de relaciones, probablemente en lib/relation.js o similar. Analice cómo se implementan las consultas findOne y similares para comprender dónde inyectar la opción 'withChildren'. Revise las pruebas existentes para relaciones para ver el patrón de callback actual. Implementar esto requiere comprender la estructura interna del ORM y el manejo asíncrono.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
javascript, nodejs
Área
backend, databases
Tipo de issue
Nueva funcionalidad
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.