Advertisement
Guest User

Untitled

a guest
Oct 8th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const { makeExecutableSchema } = require('graphql-tools');
  2. const { fileLoader, mergeResolvers, mergeTypes } = require('merge-graphql-schemas');
  3. const path = require('path');
  4.  
  5. const resolversArray = fileLoader(
  6.   path.join(__dirname, './resolvers/'),
  7.   { recursive: true, extensions: ['.js'] },
  8. );
  9. const typesArray = fileLoader(
  10.   path.join(__dirname, './types/'),
  11.   { recursive: true, extensions: ['.gql'] },
  12. );
  13. const resolvers = mergeResolvers(resolversArray);
  14. const typeDefs = mergeTypes(typesArray, { all: true });
  15. module.exports = makeExecutableSchema({ typeDefs, resolvers });
  16.  
  17.  
  18. ------------------------------------------------------------------------------
  19.  
  20.  
  21. const bcrypt = require('bcrypt');
  22. const jsonwebtoken = require('jsonwebtoken');
  23. const {
  24.   User,
  25. } = require('./../../models');
  26. require('dotenv').config();
  27.  
  28. module.exports = {
  29.   Mutation: {
  30.     async signup(_, { input }) {
  31.       const user = await User.create({
  32.         username: input.username,
  33.         email: input.email,
  34.         password: await bcrypt.hash(input.password, 10),
  35.       });
  36.  
  37.       return jsonwebtoken.sign({
  38.         id: user.id,
  39.         email: user.email,
  40.       },
  41.       process.env.JWT_SECRET, {
  42.         expiresIn: '1y',
  43.       });
  44.     },
  45.  
  46.     async login(_, { input }) {
  47.       const user = await User.findOne({
  48.         email: input.email,
  49.       });
  50.  
  51.       if (!user) {
  52.         throw new Error('No user with that email');
  53.       }
  54.  
  55.       const valid = await bcrypt.compare(input.password, user.password);
  56.  
  57.       if (!valid) {
  58.         throw new Error('Incorrect password');
  59.       }
  60.  
  61.       const token = jsonwebtoken.sign({
  62.         id: user.id,
  63.         email: user.email,
  64.       },
  65.       process.env.JWT_SECRET, {
  66.         expiresIn: '1d',
  67.       });
  68.  
  69.       return { token, role: user.role };
  70.     },
  71.   },
  72. };
  73.  
  74.  
  75.  
  76.  
  77. -------------------------------------------------------------
  78.  
  79.  
  80. type Login {
  81.   token: String!
  82.   role: String!
  83. }
  84.  
  85. input LoginInput {
  86.   email: String!
  87.   password: String!
  88. }
  89.  
  90. input SignupInput {
  91.   email: String!
  92.   password: String!
  93.   username: String!
  94.   invited: Boolean
  95. }
  96.  
  97. type Mutation {
  98.   login (input: LoginInput): Login
  99.   signup (input: SignupInput): String
  100. }
  101.  
  102. type Query {
  103.   _empty: String
  104. }
  105.  
  106.  
  107. -----------------
  108.  
  109.  
  110.  
  111. const { PubSub } = require('graphql-subscriptions');
  112.  
  113. const { Course } = require('./../../models');
  114.  
  115. const COURSES_ADDED = 'courses_added';
  116. const COURSES_UPDATED = 'courses_update';
  117. const COURSES_DELETED = 'courses_deleted';
  118.  
  119. const pubsub = new PubSub();
  120.  
  121. module.exports = {
  122.   Query: {
  123.     async courses(_, args, { user }) {
  124.       const courses = await Course.find();
  125.       return courses;
  126.     },
  127.  
  128.     async course(_, { id }) {
  129.       const course = await Course.findById(id);
  130.       return course;
  131.     },
  132.   },
  133.  
  134.   Mutation: {
  135.     async storeCourse(_, { input }, { user }) {
  136.       const courseData = { ...input };
  137.       courseData.owner = user.id;
  138.       const course = await Course.create(courseData);
  139.       pubsub.publish(COURSES_ADDED, { courseAdded: course });
  140.       return course;
  141.     },
  142.  
  143.     async updateCourse(_, { input }) {
  144.       const courseData = { ...input };
  145.       const course = await Course.findByIdAndUpdate(
  146.         courseData.id,
  147.         courseData,
  148.         { new: true },
  149.       );
  150.       pubsub.publish(COURSES_UPDATED, { courseUpdated: course });
  151.       return course;
  152.     },
  153.  
  154.     async deleteCourse(_, { id }) {
  155.       await Course.findById(id).remove().exec();
  156.       pubsub.publish(COURSES_DELETED, { deaprtmentDeleted: id });
  157.       return id;
  158.     },
  159.   },
  160.  
  161.   Subscription: {
  162.     courseAdded: {
  163.       subscribe: () => pubsub.asyncIterator(COURSES_ADDED),
  164.     },
  165.     courseUpdated: {
  166.       subscribe: () => pubsub.asyncIterator(COURSES_UPDATED),
  167.     },
  168.     courseDeleted: {
  169.       subscribe: () => pubsub.asyncIterator(COURSES_DELETED),
  170.     },
  171.   },
  172. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement