aboutsummaryrefslogtreecommitdiffstats
path: root/mutations.js
blob: e8c26fb54b94f25aa3b33b2d87c2efd4ff056477 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import bcrypt from 'bcrypt'
import { resolver, defaultArgs, defaultListArgs, attributeFields } from 'graphql-sequelize'
import {
    graphql,
    GraphQLSchema,
    GraphQLObjectType,
    GraphQLInputObjectType,
    GraphQLString,
    GraphQLInt,
    GraphQLNonNull,
    GraphQLList
} from 'graphql'

const l = console.log

module.exports = (db, gqltypes, lnrpc) => {
  const UserInputType = new GraphQLInputObjectType({
    name: 'UserInput',
    desc: 'UserInput',
    fields: {
      ...attributeFields(db['User'], { exclude: ['id'] }),
    }
  })

  return new GraphQLObjectType({
    name: 'mutation',
    fields: {
      createUser: {
        type: gqltypes['users'],
        args: {
          user: {
            type: UserInputType
          }
        },
        resolve: async (root, { user }) => {
          if (!user.username) throw new Error('Username required')
          if (user.password.length < 2) throw new Error('Password too short')

          let exists = await db['User'].count({ where: { username: user.username } })
          if (exists) throw new Error('Username taken')

          user.address = (await lnrpc.newAddress({ type: 1 }, lnrpc.meta)).address
          user.password = await bcrypt.hash(user.password, 1)
          user.balance = 0
          return db['User'].create(user)
        }
      },
      updateUser: {
        type: gqltypes['users'],
        args: {
          user: {
            type: UserInputType
          }
        },
        resolve: async (root, { user }) => {
          await db['User'].update(user, { where: { username: user.username } })
        }
      },
    }
  })
}