You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.7KB

  1. import { ApolloServer, PubSub } from "apollo-server/dist";
  2. import { Resolvers, ChangePizzaDto, ChangeToppingDto } from "./generated/graphql";
  3. import { pizzaSchema } from "./schema/pizza";
  4. import { PizzaResolver } from "./resolver/pizza-resolver";
  5. import { ToppingResolver } from "./resolver/topping-resolver";
  6. const resolvers: Resolvers = {
  7. Topping: {
  8. id: (root, args, context) => {
  9. return root.id
  10. },
  11. name: (root, args, context) => {
  12. return root.name
  13. },
  14. },
  15. Pizza: {
  16. id: (root, args, context) => {
  17. return root.id
  18. },
  19. name: (root, args, context) => {
  20. return root.name
  21. },
  22. toppings: (root, args, context) => {
  23. return root.toppings
  24. },
  25. },
  26. Query: {
  27. getPizzaById: (root, args, context) => {
  28. return PizzaResolver.getById(args.pizzaId);
  29. },
  30. getPizzaByName: (root, args, context) => {
  31. return PizzaResolver.getByName(args.pizzaName);
  32. },
  33. listPizza: (root, args, context) => {
  34. return PizzaResolver.list();
  35. },
  36. getToppingById: (root, args, context) => {
  37. return ToppingResolver.getById(args.toppingId);
  38. },
  39. getToppingByName: (root, args, context) => {
  40. return ToppingResolver.getByName(args.toppingName);
  41. },
  42. listTopping: (root, args, context) => {
  43. return ToppingResolver.list();
  44. },
  45. },
  46. Mutation: {
  47. createPizza: (root, args, context) => {
  48. return PizzaResolver.create(args.createPizzaDto as ChangePizzaDto);
  49. },
  50. updatePizza: (root, args, context) => {
  51. return PizzaResolver.update(args.pizzaId, args.updatedPizzaDto as ChangePizzaDto);
  52. },
  53. createTopping: (root, args, context) => {
  54. return ToppingResolver.create(args.createToppingDto as ChangeToppingDto);
  55. },
  56. updateTopping: (root, args, context) => {
  57. return ToppingResolver.update(args.toppingId, args.updatedToppingDto as ChangeToppingDto);
  58. },
  59. },
  60. Subscription: {
  61. pizzasChanged: {
  62. subscribe: () => PizzaResolver.pizzaEvent.asyncIterator(PizzaResolver.events.PIZZA_CHANGED)
  63. },
  64. toppingsChanged: {
  65. subscribe: () => ToppingResolver.toppingEvent.asyncIterator(ToppingResolver.events.TOPPING_CHANGED)
  66. },
  67. }
  68. }
  69. const server = new ApolloServer({
  70. typeDefs: pizzaSchema,
  71. resolvers: resolvers as any,
  72. }
  73. );
  74. server.listen().then(({ url, subscriptionsUrl }) => {
  75. console.log(`🚀 Server ready at ${url}`)
  76. console.log(`🚀 Subscriptions ready at ${subscriptionsUrl}`);
  77. });