Jump to content

Prisma

Prisma é um ORM para TypeScript, que permite que você defina seu schema e modelos de banco de dados em um arquivo schema.prisma e, em seguida, gere um cliente type-safe que pode ser usado para interagir com seu banco de dados a partir de seu back-end.

Prisma Client

Localizado em /server/db/client.ts, o Prisma Client é instanciado como uma variável global (conforme recomendado como melhor prática pela equipe da Prisma) e exportado para ser usado em suas rotas de API. Incluímos o Prisma Client em Context por padrão e recomendamos usá-lo em vez de importá-lo separadamente em cada arquivo.

Schema

Você encontrará o arquivo de esquema do Prisma em /prisma/schema.prisma. Este arquivo é onde você define seu esquema e modelos de banco de dados e é usado ao gerar o Prisma Client.

Com NextAuth.js

Quando você seleciona NextAuth.js em combinação com Prisma, o arquivo de esquema é gerado e configurado para você com os valores recomendados para os modelos User, Session, Account e VerificationToken, de acordo com os modelos na documentação do NextAuth.js.

Banco de dados padrão

O banco de dados padrão é um banco de dados SQLite, que é ótimo para desenvolvimento e criação rápida de uma prova de conceito, mas não é recomendado para produção. Você pode alterar o banco de dados a ser usado alterando o provider no bloco datasource para postgresql ou mysql e, em seguida, atualizando a string de conexão nas variáveis de ambiente para apontar para seu banco de dados.

Propagar seu banco de dados

Propagar seu banco de dados é uma ótima maneira de preencher rapidamente seu banco de dados com dados de teste para ajudá-lo a começar. Para configurar a propagação, você precisará criar um arquivo seed.ts no diretório /prisma e, em seguida, adicionar um script seed ao seu arquivo package.json. Você também precisará de algum compilador de TypeScript que possa executar o script de seed. Recomendamos tsx, que é um compilador TypeScript de alto desempenho que usa esbuild e não requer nenhuma configuração ESM, mas ts-node ou outros compiladores funcionam também.

package.json
{
  "scripts": {
    "db-seed": "NODE_ENV=development prisma db seed"
  },
  "prisma": {
    "seed": "tsx prisma/seed.ts"
  }
}
prisma/seed.ts
import { prisma } from "../src/server/db/client";

async function main() {
  const id = "cl9ebqhxk00003b600tymydho";
  await prisma.example.upsert({
    where: {
      id,
    },
    create: {
      id,
    },
    update: {},
  });
}

main()
  .then(async () => {
    await prisma.$disconnect();
  })
  .catch(async (e) => {
    console.error(e);
    await prisma.$disconnect();
    process.exit(1);
  });

Em seguida, basta executar pnpm db-seed (ou npm/yarn) para propagar seu banco de dados.

Recursos Úteis

RecursoLink
Documentação do Prismahttps://www.prisma.io/docs/
GitHub do Prismahttps://github.com/prisma/prisma
Adaptador de Prisma para NextAuth.jshttps://next-auth.js.org/adapters/prisma
Guia de Conexão com PlanetScalehttps://www.prisma.io/docs/getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-typescript-planetscale