Italo Gama
Italo Gama

Reputation: 13

NestJS-Prisma How to create record with relational fields?

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: 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

Answers (1)

Tasin Ishmam
Tasin Ishmam

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

Related Questions