prisma & supabase

kimyz·2023년 12월 26일

supabase랑 prisma 연결하고 마이그레이션 후에 데이터 시드 만들기까지

Supabase 프로젝트

새로운 프로젝트 생성 후에 데이터베이스 URL과 API를 따로 저장함
발급된 API KEY는 settings > API 에서,
URL은 setting > Database > Connection string > URI 에서 확인 가능함

Prisma 세팅

  • yarn add --dev prisma : CLI 설치
  • npx prisma init : 설정 파일 생성
    생성 후에 프로젝트 루트에서 prisma > schema.prisma 파일 생성되었는지 확인
  • schema.prisma 파일 확인 : 기본 DB는 postgresql로 설정됨
/* schema.prisma 파일 */
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}
  • env 파일에 supabase db url 추가
  • yarn add @prisma/client : 설치

데이터 시드

초기 데이터 or 테스트 데이터를 생성하는 과정

모델링

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String
}

model Store {
  id              Int @id @default(autoincrement())
  phone           String?   // tel_no
  address         String?   // rdn_code_nm
  lat             String?   // y_dnts
  lng             String?   // x_cnts
  name            String?   // upso_nm
  category        String?   // bizcnd_code_nm
  storeType       String?   // cob_code_nm
  foodCertifyName String?   // crtfc_gbn_nm
}

마이그레이션 명령어

npx prisma migrate dev --name init

seed

  • package.json에 seed 스크립트 추가
"prisma": {
    "seed": "ts-node --compiler-options {\"module\":\"CommonJS\"} prisma/seed.ts"
  }
  • seed.ts 파일에 함수 추가
/* prisma/seed.ts */
import { PrismaClient } from '@prisma/client'
import * as data from '../src/data/store_data.json'

const prisma = new PrismaClient()

async function seedData() {
  data?.['DATA']?.map(async (store) => {
    const storeData = {
      phone: store?.tel_no,
      address: store?.rdn_code_nm,
      lat: store?.y_dnts,
      lng: store?.x_cnts,
      name: store?.upso_nm,
      category: store?.bizcnd_code_nm,
      storeType: store?.cob_code_nm,
      foodCertifyName: store?.crtfc_gbn_nm,
    }

    const res = await prisma.store.create({
      data: storeData,
    })
    console.log(res)
  })
}

async function main() {
  await seedData()
}

main()
  .catch((e) => {
    console.log(e)
    process.exit(1)
  })
  .finally(() => {
    prisma.$disconnect()
  })
  • npx prisma db seed : 데이터 시드 실행
profile
😛

0개의 댓글