token 스키마 생성

yonghee·2022년 6월 13일
0

baechu-market

목록 보기
19/32

user에 토큰 값을 주기 위해서는 Token 스키마가 필요하다

id        Int      @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

스키마 구성 요소

id, createdAt, updatedAt 값은 token model에서도 동일하게 사용할 것이다. 기존 user에게 token 값을 주는것이 아닌 새로운 user에게 token 값을 줄때 user를 만들기 때문에 필요하기 때문이다. 또한 payload라는 필수값을 만들 것인데 이 값에는 user의 메일이나 폰 번호 정보가 들어 갈 것이다. 필수적이면서 유일한 값으로 지정해줬다.

User 모델과 연결

token 값을 당연히 user가 가져야 하며 이 값을 user와 연결 시켜야 한다.

user User @relation(fields: [userId], references: [id])

타입을 User로 지정해주면 된다 여기서 User는 model User의 User를 뜻한다. 저장을 하면 자동으로 완성이 되는데 자동 완성이 된다고 해도 왜 이렇게 되는지 알아야 편한것이기 때문에 하나씩 뜻을 꼭 알고 넘어가야 했다.
user와 userId를 가지고 있는 이유는 db에 실제 user 전체 데이터가 들어가지 않기 때문이다. user User @relation(fields: [userId], references: [id]) 이 필드 값은 db에 들어가지 않게 된다.
대신 userId가 db에 들어가게 된다.

user User @relation(fields: [userId], references: [id])

이 필드 값은 @relation(fields: [userId], references: [id]) Token 모델에 있는 userId가 id를 가리킨다고 명시 해준 것이다. 이러한 방식으로 prisma에 알려줄수있는 것이다. 이렇게 필드값을 명시하지 않으면 userId가 User 모델의 id임을 모르기 때문이다. 결론적으로
prisma에게 userId로 특정 유저를 가리킨다고 알려줘야 한다는 것이다.

model User {
  id        Int      @id @default(autoincrement())
  phone     Int?     @unique
  email     String?  @unique
  name      String
  avatar    String?
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  tokens    Token[] // []의 뜻은 많은 Token을 가질 수 있다는 뜻이다.
}

model Token {
  id        Int      @id @default(autoincrement())
  payload   String   @unique
  user      User     @relation(fields: [userId], references: [id])
  userId    Int
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

npx prisma db push

npx prisma db push를 하고 planetScale 스키마를 확인하면


이렇게 잘 push가 된것을 확인 할 수 있다.

profile
필요할 때 남기는 날것의 기록 공간

0개의 댓글