Я получаю эту ошибку, когда пытаюсь вернуть пользовательский dto из распознавателя. (node:28156) UnhandledPromiseRejectionWarning: Error: Cannot determine GraphQL output type for getProducts
Вот как выглядит мой код.
product.entity.ts
import {
Entity,
Column,
PrimaryGeneratedColumn,
BaseEntity,
BeforeInsert,
} from 'typeorm';
import { ObjectType, Field, ID, Float, Int } from '@nestjs/graphql';
@ObjectType()
@Entity()
export class Product extends BaseEntity {
@Field(() => ID)
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ default: '', select: false })
ratingsString: string;
@Field(() => [Int])
ratings;
@BeforeInsert()
setRatingsString() {
this.ratingsString = this.ratings.join(',');
}
}
product.resolver.ts
import { Resolver, Query, Args, ResolveField, Int, Parent } from '@nestjs/graphql';
import { Product } from './product.entity';
import { ProductService } from './product.service';
@Resolver(() => Product)
export class ProductResolver {
constructor(private productService: ProductService) {}
@Query(() => GetProductDto, { name: 'products' })
async getProducts(@Args() page: number) {
return this.productService.getProducts(page);
}
}
product.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Product } from './product.entity';
import { GetProductDto } from './product.dto';
@Injectable()
export class ProductService {
constructor(
@InjectRepository(Product) private productRepo: Repository<Product>,
) {}
async getProducts(page: number): Promise<GetProductDto> {
const MAX_PRODUCT_PER_PAGE = 20;
const start = page < 1 ? 1 : page;
const [products, productsCount] = await this.productRepo.findAndCount({
skip: (start - 1) * MAX_PRODUCT_PER_PAGE,
take: MAX_PRODUCT_PER_PAGE,
});
const productList = products.map(product => {
product.ratings = product.ratingsString.split(',').map(Number);
delete product.ratingsString;
return product;
});
return {
products: productList,
total: productsCount,
};
}
}
product.dto.ts
import { Field, Int, InputType } from '@nestjs/graphql';
import { Product } from './product.entity';
@InputType()
export class GetProductDto {
@Field(() => [Product])
products: Product[];
@Field(() => Int)
total: number;
}
Ожидается, что при вызове запроса продуктов я получу объект с продуктами и общим количеством. Продукты Whee будут моим множеством продуктов. Что я делаю не так?