Prisma jest biblioteką, która ułatwia pracę z bazą danych. Do podstawowych operacji na bazie danych należy tzw.: CRUD - create, read, update i delete. W poście pokazuję, jak wyglądają takie operacje w Prisma i Fastify.
Wolisz Video?
Na YouTube dodałem film, gdzie pokazuję krok po kroku, jak tworzę takiego CRUD’a. jeżeli wolisz tę formę, to zapraszam. Nie zapomnij polubić film i zasubskrybować.
Konfiguracja Prisma w projekcie
Na tym etapie zakładam, iż masz utworzony projekt Fastify (lub dowolną inną biblioteką backendową). Prisma najprościej jest skonfigurować przy pomocy polecenia:
Powoduje to powstanie:
- pliku .env z wartością DATABASE_URL, którą trzeba poprawnie uzupełnić
- plik prisma/schema.prisma z zawartością
Jest to nic innego jak oznaczenie, iż korzystamy z klienta js i z bazy danych postgressql. Inne bazy danych, z jakich możesz skorzystać to:
- PostgreSQL
- MySQL
- SQLite
- AWS Aurora
- Microsoft SQL Server
- Azure SQL
- MongoDB (preview)
- PlanetScale (preview)
Pełną listę wspieranych wersji znajdziesz tutaj: Wspierane bazy danych w Prisma.
To, co musisz zrobić to stworzyć model, na którym będziesz pracować. Poniżej daję przykład, ale możesz stworzyć własny według uznania.
Krótkie wyjaśnienie co tu się dzieje. Int oraz String to typy pól, jakie będą w bazie danych. Dużo ciekawsze są atrybuty @unique i @default. Dodają one specjalne zachowanie do kolumn w bazie danych.
- @unique - wartości w kolumnie muszą być unikalne
- @default(autoincrement()) - ta kolumna ma wartości domyślne w postaci kolejnych liczb.
Twoje zmiany są lokalne dopóki nie zrobisz migracji
Migracja to jest operacja, która przekształca obcy schemat bazy danych do nowej postaci. Będziesz ją wykonywał za każdym razem, gdy zmienisz coś w modelu. Aby wygenerować migrację i przesłać do bazy danych wpisz komendę:
Utworzy to plik migracji oraz zastosuje migrację na bazę danych, z którą jesteś połączony (o ile dobrze wypełniłeś plik .env). Spowoduje to też wygenerowanie klienta, którego będziemy używać w następnych krokach.
Inicjalizacja Prisma Client
Tutaj jest krótki kawałek kodu:
Tyle wystarczy, by korzystać z Prisma w kodzie.
Operacja Create
Bardzo prosta operacja, która stworzy nowy wiersz w tabeli Post. Co tu się dzieje?
- .post → zgodnie z REST do tworzenia nowych zasobów jest wykorzystywana metoda POST
- prisma.post.create - jest to operacja asynchroniczna, która utworzy nowy post i zwróci wynik polecenia (czyli nowy post)
- {data: request.body} - najważniejsze pole, jakie trzeba uzupełnić z danymi do utworzenia nowego obiektu w bazie danych
Przykładowy obiekt, który trzeba wysłać jako body
I gotowy CURL
Operacja Read
Jedna z najczęściej wykorzystywanych operacji. W Prisma możemy dane pobierać na 3 różne sposoby:
- findMany - zwraca listę rekordów
- findUnique - zwraca jeden rekord wykorzysując id albo unikalny atrybut
- findFirst - zwraca pierwszy element z listy, który pasuje do kryteriów
Domyślnie parametry zapytania są typu String, a moje ID w bazie istnieje jako Int i dlatego konieczna była konwersja.
I curle do testowania
Operacja Update
Zgodnie z REST mamy tutaj operację PUT. Operacja Update jest bardzo podobna do create i read.
Jeśli przeanalizujesz kod, to zauważysz, iż mamy tu sekcję związaną z pobraniem pojedynczego kodu (zerknij do findUnique wyżej) i tworzenia nowych obiektów.
Podobnie jak w przypadku Create dostaniemy w odpowiedzi zmodyfikowany obiekt.
Operacja Delete
Na sam koniec operacja usuwania pojedynczego obiektu. Zgodnie z REST do takiej operacji służy delete. Podobnie jak przy operacji Update, tutaj też widać podobieństwa do findUnique.
Jako rezultat otrzymamy skasowany obiekt. jeżeli obiekt nie zostanie znaleziony, to w odpowiedzi będzie null.
Co sądzisz o tej bibliotece? Bardzo mi się spodobała i będę z niej korzystał więcej. Daj znać co o tym myślisz na Facebook/Instagram/Twitter.