Как добавить элемент в поле списка?

Я хочу добавить участников в список участников chatRoom, передав memberId в функцию мутации graphql. Но выскакивают некоторые ошибки. Я приложил большую часть кода, имеющего отношение к этому вопросу, как показано ниже. Пожалуйста, помогите мне разобраться. Я предполагаю, что create: {connect} может быть причиной этой проблемы.

// Вот функция мутации

async function addMemberToChatRoom(parent, args, context, info) {

  const member = await context.prisma.users({
    where: {
      id: args.memberId
    }
  });
  const chatRoom = await context.prisma.updateChatRoom({
    where: {
      id: args.roomId
    },
    data: {
      users: {
        create: {
          { connect: { id: args.memberId } } 
        }
      }
    }
  })

  return chatRoom
}

// Вот модель данных призмы

type User {
  id: ID! @id
  name: String!
  email: String! @unique
  password: String!
}

type ChatRoom {
  id: ID! @id
  name: String!
  users: [User]!
}

type Message {
  id: ID! @id
  content: String!
  createdAt: DateTime! @createdAt
  updatedAt: DateTime! @updatedAt
}

// Вот Schema.graphql

type Query {
  info: String!
  users: [User!]!
}

type Mutation {
  signup(email: String!, password: String!, name: String!): AuthPayload
  login(email: String!, password: String!): AuthPayload
  createChatRoom(name: String!): ChatRoom
  addMemberToChatRoom(roomId: String!, memberId: String!): ChatRoom
}


type AuthPayload {
  token: String!
  user: User!
}

type User {
  id: ID!
  name: String!
  email: String!
}

type ChatRoom {
  id: ID!
  name: String!
  users: [User!]
}

// Вот index.js

const { GraphQLServer } = require('graphql-yoga')
const { prisma } = require('./generated/prisma-client')

const Query = require('./resolvers/Query')
const Mutation = require('./resolvers/Mutation')
// const User = require('./resolvers/User')
const resolvers = {
  Query,
  Mutation
}


const server = new GraphQLServer({
  typeDefs: './src/schema.graphql',
  resolvers,
  context: request => {
    return {
      ...request,
      prisma,
    }
  },
  tracing: true,
})
server.start(() => console.log(`Server is running on http://localhost:4000`))

// Вот ошибка

{
  "data": {
    "addMemberToChatRoom": null
  },
  "errors": [
    {
      "message": "Variable '$data' expected value of type 'ChatRoomUpdateInput!' but got: {\"users\":{\"create\":{\"id\":\"cjuzcf7lx75g60b953w50uwdc\"}}}. Reason: 'users.create[0].name' Expected non-null value, found null. (line 1, column 46):\nmutation ($where: ChatRoomWhereUniqueInput!, $data: ChatRoomUpdateInput!) {\n                                             ^",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "addMemberToChatRoom"
      ]
    }
  ]
}

person HE xinhao    schedule 27.04.2019    source источник
comment
users.create - переданный объект, должен быть массив объектов   -  person xadm    schedule 27.04.2019
comment
Когда я меняю его на create, появляется сообщение об ошибке: []   -  person HE xinhao    schedule 28.04.2019


Ответы (1)


Я удаляю создать и меняю его на

users: 
{
        connect: { id: args.memberId }
      } 

тогда это работает.

async function addMemberToChatRoom(parent, args, context, info) {

  const member = await context.prisma.users({
    where: {
      id: args.memberId
    }
  });
  const chatRoom = await context.prisma.updateChatRoom({
    where: {
      id: args.roomId
    },
    data: {
      users: {
        connect: { id: args.memberId }
      }
    }
  })

  const returnedChatRoom = await context.prisma.chatRooms({
    where: {
      id: args.roomId
    }
  });

  return returnedChatRoom
}
person HE xinhao    schedule 28.04.2019
comment
конечно, вы не можете использовать create или connect вместе. создать нового пользователя или подключить существующего пользователя - person Gabriel Tong; 30.04.2019