Reputation: 13
i'm a begginer on NestJS and Prisma.
I'm trying to create an User, my table has relational Fields with table Addresses. To create an user, i need first add a register into adresses table, to use adress_id on my user table.
I'm getting this error:
This is my code
Service:
async create(createUserDto: CreateUserDto) {
const hash = crypto.SHA256(createUserDto.password);
const passwordHash = (hash.toString(crypto.enc.Hex).toUpperCase());
const createCategory = await this.client.user.create({
data: {
name: createUserDto.name,
email: createUserDto.email,
age: createUserDto.age,
password: passwordHash,
roleId: createUserDto.roleId,
address: {
create: [
{
street: createUserDto.address.street,
number: createUserDto.address.number,
complement: createUserDto.address.complement,
neighborhood: createUserDto.address.neighborhood,
cityId: createUserDto.address.cityId,
stateId: createUserDto.address.stateId,
zipcode: createUserDto.address.zipcode
},
],
},
},
})
}
DTO:
export class CreateUserDto {
readonly id: number
readonly name :string
readonly age :any
readonly email :any
readonly password :any
readonly roleId :any
readonly addressId: number
readonly address: {
street: string,
number: number,
complement: string,
neighborhood: string,
cityId: number,
stateId: number,
zipcode: string
}
}
Schema.prisma
model user {
id Int @id @default(autoincrement())
name String
age Int
email String @unique
password String
roleId Int
role role @relation(fields: [roleId], references: [id])
addressId Int
address addresses @relation(fields: [addressId], references: [id])
}
model addresses {
id Int @id @default(autoincrement())
street String
number String
complement String
neighborhood String
cityId Int
city cities @relation(fields: [cityId], references: [id])
stateId Int
state state @relation(fields: [stateId], references: [id])
zipcode String
user user[]
}
What am i doing wrong? Thanks!
Upvotes: 1
Views: 1572
Reputation: 7198
Your address.create
syntax is wrong. User-Address is a one-to-many
relation, so one user can only have one address. So address.create
should be passed a single address
object, not an array.
This should work fine
const createCategory = await this.client.user.create({
data: {
name: createUserDto.name,
email: createUserDto.email,
age: createUserDto.age,
password: passwordHash,
roleId: createUserDto.roleId,
address: {
create: {
street: createUserDto.address.street,
number: createUserDto.address.number,
complement: createUserDto.address.complement,
neighborhood: createUserDto.address.neighborhood,
cityId: createUserDto.address.cityId,
stateId: createUserDto.address.stateId,
zipcode: createUserDto.address.zipcode
},
},
},
})
Upvotes: 2