import { config } from 'dotenv';
config();

import { ApolloServer } from 'apollo-server';
import { createRateLimitDirective } from 'graphql-rate-limit';
import debug from '../modules/logger';
import { resolvers, typeDefs } from './root';

const rateLimitDirective = createRateLimitDirective({ identifyContext: (ctx) => ctx.id });
const { NODE_ENV, PORT } = process.env;

const logger = debug('app');
const server = new ApolloServer({
  schemaDirectives: {
    rateLimit: rateLimitDirective
  },
  typeDefs,
  resolvers,
  introspection: true,
  playground: {
    endpoint: '/v1'
  },
  tracing: NODE_ENV === 'development'
});

server.listen(+PORT || 2434).then(({ url }) => {
  logger.info(`Server ready at ${url}`);
});