Ошибка seeder-а при создании сущности
При запуске nest-а seeder выдает ошибку:
Type '{ name: string; slug: string; description: string; price: number; images: string; category: { create: { name: string; slug: string; }; }; userId: number; reviews: { create: { title: string; raiting: number; text: string; user: { ...; }; }[]; };
}' is not assignable to type '(Without<ProductCreateInput, ProductUncheckedCreateInput> & ProductUncheckedCreateInput) | (Without<...> & ProductCreateInput)'.
Type '{ name: string; slug: string; description: string; price: number; images: string; category: { create: { name: string; slug: string; }; }; userId: number; reviews: { create: { title: string; raiting: number; text: string; user: { ...; }; }[]; }; }' is not assignable to type 'Without<ProductUncheckedCreateInput, ProductCreateInput> & ProductCreateInput'.
Type '{ name: string; slug: string; description: string; price: number; images: string; category: { create: { name: string; slug: string; }; }; userId: number; reviews: { create: { title: string; raiting: number; text: string; user: { ...; }; }[]; }; }' is not assignable to type 'Without<ProductUncheckedCreateInput, ProductCreateInput>'.
Types of property 'userId' are incompatible.
Type 'number' is not assignable to type 'never'.
21 data: {
~~~~
node_modules/.prisma/client/index.d.ts:4015:5
4015 data: XOR<ProductCreateInput, ProductUncheckedCreateInput>
~~~~
The expected type comes from property 'data' which is declared here on type '{ select?: ProductSelect; include?: ProductInclude; data: (Without<ProductCreateInput, ProductUncheckedCreateInput> & ProductUncheckedCreateInput) | (Without<...> & ProductCreateInput); }'
Сам seeder:
import { faker } from '@faker-js/faker'
import { PrismaClient, Product } from '@prisma/client'
import * as dotenv from 'dotenv'
dotenv.config()
const prisma = new PrismaClient()
const createProducts = async (quantity: number) => {
const products: Product[] = []
for(let i = 0; i < quantity; i++) {
const productName = faker.commerce.productName()
const categoryName = faker.commerce.department()
let imagesArray = []
for (let i = 0; i < faker.datatype.number({min: 2, max: 6}); i++) {
imagesArray.push(faker.image.imageUrl())
}
const product = await prisma.product.create({
data: {
name: productName,
slug: faker.helpers.slugify(productName),
description: faker.commerce.productDescription(),
price: +faker.commerce.price(10, 999, 0),
images: JSON.stringify(imagesArray),
category: {
create: {
name: String(categoryName),
slug: faker.helpers.slugify(categoryName)
}
},
userId: 1,
reviews: {
create: [
{
title: faker.lorem.words(5),
raiting: faker.datatype.number({min: 1, max: 5}),
text: faker.lorem.words(15),
user: {
connect: {
id: 1
}
}
},
{
title: faker.lorem.words(10),
raiting: faker.datatype.number({min: 1, max: 5}),
text: faker.lorem.paragraph(),
user: {
connect: {
id: 1
}
}
}
]
}
}
})
products.push(product)
}
console.log("Created"+quantity+"products")
}
async function main() {
console.log("Start seedeing...")
await createProducts(10)
}
main()
.catch(e => console.log(e))
.finally(async () => {
await prisma.$disconnect
})
Prisma модель:
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
email String @unique
password String
name String
surname String
avatarPath String @default("./../uploads/unknown_user_avatar.png") @map("avatar_path")
phone String @default("")
reviews Review[]
favorites Product[]
orders Order[]
}
model Category {
id Int @id @default(autoincrement())
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
name String
slug String
products Product[]
}
model Product {
id Int @id @default(autoincrement())
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
name String
description String
price Int
slug String
images String
categoryId Int @map("category_id")
category Category @relation(fields: [categoryId], references: [id])
userId Int @map("user_id")
user User @relation(fields: [userId], references: [id])
reviews Review[]
}
enum EnumOrderStatus {
PENDING
PAYED
SHIPPED
DELIVERED
}
model Order {
id Int @id @default(autoincrement())
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
name String
status EnumOrderStatus
userId Int @map("user_id")
user User @relation(fields: [userId], references: [id])
}
model Review {
id Int @id @default(autoincrement())
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
title String
text String
raiting Int
userId Int @map("user_id")
user User @relation(fields: [userId], references: [id])
productId Int @map("product_id")
product Product @relation(fields: [productId], references: [id])
}