type
Post
status
Published
date
May 6, 2024
slug
prisma-part-2
summary
tags
prisma
ORM
category
article
password
icon
URL
Halo teman-teman.. kali ini ane mau lanjutin pembahasan sebelumnya tentang ORM terkhusus prisma, mulai dari definisi dan fungsi dari prisma dan ORM itu sendiri. Buat yang tertarik silakan cek linknya ada di sini.
kali ini kita lanjut pembahasan kita tentang prisma. klo kemaren kita bahas tentang pengertian, kelebihan, fungsi, dll, sekarang kita langsung aja masuk ke praktek pembuatan aplikasi dengan prisma. Kali ini saya mau ngasih penjelasan tentang bagaimana cara memulai membuat aplikasi Nextjs(14 App Router) yang terintegrasi dengan Prisma ORM.

Prerequisites

Buat Project Nextjs dan Setup Prisma ORM

  • Buat project Nextjs(14) baru dengan perintah berikut
    • npx create-next-app nextjs-prisma cd nextjs-prisma
      Selanjutnya lakukan setup sesuai dengan selera teman-teman.
      create-next-app@14.2.3 Ok to proceed? (y) ✔ What is your project named? … nextjs-prisma ✔ Would you like to use TypeScript? … No / Yes ✔ Would you like to use ESLint? … No / Yes ✔ Would you like to use Tailwind CSS? … No / Yes ✔ Would you like to use `src/` directory? … No / Yes ✔ Would you like to use App Router? (recommended) … No / Yes ? Would you like to customize the default import alias (@/*)? › No / Yes
  • Install Prisma di project Nextjs sebagai dependency di mode development dengan perintah berikut
    • npm install prisma --save-dev
      jangan lupa untuk menginstall @prisma/client untuk melakukan query untuk mengakses data di database tanpa menggunakan query sql.
      npm install @prisma/client
      kemudian inisiasi project kita untuk menggunakan prisma dengan perintah berikut
      npx prisma init --datasource-provider sqlite
      perintah tersebut membuat folder baru bernama prisma dan berisi file configurasi dan schema bernama prisma.schema, yang nantinya akan teman-teman ubah untuk kebutuhan project teman-teman.
  • Edit file prisma.schema sesuai kebutuhan teman-teman atau isi dengan file konfigurasi berikut
    • generator client { provider = "prisma-client-js" } datasource db { provider = "sqlite" url = "file:./dev.db" } model User { id Int @id @default(autoincrement()) email String @unique name String? posts Post[] } model Post { id Int @id @default(autoincrement()) title String content String? published Boolean @default(false) author User @relation(fields: [authorId], references: [id]) authorId Int }
      Models di prisma.schema memiliki dua fungsi utama; Mewakili tabel dalam database yang mendasarinya; dan Berfungsi sebagai landasan untuk API prisma client yang dihasilkan
  • Jalankan migrasi untuk membuat tabel database dengan perintah berikut
    • npx prisma migrate dev --name init
      Sebelumnya teman-teman hanya memiliki schema database tanpa database, dengan perintah tersebut teman-teman membuat database sqlite dan tabel User dan Post yang direpresentasikan oleh model schema yang sebelumnya kita buat. untuk mengecek apakah database sudah terbuat atau belum silahakan lakukan perintah berikut
      npx prisma studio
      buka http://localhost:5555 di browser, jika database sudah terbuat maka akan menuju ke halaman prisma studio seperti gambar berikut
      notion image
      Saat ini aplikasi kita sudah terhubung dengan database sqlite yang dihubungkan melalui Prisma ORM, selanjutnya kita akan melakukan fetching data dari database
  • Buat file untuk mengambil data dari database
    • di dalam /src folder buat folder bernama utils di dalamnya kita buat file bernama db.ts dan isi dengan kode berikut ini
      // src/utils/db.ts import { PrismaClient } from '@prisma/client' export const db = new PrismaClient()
  • lalu buat api route
    • // /src/app/api/user.ts import { NextRequest, NextResponse } from "next/server" import { zUser } from "../type" import bcryptjs from "bcryptjs" import { prisma } from "@/global/db" export async function POST(req: NextRequest) { const data = await req.json() const parsedData = zUser.parse(data) const hashedPassword = bcryptjs.hashSync(parsedData.password, 8) try { const user = await prisma.user.create({ data: { email: parsedData.email, name: parsedData.name, password: hashedPassword, }, }) return new NextResponse(`{id: ${user.id}, name: ${user.name}}`, { status: 201 }) } catch (error) { return new NextResponse(`error: `, { status: 500 }) } }
    Video preview
    Prisma part 1Notion Blog Example Components