Заполнить массив из данных коллекции mongodb (Typescript graphql) - PullRequest
0 голосов
/ 18 июня 2020

Я играю с mon goose на машинописном коде на основе graphql: вот моя проблема

В основном мой код читает объект, заполненный данными, используя функцию PlainToClass ( мои простые данные .....) из преобразователя для создания элементов объекта. Я пытаюсь заменить свои простые данные на мои данные mongodb, где я импортировал фиктивную версию для попытки. Моя цель - заменить и воссоздать ( мои простые данные .....) моими простыми данными из mongodb. любая помощь будет оценена, вот код:

Resolver:

import { Resolver, Query, Arg, Int, ObjectType, Mutation } from 'type-graphql';
import { Product, ProductModel } from './product.type';
//import  {ProductResponse} from './product.type';
import { filterItems, getRelatedItems } from '../../helpers/filter';
import { createProductSamples } from './product.sample';

@Resolver()
export class ProductResolver {
  private readonly items: Product[] = createProductSamples();

  @Query(() => Product)
  async product(
    @Arg('slug', (type) => String) slug: string
  ): Promise<Product | undefined> {
    return await this.items.find((item) => item.slug === slug);
  }

  //this works
  @Query(() => Product, { nullable: false})
    async returnSingleProduct(@Arg("id") id: string){
      return await ProductModel.findById({_id:id});
    }
//this works
    @Query(() => [Product])
    async returnAllProduct(){
      return await ProductModel.find();
    };

}

И это исходная страница, которую я вызываю для данных с функцией для заполнения моего объекта «items»:

import Product from './product.type';
import { plainToClass } from 'class-transformer';

export function createProductSamples() {
  return plainToClass(Product, [{
    id: 1,
    title: 'Strawberry',
    slug: 'strawbery',
    unit: '1 lb',
    price: 5,
    salePrice: 2.5,
    discountInPercent: 50,
    description:
      'The garden strawberry is a widely grown hybrid species of the genus Fragaria, collectively known as the strawberries, which are cultivated worldwide for their fruit. The fruit is widely appreciated for its characteristic aroma, bright red color, juicy texture, and sweetness.',
    type: 'grocery',
    image:
      'https://res.cloudinary.com/redq-inc/image/upload/c_fit,q_auto:best,w_300/v1589614569/pickbazar/grocery/strawberry_d4lzfz.jpg',
    gallery: [
      {
        url:
          'https://res.cloudinary.com/redq-inc/image/upload/v1589614569/pickbazar/grocery/strawberry_d4lzfz.jpg',
      },

      {
        url:
          'https://res.cloudinary.com/redq-inc/image/upload/v1589614569/pickbazar/grocery/strawberry_d4lzfz.jpg',
      },

      {
        url:
          'https://res.cloudinary.com/redq-inc/image/upload/v1589614569/pickbazar/grocery/strawberry_d4lzfz.jpg',
      },

      {
        url:
          'https://res.cloudinary.com/redq-inc/image/upload/v1589614569/pickbazar/grocery/strawberry_d4lzfz.jpg',
      },
    ],
    categories: [
      {
        id: 1,
        title: 'Fruits Vegetables',
        slug: 'fruits-and-vegetables',
      },
      {
        id: 2,
        title: 'Fruits',
        slug: 'fruits',
      },
    ],
  }])
}

Это часть моего редактирования на этой странице, но я много раз пытался использовать useQuery, но не могу использовать его вне компонента реакции и внутри функции или напрямую вызвать запрос преобразователя (смеется)

import { Product } from './product.type';
import { plainToClass } from 'class-transformer';
import { useQuery } from '@apollo/react-hooks';

interface Inventory {
  id: number;
  title: string;
  slug: string;
  price: number;
}

interface InventoryData {
  Inventory: Inventory[];
}

const GetInventory = gql`
  query returnAllProduct{
    id,
    title,
    slug,
    price
  }
`;

export function FetchProductData() {
  const inventory = useQuery<InventoryData>(GetInventory);
  return Inventory[];
  console.log(inventory);
}

export function createProductSamples() {
  FetchProductData();
  return plainToClass(Product, inventory);
}

Я только что открыл для себя мир машинописного текста Apollo graphql за несколько недель go.

Voilà!

EDIT:

еще одна попытка

import { Product } from './product.type';
import { plainToClass } from 'class-transformer';
import { useQuery } from '@apollo/react-hooks';
import gql from 'graphql-tag';

interface Inventory {
  id: number;
  title: string;
  slug: string;
  price: number;
}

interface InventoryData {
  Inventory: Inventory[];
}

const GetInventory = gql`
  query returnAllProduct{
    id,
    title,
    slug,
    price
  }
`;

// export function FetchProductData() {
//   const inventory = useQuery(GetInventory);
//   return inventory;
//   console.log(inventory)
// }

export function createProductSamples() {
  //const inventory = useQuery<InventoryData>(GetInventory);
  const { data } = useQuery<InventoryData>(GetInventory);
  //console.log(inventory);
  // return plainToClass(Product, {data.id.slug});
  return {data && data.Inventory.map(inventory => (
  {inventory.id}
  )};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...