Цикл 4: не примитивные свойства вместо отношений - PullRequest
0 голосов
/ 23 октября 2018

Используя Loopback 4, я хочу использовать безопасность типов Typescript в своем коде приложения при получении проверки схемы от декораторов репозитория, но сохранить свойство как сериализованный json (в данном случае Postgres bson), а не какотдельный объект с отношением FK.

Рассмотрим модель адресной книги Contact, в которой может быть список телефонных номеров:

@model()
export class PhoneNumber {

  @property({ required: true })
  number: string;

  @property()
  type: string; 

}

@model()
export class Contact extends Entity {

  @property({ id: true, required: true })
  id: string;

  @property({ required: true })
  email: string;

  @property({ required: true })
  name: string;

  @property.array(PhoneNumber)
  phoneNumbers: PhoneNumber[];

  constructor(data?: Partial<Contact>) {
    super(data);
  }
}

В приведенном выше примере я получаю полную проверку схемы,но если я пытаюсь сохранить экземпляр Contact, используя сгенерированный Repository, который расширяет DefaultCrudRespository, он просто отбрасывает все, что было предоставлено в поле phoneNumbers, и сохраняет пустой столбец в БД.

Если я изменю аннотацию свойства на:

  @property.array(Object)
  phoneNumbers: PhoneNumber[];

Это сохранит поле должным образом, сериализованное как json, но не будет пытаться проверить поле, а также не будет указывать тип какмассив PhoneNumber в сгенерированной спецификации openapi.json

Кажется, что Loopback 3 имел поддержку встроенных моделей: https://loopback.io/doc/en/lb3/Embedded-models-and-relations.html

Нет упоминаний об этом в Loopback4 документа, хотя.

...