Crea i dati iniziali ed esegui operazioni collettive sui dati

In Firebase Data Connect, le operazioni collettive sui dati vengono eseguite utilizzando le mutazioni. Anche se i progetti Data Connect archiviano i dati in PostgreSQL, non puoi caricarli collettivamente utilizzando istruzioni SQL o strumenti SQL: il servizio Data Connect e i relativi schemi devono rimanere sincronizzati con il database e l'utilizzo diretto di PostgreSQL interromperebbe questa sincronizzazione.

Ecco perché Data Connect fornisce mutazioni _insertMany, _upsertMany e _deleteMany standard per il seeding dei dati e la gestione collettiva dei dati.

Quando esegui la prototipazione di app ed esegui flussi CI/CD, queste mutazioni possono essere chiamate in un ambiente di sviluppo locale utilizzando l'estensione VS Code, l'emulatore Data Connect e, facoltativamente, un'istanza di database locale.

Dati iniziali nelle istanze locali e di produzione

Nella guida introduttiva, hai configurato un'app per aggiungere un singolo record a una singola tabella utilizzando una mutazione di inserimento ad hoc.

Per essere utilizzabile, l'app di recensioni di film ha bisogno di dati su film, recensioni e utenti per la prototipazione di query e mutazioni che utilizzano unioni e altre operazioni su più tabelle con dati realistici. Puoi espandere lo schema e eseguire il seeding del database.

.

L'ambiente di prototipazione richiede codice per eseguire il seeding dei dati. Questa guida fornisce alcuni esempi che illustrano:

  • Utilizzo di _insertMany e _upsertMany nelle singole tabelle
  • Utilizzo di _insertMany nelle tabelle correlate

Aggiornare lo schema dell'app di recensioni di film

Puoi utilizzare le mutazioni _insertMany e _upsertMany per aggiornare le singole tabelle di database una alla volta o più tabelle correlate da relazioni di join. Di seguito è riportato uno schema dell'app di recensioni di film espanso che aiuta a illustrare questi casi d'uso ed esempi. Espande schema.gql oltre il tipo iniziale Movie per includere i tipi Actor e MovieActor, in modo da poter creare il prototipo di query più complesse.

# Actors
# Suppose an actor can participate in multiple movies and movies can have multiple actors
# Movie - Actors (or vice versa) is a many to many relationship
type Actor @table {
  id: UUID!
  imageUrl: String! 
  name: String! @col(name: "name", dataType: "varchar(30)")
}

# Join table for many-to-many relationship for movies and actors
# The 'key' param signifies the primary key(s) of this table
# In this case, the keys are [movieId, actorId], the generated fields of the reference types [movie, actor]
type MovieActor @table(key: ["movie", "actor"]) {
  # @ref creates a field in the current table (MovieActor) that holds the primary key of the referenced type
  # In this case, @ref(fields: "movieId", references: "id") is implied
  movie: Movie!
  # movieId: UUID! <- this is created by the implied @ref
  actor: Actor!
  # actorId: UUID! <- this is created by the implied @ref
  role: String! # "main" or "supporting"
}

Scrivi le mutazioni per generare i dati iniziali dello stato zero

Durante la prototipazione, quando le query e le mutazioni devono essere testate su un intervallo di valori discreti, puoi compilare i dati con più record. Ad esempio, potresti aggiungere più record di film con diversi tipi di generi e classificazioni per testare i confronti e l'applicazione di filtri.

Inserisci i dati iniziali nelle tabelle Movie e Actor

A seconda della fase di prototipazione, puoi utilizzare la stessa tecnica introdotta nella guida Inizia a utilizzare per inserire uno o due record: in altre parole, puoi utilizzare le lenti di codice nell'estensione VS Code per creare mutazioni _insert, codificare i dati e eseguire queste mutazioni in VS Code.

Alla fine, ha più senso aggiungere molti record a una tabella utilizzando un'operazione _insertMany. Nell'esempio di app di recensioni di film, viene inserito un insieme iniziale di dati in Movie e Actor.

Per eseguire le seguenti mutazioni, utilizza l'estensione Firebase di VS Code e, nella visualizzazione dell'editor di file appropriata, fai clic sui pulsanti CodeLens Esegui (produzione) o Esegui (locale), a seconda che tu stia creando una prototipazione con il tuo servizio di produzione o con un database locale.

# insertMany for Movie
# 2 records shown
mutation {
  movie_insertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
  ])
}
# insertMany for Actor
# 2 records shown
mutation {
  actor_insertMany(data: [
    {
      id: "123e4567-e89b-12d3-a456-426614174000",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
      name: "Leonardo DiCaprio"
    },
    {
      id: "123e4567-e89b-12d3-a456-426614174001",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
      name: "Keanu Reeves"
    }
   ])
}

Inserisci i dati iniziali nella tabella di join MovieActor

Per testare le query e le mutazioni utilizzando unioni e altre operazioni complesse, puoi aggiungere più record alla tabella MovieActor.

Qui, quando aggiorni più tabelle in questo tipo di relazione, puoi aggiungere la direttiva @transaction per assicurarti che l'aggiornamento venga completato correttamente.

mutation @transaction {
  movie_insertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
  ])

  actor_insertMany(data: [
    {
      id: "123e4567-e89b-12d3-a456-426614174000",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
      name: "Leonardo DiCaprio"
    },
    {
      id: "123e4567-e89b-12d3-a456-426614174001",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
      name: "Keanu Reeves"
    }
  ])
}

Scrivi una mutazione per reimpostare i dati iniziali

Durante la creazione di prototipi ed l'esecuzione di CI/CD, può essere utile reimpostare i dati su uno stato zero per eseguire una nuova serie di test su un nuovo set di dati.

A tale scopo, se il codice del prototipo non aggiunge record alle tabelle, utilizza la mutazione _upsertMany fornita da Data Connect.

Nell'esempio seguente, movie_upsertMany viene chiamato con i valori iniziali per aggiornare i record dei film al loro stato originale.

mutation {
  # Execute an upsertMany operation to update the Movie table
  movie_upsertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
   
}

Quali sono i passaggi successivi?