prisma-appsync icon indicating copy to clipboard operation
prisma-appsync copied to clipboard

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

Open StephanDecker opened this issue 2 years ago • 0 comments

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: https://github.com/maoosi/prisma-appsync/issues/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?

StephanDecker avatar Jan 11 '24 13:01 StephanDecker