Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request] Allow for Prisma enums in validation rules #1211

Open
nwidynski opened this issue Apr 2, 2024 · 6 comments
Open

[Feature Request] Allow for Prisma enums in validation rules #1211

nwidynski opened this issue Apr 2, 2024 · 6 comments

Comments

@nwidynski
Copy link

Is your feature request related to a problem? Please describe.
While Zenstack is already offering great validation capabilities, it would be nice if it were possible to use Prisma enums
inside a validate block, for example with an in operation. This would allow for an always-in-sync validation instead of relying on manual updates in both codebase and validation rules.

One might ask why not set the field as the enum? The answer to that being that working with primitives is easier to migrate and also better supported across third party vendors, like Hasura GraphQL.

Describe the solution you'd like
Allow for Prisma enums to be referenced in validations rules, especially with the in operator.

Describe alternatives you've considered

Additional context

@ymc9
Copy link
Member

ymc9 commented Apr 2, 2024

Hey @nwidynski , thanks for filing this. Do you mind providing a ZModel snippet showing how you want to use it? Thanks!

@nwidynski
Copy link
Author

nwidynski commented Apr 6, 2024

@ymc9 This would be a short example with some options for the validate API.

enum PostStatus {
  DRAFT
  ACTIVE
  CANCELLED
}

model Post {
  id String @id
  status String

  @@validate(status in PostStatus)
  @@validate(status == PostStatus.ACTIVE)
}

@ymc9
Copy link
Member

ymc9 commented Apr 9, 2024

Got it. Yes, string and enum can be compatible for comparison.

@nwidynski
Copy link
Author

We‘re especially looking for the in operator which would probably translate to:

Object.values(PostStatus).includes(value)

@Eliav2
Copy link

Eliav2 commented Apr 25, 2024

I actually don't get why this is necessary. Making status of type PostStatus instead of String would already validate the type natively in prisma. No need for in operator in zenstack in this case.

@nwidynski
Copy link
Author

nwidynski commented Apr 28, 2024

@Eliav2 It's mentioned at the bottom of the issue description. Also both the @@validate and the in operator exist already, just without compatibility for enum fields. No new operator would be introduced into the Zenstack language.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants