0

In my apollo project, when a user creates a project it should automatically create the first folder associated with it.

My schema is something like:

type Project implements Node {
  id: ID! @isUnique
  createdAt: DateTime!
  updatedAt: DateTime!
  name: String!
  folders: [Folders!]! @relation(name: "ProjectFolders")
}

type Folder implements Node {
  id: ID! @isUnique
  createdAt: DateTime!
  updatedAt: DateTime!
  name: String!
  project: Project @relation(name: "ProjectFolders")
}

So the idea is when a user creates a project it will also create an initial folder, the user can add more folders later. Naïvely, I want to do something like:

mutation CreateProjectMutation($name: String!) {
  createProject(name: $name) {
    id
    name
  }

  createFolder(name: $name, $projectId: ?PROJECT_ID?) {
    id
    name
  }
}

What's the correct way to do it?

marktani
  • 7,578
  • 6
  • 37
  • 60
captDaylight
  • 2,224
  • 4
  • 31
  • 42

1 Answers1

2

You can use a nested create mutation in this case, by either starting with createProject:

mutation CreateProjectMutation($name: String!) {
  createProject(
    name: $name
    folders: [{
      name: $name
    }]
  ) {
    id
    name
    folders {
      id
    }
  }
}

or createFolder:

mutation CreateFolderMutation($name: String!) {
  createFolder(
    name: $name
    project: {
      name: $name
    }
  ) {
    id
    name
    project {
      id
    }
  }
}

Note that the parameter is called folders and project, respectively.

marktani
  • 7,578
  • 6
  • 37
  • 60