loopbackio / loopbackio/loopback-next

[EPIC] Composite primary/foreign keys

Abierto
#1,830 22 comentarios 66 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

epic feature major Relations Repository REST
Lenguaje dominante
TypeScript
Estrellas
5.1k
Forks
1.1k
Merge medio
2 d 21 h
PR fusionados (30 d)
27

Descripción

_See https://github.com/strongloop/loopback/issues/2080 for the original discussion in LB 2.x/3.x._

LoopBack should support models using composite keys, where a primary key or a foreign key is composed from multiple properties.

Let's consider the following models as an example:

```ts
// A (GitHub) repository is identified by the pair [user, name]
// and has many issues
@model
class Repository {
@property({id: true})
user: string;

@property({id: true}
name: string;

@hasMany(() => Issue)
issues: Issue[];
}

// An issue belongs to a repository
@model
class Issue {
// how to specify @belongsTo relation?
}
```

Functional areas we need to cover:

- How to define a model with a composite primary key (e.g. Repository above)?
- Connectors must understand composite ids and convert them to a concept the target database understands. SQL is easy because it supports composite primary keys OOTB, NoSQL like MongoDB and Cloudant can be tricky.
- create a new model
- find a model by id
- update (patch/replace) a model by id
- delete a model by id
- (etc.)
- Autoupdate/automigrate need to support composite primary keys too
- How to define composite foreign key in a model belonging to another model (e.g. Issue above)
- Relation repositories must work with composite keys
- How to expose a model with a composite primary key via REST API?
- How to expose a relation using a composite foreign key via REST API?
- Controller templates need to produce code that works with composite primary/foreign keys.

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con la discusión enlazada sobre LB 2.x/3.x y el ejemplo del modelo Repository/Issue. El alcance del trabajo abarca las definiciones de modelos, los conectores, automigrate/autoupdate, los repositorios de relaciones, la exposición REST y las plantillas de controladores; el trabajo estará terminado cuando exista un soporte acordado para cada operación enumerada y un plan de implementación comprobable.

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

Evaluación

Stack tecnológico
typescript
Área
api, backend, databases
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
20/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.