En este tutorial aprenderas a crear una aplicación de Nextjs que use Prisma como ORM para poder hacer operaciones con base de datos SQL

¿Qué es Prisma?

Prisma es una herramienta moderna de base de datos que actúa como un ORM (Object-Relational Mapping), facilitando la interacción entre las aplicaciones y las bases de datos. Proporciona una capa de abstracción que permite a los desarrolladores trabajar con bases de datos utilizando un lenguaje basado en modelos y consultas tipo SQL. Prisma simplifica tareas como la migración de esquemas, la validación de datos y la generación de consultas, permitiendo un desarrollo más rápido y eficiente, además de mejorar la mantenibilidad del código. Su compatibilidad con múltiples bases de datos y su integración con TypeScript lo convierten en una opción popular entre los desarrolladores modernos.

Herramientas

Antes de empezar a usar Prisma te recomendio instalar una extension muy util llamada Prisma, que esta disponible en multiples editores esta sirve para poder tener resaltado de código y tambien autocompletado de la sintaxis de prisma.

https://www.prisma.io/docs/guides/development-environment/editor-setup

Configuracion del proyecto

mkdir prisma-nodejs-api
cd prisma-nodejs-api
npm init -y
npm i express  morgan

Configuracion de Prisma

npm i prisma
npx prisma init

otras variaciones

pnpm prisma init

Por defecto Prisma crea un archivo de Configuracion para conectarse a PostgresSQL, pero en nuestro caso vamos a usar sqlite.

en prisma/schema.primsa:

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

Luego en actualiza el archivo .env

DATABASE_URL="file:/.dev.db"

luego en prisma/schema.prisma creemos los modelos:

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

model Product {
  id Int @id @default(autoincrement())
  name String @unique
  price Int @default(999)
  createdAt DateTime @default(now())
  category Category @relation(fields: [categoryId], references: [id])
  categoryId Int
}

model Category {
  id Int @id @default(autoincrement())
  name String @unique
  products Product[]
}

Prisma Studio

npx prisma studio
npx prisma migrate dev

te pedira un nombre, coloca first o algo similar

cada vez que añades un nuevo campo a tu table, es necesario hacer una migracion para que lo cambios se reflejen en tu base de datos y tambien para poder obtener el tipado de Typescript en el proyecto

model Product {
  id Int @id @default(autoincrement())
  name String @unique
  quantity Int @default(0)
  price Int @default(999)
  createdAt DateTime @default(now())
  category Category @relation(fields: [categoryId], references: [id])
  categoryId Int
}
npx prisma migrate dev