Prisma to ORM stworzony dla środowiska TypeScript i Node.js. Prisma nie tylko stworzy, zaktualizuje całą bazę danych.

Konfiguracja schematu w Prisma

Konfiguracja modeli danych odbywa się w pliku schema.prisma, w którym opisujemy naszą bazę.

Przykładowy schemat dla modelu User:

model User {
  id                  Int                   @id @default(autoincrement())
  username            String                @unique
  email               String                @unique
  createdAt           DateTime              @default(now())
  updatedAt           DateTime              @updatedAt
}

Aktualizacja bazy

Po każdej zmianie w schemacie, wykonujemy jedno z poniższych poleceń aby synchronizować zmiany z bazą danych.

npx prisma db push

npx prisma db push

Komenda ta po prostu „pcha” zmiany bezpośrednio do bazy danych bez tworzenia plików migracji, co jest mniej formalnym podejściem i zwykle używane w środowiskach deweloperskich dla szybkich zmian.

npx prisma migrate dev

npx prisma migrate dev

Komenda ta tworzy pliki migracji, dzięki czemu mamy historie zmian bazy i możemy np wykonać te zapytania na produkcji. Te migracje są następnie wykonywane na bazie danych, aktualizując ją zgodnie z zapisanymi zmianami w plikach migracji. Jest to bezpieczne podejście, które zapewnia, że wszystkie zmiany są rejestrowane.

Instalacja i generowanie klienta Prisma

Aby korzystać z Prisma w aplikacji, należy najpierw zainstalować klienta:

npm install @prisma/client

Po każdej zmianie modelu należy wygenerować klienta jeszcze raz:

prisma generate

Co nam daje klient prisma?

Jak korzystać z klienta Prisma?

Klient Prisma automatycznie generuje metody i typy oparte na zdefiniowanym schemacie.

Przykład użycia:

import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()
const allUsers = await prisma.user.findMany()
const user = await prisma.user.create({
  data: {
    username: 'Lukas',
    email: 'lukas@example.com'
  },
})

Prisma studio

Prisma oferuje również Prisma Studio, graficzny interfejs użytkownika do zarządzania danymi(takie coś jak pgAdmin albo phpMyAdmin), który można uruchomić poleceniem:

npx prisma studio

Types

Generując klienta, uzyskujemy również dostęp do typów TypeScript, które można znaleźć w:

./node_modules/.prisma/client/index.d.ts

Typy te można łatwo importować i używać w aplikacji:

import { User } from '@prisma/client';

Database seeding – testowe dane

Prisma umożliwia łatwe uzupełnienie bazy danych testowymi danymi. Możemy wykorzystać bibliotekę @faker-js/faker do generowania danych:

npm install @faker-js/faker

Instalujemy:

npm install -D typescript ts-node @types/node

Tworzymy plik seed.js w folderze prisma:

import { PrismaClient } from "@prisma/client";
import { faker } from "@faker-js/faker";

const prisma = new PrismaClient();

async function main() {
  const user = await prisma.user.create({
    data: {
      username: faker.internet.userName(),
      email: faker.internet.email(),
    },
  });

  for (let i = 0; i < 20; i++) {
    await prisma.post.create({
      data: {
        title: faker.lorem.sentence(),
        content: faker.lorem.paragraph(),
      },
    });
  }
}
main()
  .then(async () => {
    await prisma.$disconnect();
  })
  .catch(async (e) => {
    console.error(e);
    await prisma.$disconnect();
    process.exit(1);
  });

W package.json dodajemy skrypt do seedingu:

  "prisma": {
    "seed": "ts-node prisma/seed.js"
  },

Odpalamy seeding bazy danych:

npx prisma db seed

W wyniku otrzymujemy info:

Environment variables loaded from .env
Running seed command `ts-node prisma/seed.js` ...

🌱  The seed command has been executed.

I mamy uzupełnioną bazę danych gotową do testów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *