11.6 Favorite Products

좋아요. 기능 구현하기

1. Fav model 추가

favorite는 user에 의해서 생성되고, product을 가리킨다

model Fav {
  id        Int      @id @default(autoincrement())
  user      User     @relation(fields: [userId], references: [id], onDelete: Cascade)
  userId    Int
  product   Product  @relation(fields: [productId], references: [id], onDelete: Cascade)
  productId Int
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

model User {
  ...
  fav Fav[]
}

model Product {
  ...
  favs Fav[]
}

그리고, npx prisma db push, 프론트 서버 재실행을 후에 prisma studio를 확인한다.

2. server handler 구현

fav가 product에 존재한다면, 삭제하고 존재하지 않는다면 생성한다. 먼저 fav의 여부를 확인 할 product을 조회해야 한다. 그리고 그 product에서 fav가 존재하지는지 아닌지 확인한다.

export default handler (){
  
  // 조회하고자 하는 product을 조회하는 쿼리문
  const alreadyExists = await client.fav.findFirtst({
    where: {
      productId, // req.query를 통해 확인
      userId, // req.session에서 확인
    }
  });
  
  if(alreadyExists){
    // delete
    await client.fav.delete({
      where: {
        id: alreadyExists.id,
      }
    })
  } else {
    // create fav
    await client.fav.crete({
      data: {
        userId: {
          user: {
            connect: {
              id: user?.id,
            }
          }
        },
        productId: {},
      }
    })
  }  
}

좋은 웹페이지 즐겨찾기