Retour

GraphQL avec Apollo

Tuto
28 mars 2018
31mn

Progression
3

Installation du serveur GraphQL

Création de la base de données

Si vous utilisez le container docker, la base de données PostgreSQL est comprise dans le projet.

Si vous n'utilisez pas le docker, vous devez installer un PostgreSQL sur votre machine via la documentation suivante

Création du schéma

Pour gérer la communication avec PostgreSQL, nous allons utiliser la librairie Knex.

Pour cela il faut l'installer via Yarn :

yarn add knex pg

Nous allons commencer par gérer la connexion à la base de données en ajoutant un fichier pg.js à la racine du projet.

import Knex from 'knex'; const config = { host: 'pg', user: 'pg', password: 'pg', database: 'graphql' }; const pg = Knex({ client: 'pg', connection: config }); export default pg;

Puis nous allons créer le schéma de base de données. Dans la suite du tutoriel nous allons imaginer que l'application doit gérer les astronautes d'Eleven Labs, les liens avec leurs planètes et leurs grades.

Commençons par créer le dossier schemas qui contiendra l'ensemble des schémas de la base de données.

Astroanutes

Ajoutez le fichier astronaute.js contenant la table astronaute :

const up = function up(pg) { return pg.schema.createTable('astronaute', function (table) { table.increments(); table.string('pseudo'); table.string('photo'); table.integer('grade_id'); table.foreign('grade_id').references('grade.id'); table.timestamps(true, true); }); }; const down = function down(pg) { return pg.schema.hasTable('astronaute').then(function (exists) { if (exists) { return pg.schema.table('astronaute', function (table) { table.dropForeign('grade_id'); }).then(() => { return pg.schema.dropTable('astronaute'); }); } }); }; export default { up, down };

Nous utiliserons les fonctions up et down pour la création de la base.

Planets

Ajoutez le fichier planet.js contenant la table planet :

const up = function up(pg) { return pg.schema.createTable('planet', function (table) { table.increments(); table.string('name'); table.string('logo'); table.timestamps(true, true); }); }; const down = function down(pg) { return pg.schema.dropTableIfExists('planet'); }; export default { up, down };

Planets-Astronautes

Ajoutez le fichier planet-astronaute.js contenant la table de liaison entre un astronaute et sa planète :

const up = function up(pg) { return pg.schema.createTable('planet-astronaute', function (table) { table.increments(); table.integer('planet_id'); table.integer('astronaute_id'); table.foreign('planet_id').references('planet.id'); table.foreign('astronaute_id').references('astronaute.id'); table.timestamps(true, true); }); }; const down = function down(pg) { return pg.schema.hasTable('planet-astronaute').then(function (exists) { if (exists) { return pg.schema.table('planet-astronaute', function (table) { table.dropForeign('planet_id'); table.dropForeign('astronaute_id'); }).then(() => { return pg.schema.dropTable('planet-astronaute'); }); } }); }; export default { up, down };

Grades

Ajouter le fichier grade.js contenant la table des grades :

const up = function up(pg) { return pg.schema.createTable('grade', function (table) { table.increments(); table.string('name'); table.timestamps(true, true); }); }; const down = function down(pg) { return pg.schema.dropTableIfExists('grade'); }; export default { up, down };

Création de la base

Ajouter le fichier index.js permettant de générer la base de données :

import pg from './../pg'; import astronaute from './astronaute'; import planet from './planet'; import grade from './grade'; import planetAstronaute from './planet-astronaute'; planetAstronaute.down(pg).then(() => { console.log('planet-astronaute DROP'); return astronaute.down(pg); }).then(() => { console.log('astronaute DROP'); return grade.down(pg); }).then(() => { console.log('grade City DROP'); return planet.down(pg); }).then(() => { console.log('planet DROP'); return planet.up(pg); }).then(() => { console.log('planet CREATE'); return grade.up(pg); }).then(() => { console.log('grade CREATE'); return astronaute.up(pg); }).then(() => { console.log('astronaute CREATE'); return planetAstronaute.up(pg); }).then(() => { console.log('planetAstronaute City CREATE'); }).then(() => { console.log('Success !'); process.exit(); }).catch((e) => { console.log(e); });

Vous pouvez ajouter votre script suivant dans le package.json :

"scripts": { "start": "babel-node index.js", "pg": "babel-node schemas/index.js" }

Si vous lancez yarn pg, vos tables sont créées.

Retrouvez le code directement ici


Articles sur le même thème

Découvrez Eleven Labs

Notre site pour mieux nous connaître

J'y vais

Contact

Eleven Labs - Paris

102, rue du Faubourg Saint Honoré

75008 Paris

Eleven Labs - Nantes

42, rue la Tour d'Auvergne

44200 Nantes

Eleven Labs - Montréal

1155, Metcalfe St Suite 1500

Montréal, QC H3B 2V6, Canada

business@eleven-labs.com

01.82.83.11.75