Skip to content

Instantly share code, notes, and snippets.

@joaovictorino
Last active June 28, 2024 00:25
Show Gist options
  • Save joaovictorino/33806a01fbd971ac90789b31daa7d693 to your computer and use it in GitHub Desktop.
Save joaovictorino/33806a01fbd971ac90789b31daa7d693 to your computer and use it in GitHub Desktop.
Adicionando o Prisma

Adicionando o Prisma

Vamos adicionar o Prisma ao nosso projeto Next, portanto vá até a pasta "web" e execute os comandos abaixo no terminal

npm install prisma@5.3.1 -D
npx prisma init --datasource-provider mysql

Será criada uma pasta "prisma" no projeto, dentro dela haverá um arquivo chamado "schema.prisma", altere seu conteúdo conforme abaixo

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model Conta {
  numero String  @unique
  saldo  Float
}

Na pasta "web" crie o arquivo "docker-compose.yaml" com o conteúdo abaixo

networks:
  bank:
    driver: bridge

services:
  db:
    image: mysql:8.0
    restart: always
    ports:
      - 3306:3306
    networks:
      - bank
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=bank
      - MYSQL_TCP_PORT=3306

Altere o arquivo ".env" que também está na pasta "web" conforme abaixo

DATABASE_URL="mysql://root:root@localhost:3306/bank"

Execute os comandos abaixo, dentro da pasta "web", para subir o banco e criar as tabelas do banco de dados

docker compose up -d
npx prisma migrate dev --name init

Se o Prisma executar com sucesso, adicione as linhas abaixo ao arquivo "package.json" da pasta "web"
Adicione no final do arquivo, após da tag "devDependencies"

  "prisma": {
    "seed": "ts-node --compiler-options {\"module\":\"CommonJS\"} prisma/seed.ts"
  }

E adicione o arquivo "seed.ts" na pasta "prisma" com o conteúdo abaixo

import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
  const contaOrigem = await prisma.conta.upsert({
    where: { numero: '123456' },
    update: {},
    create: {
      numero: '123456',
      saldo: 1000.0
    },
  })
  const contaDestino = await prisma.conta.upsert({
    where: { numero: '654321' },
    update: {},
    create: {
      numero: '654321',
      saldo: 1000.0
    },
  })
  console.log({ contaOrigem, contaDestino })
}
main()
  .then(async () => {
    await prisma.$disconnect()
  })
  .catch(async (e) => {
    console.error(e)
    await prisma.$disconnect()
    process.exit(1)
  })

Agora execute os comandos abaixo dentro da pasta "web"

npm install ts-node@10.9.1 -D
npx prisma migrate reset -f

Pronto! Subimos um MySQL com Docker e configuramos o Prisma dentro do Next.js para criar nossas tabelas e uma massa de dados inicial.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment