// This is your Prisma schema file,// learn more about it in the docs: https://pris.ly/d/prisma-schemadatasource db { provider ="sqlite" url ="file:./dev.db"}generator client { provider ="prisma-client-js"}model Avocado{ id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime? @updatedAt
deletedAt DateTime? name String sku String @unique
price Float image String attributes Attributes?}model Attributes{ id Int @id @default(autoincrement()) description String? shape String? hardiness String? taste String? avocado Avocado @relation(fields:[avocadoId],references:[id]) avocadoId Int}
Para que los archivos .prisma tengan highlinting y también intellisense, les recomiendo instalar la extensión de vscode llamada Prisma.
Modelado Prisma
.
🛠 Repositorio Link
🚧 Commit Link
.
Para este caso, me ha interesado dividir nuestro schema.prisma, con el cual es posible mediante la herramienta Prismix.
.
Retomando mi diseño:
.
Definiendo un par de modelos:
// product.prisma
model Product {
id Int @id @default(autoincrement())
name String
price Decimal
quantity Int
image String
categoryId Int
category Category @relation(fields: [categoryId], references: [id])
@@map("product")
}
model Category {
id Int @id
products Product[]
}
// category.prisma
model Category {
id Int @id @default(autoincrement())
name String
@@map("category")
}
Configuración Prismix
Después de instalar la dependencia como desarrollo Link, anexo la configuración de prismix:
Me arrojaba un error el modelos de atributos, lo solucione agregando el decorador @unique al campo avocadoId, por si a alguien más le sale ese mismo error.
model Attributes {
id Int @id @default(autoincrement())
description String?
shape String?
hardiness String?
taste String?
avocado Avocado @relation(fields: [avocadoId], references: [id])
avocadoId Int @unique
}
A mí después de instalar la extensión para GraphQL de VScode
A mí después de instalar la extensión para GraphQL de VS Code
Si gustan trabajar directamente con Postgresql de una vez pueden poner en la url de db el string de conexión:
Y todo debe funcionar exactamente igual ^^
datasource db { provider ="postgresql" url ="postgres://<user>:<password>@<server>:<port>/<dbname>"}
Que locura Prisma! 🙃 👌
Solo para confirmar. Prisma nos brinda types basados en el modelo que creamos para nuestra base de datos, pero el schema de graphql sigue estando creado de forma "manual" por lo que los tipos que le pasamos a apollo -server los creamos nosotros, verdad?
Así es Camilo! ese fue el camino que tomamos. No obstante Prisma en usos más avanzados permite autogenerar esta parte también
como puedo guiarme para crear las carpetas de api?
cual es la diferencia entre ?
import type {Avocado}from'@prisma/client'
import{Avocado}from'@prisma/client'
¡Hola! :grinning:
La diferencia entre esas dos importaciones radica en cómo se está importando el tipo "Avocado" del módulo @prisma/client.
import type { Avocado } from '@prisma/client': Esta importación utiliza la sintaxis import type para importar únicamente el tipo "Avocado" sin importar el valor real del módulo. Esta sintaxis se utiliza en TypeScript cuando solo necesitas el tipo de un módulo y no necesitas acceder a los valores reales en tiempo de ejecución. Es una forma de importación más liviana y se utiliza para evitar sobrecargar el código con dependencias innecesarias.
import { Avocado } from '@prisma/client': Esta importación importa tanto el tipo "Avocado" como los valores reales del módulo '@prisma/client'. Es decir, no solo puedes acceder al tipo "Avocado" para realizar anotaciones de tipo en tu código, sino que también puedes acceder a las funcionalidades y objetos exportados por el módulo.
La elección entre estas dos formas de importación depende de tus necesidades específicas en el código. Si solo necesitas el tipo para realizar anotaciones de tipo, y no necesitas acceder a los valores reales en tiempo de ejecución, puedes optar por import type. Si necesitas tanto el tipo como los valores reales del módulo, entonces utiliza import.
Porque el ultimo argumento del comando
npx prisma migrate dev
es la palabra "dev", podría ser cualquier otra cosa?
La AI es una buena herramienta para pasar lo que tenemos en schema.graphql para lo que queremos en schema.prisma