maoosi / prisma-appsync

⚡ Turns your ◭ Prisma Schema into a fully-featured GraphQL API, tailored for AWS AppSync.

Home Page:https://prisma-appsync.vercel.app

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

StephanDecker opened this issue · 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: #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?