Мутация со списком строк в качестве аргумента в Prisma + GraphQL - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь произвести мутацию, но получаю сообщение об ошибке с аргументами.

В schema.graphql У меня есть следующее:

type User {
  id: ID!
  name: String!
  email: String!
  age: Int!
  height: Float!
  weight: Float!
  goals: [String!]!
  history: [Routine!]!
}

type Mutation {
  signup(email: String!, password: String!, name: String!, age: Int!, height: Float!, weight: Float!, goals: [String!]!): AuthPayload
}

В schema.prisma :

model User {
  id        Int      @id @default(autoincrement())
  name      String
  email     String   @unique
  password  String
  age       Int
  weight    Float
  height    Float
  goals     String[]
  history   Routine[]
}

Тогда мой преобразователь мутаций следующий:

async function signup(parent, args, context, info) {
  // 1
  const password = await bcrypt.hash(args.password, 10)

  // 2
  const user = await context.prisma.user.create({ data: { ...args, password } })

  // 3
  const token = jwt.sign({ userId: user.id }, APP_SECRET)

  // 4
  return {
    token,
    user,
  }
}

Но когда я пробую эту функцию на GraphQL Playground, например, с:

mutation {
  signup(
    name: "Esteban"
    email: "esteban@gmail.com"
    password: "Password"
    age: 23
    height: 1.84
    weight: 70.0
    goals: ["WEIGHT_LOSS"]
  ) {
    token
    user {
      id
    }
  }
}

Я получаю следующую ошибку:

{
  "data": {
    "signup": null
  },
  "errors": [
    {
      "message": "\nInvalid `context.prisma.user.create()` invocation in\n/Users/estebankramer1/Documents/ITBA/pf-proyf/server/src/resolvers/Mutation.js:10:42\n\n   6 // 1\n   7 const password = await bcrypt.hash(args.password, 10)\n   8 \n   9 // 2\n→ 10 const user = await context.prisma.user.create({\n       data: {\n         email: 'esteban@gmail.com',\n         password: '$2a$10$hL1sMErBEcg98hpk5kRNpef2isI5d/O66zfRom8sQyThIHue7ku2O',\n         name: 'Esteban',\n         age: 23,\n         height: 1.84,\n         weight: 70,\n         goals: [\n           'WEIGHT_LOSS'\n         ]\n       }\n     })\n\nUnknown arg `0` in data.goals.0 for type UserCreategoalsInput. Available args:\n\ntype UserCreategoalsInput {\n  set?: List<String>\n}\n\n",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "signup"
      ]
    }
  ]
}

Я не знаю, что делаю неправильно, и не могу найти примеры мутаций со списками строк.

1 Ответ

0 голосов
/ 04 августа 2020

Оказывается, мне нужно было изменить мутацию на следующее:

async function signup(parent, args, context, info) {
  // 1
  const password = await bcrypt.hash(args.password, 10)

  // 2
  const user = await context.prisma.user.create({ data: {
    ...args,
      goals: {
        set: args.goals
      },
      password
  } })

  // 3
  const token = jwt.sign({ userId: user.id }, APP_SECRET)

  // 4
  return {
    token,
    user,
  }
}

В основном используйте операцию набора. Понятия не имею, почему, документация Prisma ужасна. Может, кто-нибудь сможет немного прояснить?

...