Skip to content

Feature Request: Support for more granular @gql directives (for nested models) #171

@StephanDecker

Description

@StephanDecker

It's only a feature request that would tidy up the generated graphql schema for deeply nested prisma models (depending on individual use cases). I am aware of the shield and the hooks properties in order to control access - but sometimes it would be helpful to consider this during the schema generation already in order to have a more lightweight schema.
It's some kind of follow-up of this issue: #111
Let's give me an example:

model ExampleTable {
    id       String     @id @default(uuid())
    name     String
    refTable RefTable[]
}

model RefTable {
    id             String       @id @default(uuid())
    name           String
    exampleTable   ExampleTable @relation(fields: [exampleTableId], references: [id])
    exampleTableId String
}

Currently the following two requests can't be handled:

  1. The user should be able to create a RefTable record when using the ExampleTable model but not when using the RefTable model directly.

Example implementation:

/// @gql(fields: { refTable: {create: true}})
model ExampleTable {
    id       String     @id @default(uuid())
    name     String
    refTable RefTable[]
}

/// @gql(mutations: { create:null})
model RefTable {
    id             String       @id @default(uuid())
    name           String
    exampleTable   ExampleTable @relation(fields: [exampleTableId], references: [id])
    exampleTableId String
}
  1. The user should be able to create a RefTable record only by using the RefTable model directly but not when using the ExampleTable model.

Example implementation:

/// @gql(fields: { refTable: {create: null}})
model ExampleTable {
    id       String     @id @default(uuid())
    name     String
    refTable RefTable[]
}

model RefTable {
    id             String       @id @default(uuid())
    name           String
    exampleTable   ExampleTable @relation(fields: [exampleTableId], references: [id])
    exampleTableId String
}

What do you think? Could you put it on the roadmap?

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions