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.