Ошибка: схема должна содержать уникально именованные типы, но содержит несколько типов с именем «DateTime» - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь сгенерировать схему GraphQL.

У меня есть следующие решатели. 3 из них находятся в разных файлах. Два из них предназначены для сбора данных, в то время как один из них является просто триггерным API, чтобы они собирали больше данных из источника данных.

@Resolver()
export class RefreshDataSchema{
    constructor(
        private readonly aggregatedDataService : AggregateDataService
    ){}

    @Mutation(() => Boolean)
    async refreshTransactions() : Promise<Boolean>{
        Logger.info("Refresh transactions mutation received.");
        return await this.aggregatedDataService.fetchAndAggregateTransactions();
    }

    @Mutation(() => Boolean)
    async refreshAccounts() : Promise<Boolean>{
        Logger.info("Refresh accounts mutation received.");
        return await this.aggregatedDataService.fetchAndAggregateAccounts();
    }
}

@Resolver(() => Account)
export class AccountSchema extends Account{

    @Query(() => Account)
    async getAccount(
        @Arg('query', () => AccountQuery)
        query: AccountQuery,
    ) {
        const data = await Account.findOne({ where: query });
        if (data === undefined) {
            throw new Error(`Account for query "${JSON.stringify(query)}" could not be found!`);
        }
        return data;
    }

    @Query(() => [Account])
    async getAccounts(
        @Arg('query', () => AccountQuery)
        query: AccountQuery,
        @Arg('first', { defaultValue: 10 })
        first: number = 10,
        @Arg('offset', { defaultValue: 0 })
        offset: number = 0,
    ) {
        Logger.info(`GraphQL Query: get accounts. @First: ${first} @Offset: ${offset} received.`);
        const data = Account.find({
            take: first,
            skip: offset,
            order: { balance_in_cents: 'DESC' },
            where: query,
        });

        if(data === undefined){
            throw new Error(`Account for query "${JSON.stringify(query)}" could not be found!`);
        }

        return data;
    }

};

@Resolver(() => Transaction)
export class TransactionSchema extends Transaction{

    @Query(() => [Transaction])
    async getTransactions(
        @Arg('query', () => TransactionQuery)
        query: TransactionQuery,
        @Arg('first', { defaultValue: 10 })
        first: number = 10,
        @Arg('offset', { defaultValue: 0 })
        offset: number = 0,
    ) {
        Logger.info(`GraphQL Query: get transactions. @Query: ${query} @First: ${first} @Offset: ${offset} received.`);
        try{
            let data = await Transaction.find({
                take: first,
                skip: offset,
                order: { executed_on: 'DESC' },
                where: query
            })
            Logger.info("Transaction data retrieved succesfully.");
            return data;
        } catch(err) {
            Logger.error(err);
            return err;
        }

    }

}

И код для генерации схемы, которая является федеративной, выглядит следующим образом:

import { buildSchemaSync} from 'type-graphql';
import {createResolversMap} from 'type-graphql/dist/utils/createResolversMap';
import {
    TransactionSchema, AccountSchema, RefreshDataSchema
} from '../graphql';
import { printSchema, buildFederatedSchema } from '@apollo/federation';
import { gql } from 'apollo-server-express';

const compiledSchema = buildSchemaSync({
    resolvers: [
        TransactionSchema,
        AccountSchema,
        RefreshDataSchema
    ],
});

export const schema = buildFederatedSchema(
    {
      typeDefs: gql(printSchema(compiledSchema)),
      resolvers: createResolversMap(compiledSchema) as any
    }
  );

Когда я пытаюсь сгенерировать, я получаю следующую ошибку:

Error: Schema must contain uniquely named types but contains multiple types named "DateTime".

Не уверен, откуда он получает этот "DateTime".

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Существует проблема с Type-Graphql. Попробуйте использовать "type-graphql": "^ 0.18.0-beta.10".

0 голосов
/ 17 марта 2020

Это официальный способ создания определений типов и карты распознавателя из классов распознавателя:

import { buildTypeDefsAndResolvers } from 'type-graphql';

const { typeDefs, resolvers } = await buildTypeDefsAndResolvers({
  resolvers: [FirstResolver, SecondResolver],
});

Это показано в документах здесь .

...