qpa-server/server/src/graphql.ts

82 lines
2.2 KiB
TypeScript

import Repository from "./repository";
import UserManager from "./user";
import SessionManager from "./auth/SessionManager";
import CalendarManager from "./Calendar/CalendarManager";
import EventManager from "./Events/EventManager";
import {ApolloServer} from 'apollo-server';
import {makeExecutableSchema} from "graphql-tools";
import EventsResolvers from './Events/eventsResolvers'
import {importSchema} from 'graphql-import';
import AuthResolvers from "./Auth/authResolvers";
import { DIRECTIVES } from 'graphql-codegen-typescript-mongodb';
import {readFileSync} from "fs";
interface Dependencies {
repository: Repository,
userManager: UserManager,
sessionManager: SessionManager,
calendarManager: CalendarManager,
eventManager: EventManager
}
export default class GraphQLInterface {
repository: Repository
userManager: UserManager
sessionManager: SessionManager
calendarManager: CalendarManager
eventManager: EventManager
constructor(dependencies: Dependencies) {
this.repository = dependencies.repository
this.userManager = dependencies.userManager
this.sessionManager = dependencies.sessionManager
this.calendarManager = dependencies.calendarManager
this.eventManager = dependencies.eventManager
}
start = () => {
const eventsResolvers = new EventsResolvers({
eventManager: this.eventManager,
calendarManager: this.calendarManager
})
const authResolvers = new AuthResolvers({
repository: this.repository,
sessionManager: this.sessionManager,
userManager: this.userManager
})
const typeDefs = readFileSync(__dirname + '/schema.graphql', 'utf8');
const schema = makeExecutableSchema({
typeDefs: [
DIRECTIVES,
typeDefs
],
resolvers: {
Query: {
...this.resolvers.Query,
...eventsResolvers.Query,
...authResolvers.Query
},
Mutation: {
...this.resolvers.Mutation,
...eventsResolvers.Mutation,
...authResolvers.Mutation
}
},
});
const server = new ApolloServer({schema});
server.listen().then(({url}) => {
console.log(`🚀 Server ready at ${url}`);
});
}
resolvers = {
Query: {},
Mutation: {}
};
}