diff --git a/src/app.ts b/src/app.ts index 1ad96d1..2b32ef8 100644 --- a/src/app.ts +++ b/src/app.ts @@ -6,11 +6,13 @@ import passport from 'passport'; import config from './core/config'; import morgan from './core/morgan'; -import routes from './routes/v1'; +import { startApolloServer } from './core/graphql/apollo'; import JwtStrategy from './core/passport'; -import { NotFound } from './utils/ApiError'; import { errorConverter, errorHandler } from './core/middlewares/error'; +import routes from './routes/v1'; +import { NotFound } from './utils/ApiError'; + const app = express(); if (config.environment !== 'test') { @@ -35,6 +37,8 @@ app.use((req, res, next) => { app.use(errorConverter); app.use(errorHandler); +startApolloServer(); + app.use('/v1', routes); export default app; diff --git a/src/core/graphql/apollo.ts b/src/core/graphql/apollo.ts new file mode 100644 index 0000000..b4911cc --- /dev/null +++ b/src/core/graphql/apollo.ts @@ -0,0 +1,13 @@ +import { ApolloServer } from '@apollo/server'; +import { startStandaloneServer } from '@apollo/server/standalone'; +import typeDefs from './typeDefs'; +import logger from '../logger'; + +const startApolloServer = async () => { + const server = new ApolloServer({ typeDefs }); + const { url } = await startStandaloneServer(server); + + logger.info(`Apollo server running at: ${url}`); +}; + +export { startApolloServer }; diff --git a/src/typedefs/typeDefs.ts b/src/core/graphql/typeDefs.ts similarity index 69% rename from src/typedefs/typeDefs.ts rename to src/core/graphql/typeDefs.ts index b91387c..edc55fc 100644 --- a/src/typedefs/typeDefs.ts +++ b/src/core/graphql/typeDefs.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; const typeDefs = gql` - input QueryUserRequest { + input UserRequest { uuid: String } @@ -9,7 +9,7 @@ const typeDefs = gql` uuid: String! email: String name: String! - created: DateTime + created: DateTime! } type ApiError { @@ -18,7 +18,7 @@ const typeDefs = gql` } type Query { - queryUserDetails(request: QueryUserRequest): QueryUserResponse + userDetails(request: UserRequest): UserResponse } `;