No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Filtros en Prisma

8/23
Recursos

Aportes 5

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Al hacer el include de los Attributes con Prisma, el tipo que se retorna ya no es solo Avocado, sino: Avocado & { attributes: Attributes | null }, así que deberíamos cambiar esto en el tipo de retorno de nuestros resolvers. El código final se vería algo como esto:

import { Avocado, Attributes } from '@prisma/client'

const getAllAvocados = async (
  parent: unknown,
  args: unknown,
  { orm }: ResolverContext
): Promise<(Avocado & { attributes: Attributes | null })[]> => {
  try {
    return await orm.avocado.findMany({
      include: {
        attributes: true
      }
    })
  } catch (error) {
    console.error('Error getting all the avocados')
    console.error(error)
    throw error
  }
}

const getOneAvocado = async (
  parent: unknown,
  {
    id
  }: {
    id: string
  },
  { orm }: ResolverContext
): Promise<
  | (Avocado & {
      attributes: Attributes | null
    })
  | null
> => {
  try {
    return await orm.avocado.findUnique({
      where: { id: parseInt(id) },
      include: {
        attributes: true
      }
    })
  } catch (error) {
    console.error('Error getting all the avocados')
    console.error(error)
    throw error
  }
}

export { getAllAvocados, getOneAvocado }

Inclusión de relaciones

<h5>🚧 Documentación</h5> <h5>🛠 Commit</h5>

.
Con prisma, es posible manipular la respuesta deseada mediante dos opciones de retorno:

  1. Select - Para retornar campos específicos o de aquellos basadas en su relación.
  2. Include - Para incluir relaciones en la misma respuesta.

.
Ya que GraphQL permite dinámicamente seleccionar los campos, con Prisma solamente definimos que será tratado en el su request la distinción de dichos campos.
.
Por ejemplo, siguiendo la clase del profesor, anexo simplemente la opción include.

// Account.model.ts
export default class AccountModel extends Model<Account, Query, Payload> {
   // more code...
    /**
     * @description Find an account by id.
     * @param {Query} query
     * @returns Account */
    async findUnique(query: Query): Promise<Account> {
        return await this.client.findUnique({
            where: query,
            include: { directions: true },
        })
    }
   // more code...
}

Revisando que la referencia esté definida en el schema de graphql:

        type Account {
            id: ID!
            email: String!
            password: String!
            directions: [Direction]
        }

El avocado del profesor:

{
  "data": {
    "name": "Zutano Avocado",
    "price": 1.25,
    "image": "/images/zutano.jpg",
    "description": "The Zutano avocado is a cold hardy, consistent producing avocado variety. It resembles the Fuerte in appearance but is less flavorful but more cold hardy. The green fruits are abovate in shape with waxy bumps on the skin. The flesh has a low oil but high water content which causes it to have a more fibrous texture.",
    "shape": "Pear",
    "hardiness": "-5 ºC",
    "taste": "Splendid, is an avocado"
  }
}

Como recomendacion para poder leer archivos json en el navegador de una mejor manera les recomiendo esta extencion
extencion