Скажите, что у меня есть определение сущности Typeorm, например:
@Entity()
export class MyEntity {
@PrimaryGeneratedColumn()
id: number;
@Column('varchar', { length: 500 })
name: string;
...
@OneToOne(type => DocumentEntity)
@JoinColumn()
myDoc: DocumentEntity;
@OneToMany(type => DocumentEntity, document => document.myEntity)
@JoinColumn()
otherDocs: DocumentEntity[];
...
}
, поэтому у него есть несколько отношений сущностей, OneToMany / OneToOne
Как мне подойти к этому при создании моих DTO?
Здесь у меня есть пример DTO:
export class CreateMyEntityInputDto {
@IsString()
name: string;
...
@IsOptional()
myDoc: DocumentEntity;
@IsOptional()
otherDocs: DocumentEntity[];
....
}
Мне неясно, какой подход лучше использовать через Graphql
Текущий интерфейс graphql:
####################
# @input
####################
input CreateDealInput {
name: String
...
myDoc: DocumentInput
otherDocs: [DocumentInput]
}
Если бы я проектировал «традиционный» сервис RESTful, я бы создавал свои документы в БД через отдельную конечную точку, ожидая успеха, который возвращает documentID(s):int
затем укажите эти идентификаторы как обычные целые числа в myEntity.myDoc / myEntity.otherDocs
поля при создании нового myEntity
(в отдельной конечной точке).
Использую ли я такой же подход здесь?
т.е. Создать ли объекты документов в отдельном запросе в graphql, проанализировать созданные идентификаторы из успешного ответа, а затем указать эти значения int в определении DTO?
что-то вроде:
@IsOptional()
myDoc: int;
затем, при создании myEntity, загрузите эти (существующие) сущности документа по id: int перед окончательным сохранением через Typeorm?
Или я передаю все поля документа как вложенные сущности в один большой вложенный запрос POST graphql и использую каскад для их создания?