GraphQL avec Apollo

GraphQL avec Apollo


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

Auteur(s)

Jonathan Jalouzot

Jonathan Jalouzot

Lead développeur au @lemondefr, mes technologies sont le symfony depuis 2009, le nodejs, l'angularjs, rabbitMq etc ... J'adore les médias et aimerai continuer dans ce secteur plein de surprise. Vous pouvez me retrouver sur les réseaux sociaux: Twitter: @captainjojo42 Instagram: @captainjojo42 Linkedin: https://fr.linkedin.com/in/jonathanjalouzot Github: https://github.com/captainjojo

Voir le profil

Vous souhaitez en savoir plus sur le sujet ?
Organisons un échange !

Notre équipe d'experts répond à toutes vos questions.

Nous contacter

Découvrez nos autres contenus dans le même thème