Генератор схемы не может определить тип вывода GraphQL для пользовательского объекта в DTO - PullRequest
2 голосов
/ 04 июля 2019

Исходя из фона laravel, я пытаюсь попасть в node.js / graphQL / mongoDB и наткнулся на фреймворк nest.js, который выглядит довольно хорошо. Поэтому я попытался настроить простой API-интерфейс GraphQL для тестирования и понимания того, как все это работает. Для этого я создал схему мангуста для пользователя, а также модель (type-graphql) и DTO для создания такого пользователя с помощью мутации.

Это работает довольно хорошо, но затем я хотел добавить вложенный объект с именем settings в user, чтобы попробовать, как это будет работать, и я просто не понимаю его, а также не могу найти * nest.js или type-graphql конкретных примеров. для такой реализации. Разве это просто невозможно с использованием подхода «сначала код» nest.js? Поскольку генератор схемы всегда выдает мне ошибку при компиляции, говоря:

"UnhandledPromiseRejectionWarning: Ошибка: невозможно определить тип вывода GraphQL для настроек".

user.model.ts

import { Field, ID, ObjectType } from 'type-graphql'
import UserSettingsType from './user.settings.type'

@ObjectType()
export class User {
  @Field((type) => ID)
  id: string

  @Field()
  email: string

  @Field((type) => UserSettingsType)
  settings: {}
}

user.settings.type.ts

import { Field, ObjectType } from 'type-graphql'

@ObjectType()
export class UserSettings {
  @Field()
  theme: string

  @Field()
  description?: string

  @Field((type) => [String])
  visited: string[]
}

новый-user.input.ts

import { IsOptional, IsEmail, IsBoolean, Length, MaxLength, IsArray } from 'class-validator'
import { Field, InputType } from 'type-graphql'
import UserSettingsType from '../graphql/user.settings.type'

@InputType()
export class NewUserInput {
  @Field()
  @IsEmail()
  email: string

  @Field((type) => UserSettingsType)
  @IsOptional()
  @IsArray()
  settings: {}
}

Как видите, я определил новый тип UserSettings в отдельном файле (следуя рекомендациям nest.js) и выделил его как тип в модели User, а также в классе DTO для нового пользователя. Ошибка генерируется для DTO class (НЕ для модели), и если я изменяю ее там на что-то вроде [String] вместо UserSettingsType, она компилируется.

Я не уверен, что вам нужна решающая логика или логика сервиса / мангуста для этой актуальной проблемы, если да, я тоже могу опубликовать это, конечно!

...