Prisma `Type` not supported
Closed this issue · 6 comments
Hey, this project has been a lifesaver for maintaining a source of truth for my project, but I have recently ran into errors while using the Type
keyword in my Prisma schema. This is used to model embedded documents within a MongoDB based schema.
I get this error, probably because it expects a Model
and not a Type
: "Error: related model 'Variation' for 'Product.variations' not found"
type Image {
url String
width Int
height Int
}
type Variation {
name String
description String?
price Float?
image Image
}
model Product {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
description String
price Float?
variations Variation[]
images Image[]
}
model FeaturedProduct {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
description String
price Float?
variations Variation[]
images Image[]
}
I have recently implemented support of composite types, but I haven't published it yet, because it isn't yet complete regarding class validation. And triple-slash comments aren't parsed by the underlying prisma parser (see prisma/prisma#13726), so the properties cannot be annotated.
But the basics do work, so I could release a beta version which you can test.
I have recently implemented support of composite types, but I haven't published it yet, because it isn't yet complete regarding class validation. And triple-slash comments aren't parsed by the underlying prisma parser (see prisma/prisma#13726), so the properties cannot be annotated.
But the basics do work, so I could release a beta version which you can test.
Absolutely, that would be amazing. Also, on a separate note, maybe I can open an issue for this, or even open a PR, but is there any way to disable swagger generation / disable generation of entities?
I could definitely browse through the code base and see if I can implement it myself thought.
I just did some improvements regarding the composite types and just released beta version, which you can check out: https://www.npmjs.com/package/@brakebein/prisma-generator-nestjs-dto/v/1.13.0-beta.0
You can set noDependencies = "false"
which disables any imports from NestJs or Prisma including swagger decorators. But if you rely on some special imports (like Prisma.InputJsonValue
), this may also be missing then.
It's working wonders so far, thanks so much. I'll let you know if I run into any issues.
I've been using it for a few days now, and so far it's worked well, besides one issue.
I have a route to update a product in my backend, this takes the body parameter UpdateProductDto
, which is validated by the validation pipeline with the generated class-validator decorators. This works wonders, besides the fact that the variations type inside the UpdateProductDto
validation class is UpdateVariationDto
, but with this route, I want the value of the variations to completely replace the old one, not edit indices, so I would need each of the array items to be CreateVariationDto
. Is there any way to achieve this?
To clarify, I want to be able to turn this:
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => UpdateVariationDto)
variations?: UpdateVariationDto[];
into this, since I need each array item to be a full variation entry, not a partial one:
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => CreateVariationDto)
variations?: CreateVariationDto[];
Would this be possible with a triple-slash decorator on the field in the Prisma schema?
model Product {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
description String
price Float?
/// @NoPartialUpdate (or something of the sorts)
variations Variation[]
images Image[] // This property has the same issue, all the indices are validated by `UpdateImageDto`
}
I added the annotation @DtoTypeFullUpdate
for this use case.
New release: https://www.npmjs.com/package/@brakebein/prisma-generator-nestjs-dto/v/1.13.0-beta.1