From 8ca550dc7b7b3f02a53091f8824f80cd562cfeb8 Mon Sep 17 00:00:00 2001
From: ManifoldFR <wilson.jallet@gmail.com>
Date: Fri, 31 Aug 2018 12:52:54 +0200
Subject: [PATCH] Refactorise les typeDefs GraphQL dans des fichiers .graphql

utilise le webpack-graphql-loader
---
 .gitlab-ci.yml                       |   1 +
 package-lock.json                    | 420 +++++++++++++++++++++++++++
 package.json                         |   2 +
 src/graphql/schema.js                |   4 +-
 src/graphql/typeDefs/actions.graphql | 238 +++++++++++++++
 src/graphql/typeDefs/objects.graphql | 164 +++++++++++
 webpack.config.js                    |  15 +-
 7 files changed, 841 insertions(+), 3 deletions(-)
 create mode 100644 src/graphql/typeDefs/actions.graphql
 create mode 100644 src/graphql/typeDefs/objects.graphql

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cb2d565..1653c64 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -46,6 +46,7 @@ deploy-staging:
   only:
     - stable
   before_script:
+    - export NODE_ENV=staging
     - eval $(ssh-agent -s)
     - ssh-add <(echo "$STAGING_PRIVATE_KEY")
     - mkdir -p ~/.ssh
diff --git a/package-lock.json b/package-lock.json
index abab8e2..1e27db5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -626,6 +626,167 @@
         "normalize-path": "^2.1.1"
       }
     },
+    "apollo-codegen": {
+      "version": "0.19.1",
+      "resolved": "https://registry.npmjs.org/apollo-codegen/-/apollo-codegen-0.19.1.tgz",
+      "integrity": "sha512-jlxz/b5iinRWfh48hXdmMtrjTPn/rDok0Z3b7icvkiaD6I30w4sq9B+JDkFbLnkldzsFLV2BZtBDa/dkZhx8Ng==",
+      "dev": true,
+      "requires": {
+        "@babel/generator": "7.0.0-beta.38",
+        "@babel/types": "7.0.0-beta.38",
+        "change-case": "^3.0.1",
+        "common-tags": "^1.5.1",
+        "core-js": "^2.5.3",
+        "glob": "^7.1.2",
+        "graphql": "^0.13.1",
+        "graphql-config": "^1.1.1",
+        "inflected": "^2.0.3",
+        "node-fetch": "^1.7.3",
+        "rimraf": "^2.6.2",
+        "source-map-support": "^0.5.0",
+        "yargs": "^10.0.3"
+      },
+      "dependencies": {
+        "@babel/generator": {
+          "version": "7.0.0-beta.38",
+          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.38.tgz",
+          "integrity": "sha512-aOHQPhsEyaB6p2n+AK981+onHoc+Ork9rcAQVSUJR33wUkGiWRpu6/C685knRyIZVsKeSdG5Q4xMiYeFUhuLzA==",
+          "dev": true,
+          "requires": {
+            "@babel/types": "7.0.0-beta.38",
+            "jsesc": "^2.5.1",
+            "lodash": "^4.2.0",
+            "source-map": "^0.5.0",
+            "trim-right": "^1.0.1"
+          }
+        },
+        "@babel/types": {
+          "version": "7.0.0-beta.38",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.38.tgz",
+          "integrity": "sha512-SAtyEjmA7KiEoL2eAOAUM6M9arQJGWxJKK0S9x0WyPOosHS420RXoxPhn57u/8orRnK8Kxm0nHQQNTX203cP1Q==",
+          "dev": true,
+          "requires": {
+            "esutils": "^2.0.2",
+            "lodash": "^4.2.0",
+            "to-fast-properties": "^2.0.0"
+          }
+        },
+        "cliui": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+          "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+          "dev": true,
+          "requires": {
+            "string-width": "^2.1.1",
+            "strip-ansi": "^4.0.0",
+            "wrap-ansi": "^2.0.0"
+          }
+        },
+        "graphql": {
+          "version": "0.13.2",
+          "resolved": "http://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz",
+          "integrity": "sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==",
+          "dev": true,
+          "requires": {
+            "iterall": "^1.2.1"
+          }
+        },
+        "graphql-config": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-1.2.1.tgz",
+          "integrity": "sha512-BOtbEOn/fD13jT0peCy3Fzp1DSTsA/1AcZp266AQ5Sk3wFndKCEa/H7donbu5UriOw1V/N1WDirYPnr7rd8E7Q==",
+          "dev": true,
+          "requires": {
+            "graphql": "^0.12.3",
+            "graphql-import": "^0.4.0",
+            "graphql-request": "^1.4.0",
+            "js-yaml": "^3.10.0",
+            "lodash": "^4.17.4",
+            "minimatch": "^3.0.4"
+          },
+          "dependencies": {
+            "graphql": {
+              "version": "0.12.3",
+              "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.12.3.tgz",
+              "integrity": "sha512-Hn9rdu4zacplKXNrLCvR8YFiTGnbM4Zw/UH8FDmzBDsH7ou40lSNH4tIlsxcYnz2TGNVJCpu1WxCM23yd6kzhA==",
+              "dev": true,
+              "requires": {
+                "iterall": "1.1.3"
+              }
+            },
+            "iterall": {
+              "version": "1.1.3",
+              "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz",
+              "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==",
+              "dev": true
+            }
+          }
+        },
+        "node-fetch": {
+          "version": "1.7.3",
+          "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+          "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+          "dev": true,
+          "requires": {
+            "encoding": "^0.1.11",
+            "is-stream": "^1.0.1"
+          }
+        },
+        "source-map-support": {
+          "version": "0.5.9",
+          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
+          "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
+          "dev": true,
+          "requires": {
+            "buffer-from": "^1.0.0",
+            "source-map": "^0.6.0"
+          },
+          "dependencies": {
+            "source-map": {
+              "version": "0.6.1",
+              "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+              "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+              "dev": true
+            }
+          }
+        },
+        "y18n": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+          "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+          "dev": true
+        },
+        "yargs": {
+          "version": "10.1.2",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz",
+          "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==",
+          "dev": true,
+          "requires": {
+            "cliui": "^4.0.0",
+            "decamelize": "^1.1.1",
+            "find-up": "^2.1.0",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^2.0.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^2.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^8.1.0"
+          }
+        },
+        "yargs-parser": {
+          "version": "8.1.0",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz",
+          "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==",
+          "dev": true,
+          "requires": {
+            "camelcase": "^4.1.0"
+          }
+        }
+      }
+    },
     "apollo-link": {
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.2.tgz",
@@ -2034,6 +2195,12 @@
       "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
       "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
     },
+    "buffer-from": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+      "dev": true
+    },
     "buffer-writer": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz",
@@ -2153,6 +2320,16 @@
       "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
       "dev": true
     },
+    "camel-case": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0",
+        "upper-case": "^1.1.1"
+      }
+    },
     "camelcase": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
@@ -2194,6 +2371,32 @@
         "supports-color": "^5.3.0"
       }
     },
+    "change-case": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz",
+      "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==",
+      "dev": true,
+      "requires": {
+        "camel-case": "^3.0.0",
+        "constant-case": "^2.0.0",
+        "dot-case": "^2.1.0",
+        "header-case": "^1.0.0",
+        "is-lower-case": "^1.1.0",
+        "is-upper-case": "^1.1.0",
+        "lower-case": "^1.1.1",
+        "lower-case-first": "^1.0.0",
+        "no-case": "^2.3.2",
+        "param-case": "^2.1.0",
+        "pascal-case": "^2.0.0",
+        "path-case": "^2.1.0",
+        "sentence-case": "^2.1.0",
+        "snake-case": "^2.1.0",
+        "swap-case": "^1.1.0",
+        "title-case": "^2.1.0",
+        "upper-case": "^1.1.1",
+        "upper-case-first": "^1.1.0"
+      }
+    },
     "character-parser": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
@@ -2498,6 +2701,12 @@
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
       "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag=="
     },
+    "common-tags": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
+      "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
+      "dev": true
+    },
     "commondir": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
@@ -2574,6 +2783,16 @@
         "date-now": "^0.1.4"
       }
     },
+    "constant-case": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz",
+      "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=",
+      "dev": true,
+      "requires": {
+        "snake-case": "^2.1.0",
+        "upper-case": "^1.1.1"
+      }
+    },
     "constantinople": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz",
@@ -3038,6 +3257,15 @@
       "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
       "dev": true
     },
+    "dot-case": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz",
+      "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0"
+      }
+    },
     "dot-prop": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
@@ -3135,6 +3363,15 @@
       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
       "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
     },
+    "encoding": {
+      "version": "0.1.12",
+      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+      "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+      "dev": true,
+      "requires": {
+        "iconv-lite": "~0.4.13"
+      }
+    },
     "end-of-stream": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
@@ -3358,6 +3595,16 @@
         }
       }
     },
+    "eslint-plugin-graphql": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-graphql/-/eslint-plugin-graphql-2.1.1.tgz",
+      "integrity": "sha512-JT2paUyu3e9ZDnroSshwUMc6pKcnkfXTsZInX1+/rPotvqOLVLtdrx/cmfb7PTJwjiEAshwcpm3/XPdTpsKJPw==",
+      "dev": true,
+      "requires": {
+        "graphql-config": "^2.0.1",
+        "lodash": "^4.11.1"
+      }
+    },
     "eslint-plugin-import": {
       "version": "2.14.0",
       "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz",
@@ -4970,6 +5217,28 @@
         "iterall": "^1.2.2"
       }
     },
+    "graphql-config": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.1.0.tgz",
+      "integrity": "sha512-LWpkME3x+KSFMVuMpRmDHTIZLyQQsBoKtMXJrT4RgXk6y0GRf0lsJ81R3S2FmT1CKZQOJfFsOpUfPpAcfmoN/A==",
+      "dev": true,
+      "requires": {
+        "graphql-import": "^0.4.4",
+        "graphql-request": "^1.5.0",
+        "js-yaml": "^3.10.0",
+        "lodash": "^4.17.4",
+        "minimatch": "^3.0.4"
+      }
+    },
+    "graphql-import": {
+      "version": "0.4.5",
+      "resolved": "https://registry.npmjs.org/graphql-import/-/graphql-import-0.4.5.tgz",
+      "integrity": "sha512-G/+I08Qp6/QGTb9qapknCm3yPHV0ZL7wbaalWFpxsfR8ZhZoTBe//LsbsCKlbALQpcMegchpJhpTSKiJjhaVqQ==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.4"
+      }
+    },
     "graphql-request": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.6.0.tgz",
@@ -5112,6 +5381,16 @@
         "minimalistic-assert": "^1.0.1"
       }
     },
+    "header-case": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz",
+      "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0",
+        "upper-case": "^1.1.3"
+      }
+    },
     "hmac-drbg": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@@ -5245,6 +5524,12 @@
       "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
       "dev": true
     },
+    "inflected": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inflected/-/inflected-2.0.4.tgz",
+      "integrity": "sha512-HQPzFLTTUvwfeUH6RAGjD8cHS069mBqXG5n4qaxX7sJXBhVQrsGgF+0ZJGkSuN6a8pcUWB/GXStta11kKi/WvA==",
+      "dev": true
+    },
     "inflight": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -5494,6 +5779,15 @@
         "is-path-inside": "^1.0.0"
       }
     },
+    "is-lower-case": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz",
+      "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=",
+      "dev": true,
+      "requires": {
+        "lower-case": "^1.1.0"
+      }
+    },
     "is-npm": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
@@ -5666,6 +5960,15 @@
         "unc-path-regex": "^0.1.2"
       }
     },
+    "is-upper-case": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz",
+      "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=",
+      "dev": true,
+      "requires": {
+        "upper-case": "^1.1.0"
+      }
+    },
     "is-utf8": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
@@ -6669,6 +6972,21 @@
         "js-tokens": "^3.0.0 || ^4.0.0"
       }
     },
+    "lower-case": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+      "dev": true
+    },
+    "lower-case-first": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz",
+      "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=",
+      "dev": true,
+      "requires": {
+        "lower-case": "^1.1.2"
+      }
+    },
     "lowercase-keys": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
@@ -7138,6 +7456,15 @@
       "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==",
       "dev": true
     },
+    "no-case": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+      "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+      "dev": true,
+      "requires": {
+        "lower-case": "^1.1.1"
+      }
+    },
     "node-dir": {
       "version": "0.1.8",
       "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.8.tgz",
@@ -7652,6 +7979,15 @@
         "readable-stream": "^2.1.5"
       }
     },
+    "param-case": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0"
+      }
+    },
     "parse-asn1": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
@@ -7723,6 +8059,16 @@
       "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
       "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
     },
+    "pascal-case": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz",
+      "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=",
+      "dev": true,
+      "requires": {
+        "camel-case": "^3.0.0",
+        "upper-case-first": "^1.1.0"
+      }
+    },
     "pascalcase": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
@@ -7774,6 +8120,15 @@
       "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
       "dev": true
     },
+    "path-case": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz",
+      "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0"
+      }
+    },
     "path-dirname": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
@@ -8968,6 +9323,16 @@
         }
       }
     },
+    "sentence-case": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz",
+      "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0",
+        "upper-case-first": "^1.1.2"
+      }
+    },
     "serialize-javascript": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
@@ -9109,6 +9474,15 @@
       "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
       "dev": true
     },
+    "snake-case": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz",
+      "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0"
+      }
+    },
     "snapdragon": {
       "version": "0.8.2",
       "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
@@ -9523,6 +9897,16 @@
       "resolved": "https://registry.npmjs.org/svg-pan-zoom/-/svg-pan-zoom-3.5.3.tgz",
       "integrity": "sha512-jlHEOXRW4IF0W2e2DTk+hjKPKassF4TpJSSC7ilHJoZHX9hthFzU63WhluEwzSbTQF4akrWcjmbWxiCoGPa6PA=="
     },
+    "swap-case": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz",
+      "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=",
+      "dev": true,
+      "requires": {
+        "lower-case": "^1.1.1",
+        "upper-case": "^1.1.1"
+      }
+    },
     "symbol-observable": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
@@ -9660,6 +10044,16 @@
       "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz",
       "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow=="
     },
+    "title-case": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz",
+      "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0",
+        "upper-case": "^1.0.3"
+      }
+    },
     "tmp": {
       "version": "0.0.33",
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -10039,6 +10433,21 @@
         "xdg-basedir": "^3.0.0"
       }
     },
+    "upper-case": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+      "dev": true
+    },
+    "upper-case-first": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz",
+      "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=",
+      "dev": true,
+      "requires": {
+        "upper-case": "^1.1.1"
+      }
+    },
     "urix": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
@@ -10627,6 +11036,17 @@
         }
       }
     },
+    "webpack-graphql-loader": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/webpack-graphql-loader/-/webpack-graphql-loader-1.0.0.tgz",
+      "integrity": "sha512-P0aU8uRHtRYMNMtl0cIasY1SQ8L6vLyo66VPXSDtRFyXogiVpTtPfZHNtIIMqIbvx0Eh9zxcSFc7kwrFoW5bbQ==",
+      "dev": true,
+      "requires": {
+        "apollo-codegen": "^0.19.1",
+        "loader-utils": "^1.1.0",
+        "pify": "^3.0.0"
+      }
+    },
     "webpack-node-externals": {
       "version": "1.7.2",
       "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz",
diff --git a/package.json b/package.json
index 6d5a9f7..b3b2009 100644
--- a/package.json
+++ b/package.json
@@ -57,6 +57,7 @@
     "eslint": "^4.19.1",
     "eslint-config-standard": "^11.0.0",
     "eslint-loader": "^2.1.0",
+    "eslint-plugin-graphql": "^2.1.1",
     "eslint-plugin-import": "^2.14.0",
     "eslint-plugin-node": "^6.0.1",
     "eslint-plugin-promise": "^3.8.0",
@@ -67,6 +68,7 @@
     "typescript": "^3.0.3",
     "webpack": "^4.17.1",
     "webpack-cli": "^2.1.5",
+    "webpack-graphql-loader": "^1.0.0",
     "webpack-node-externals": "^1.7.2"
   }
 }
diff --git a/src/graphql/schema.js b/src/graphql/schema.js
index 39fc008..212e583 100644
--- a/src/graphql/schema.js
+++ b/src/graphql/schema.js
@@ -4,8 +4,8 @@
 */
 
 import { makeExecutableSchema } from 'graphql-tools';
-import actionDefs from './typeDefs/actions';
-import objectDefs from './typeDefs/objects';
+import actionDefs from './typeDefs/actions.graphql';
+import objectDefs from './typeDefs/objects.graphql';
 import { resolvers } from './resolvers';
 
 const typeDefs = actionDefs.concat(objectDefs);
diff --git a/src/graphql/typeDefs/actions.graphql b/src/graphql/typeDefs/actions.graphql
new file mode 100644
index 0000000..ba699c0
--- /dev/null
+++ b/src/graphql/typeDefs/actions.graphql
@@ -0,0 +1,238 @@
+# Requêtes
+type Query {
+    
+    # group queries
+
+    allGroups: [Group]
+    allSimpleGroups: [SimpleGroup]
+
+    group(uid: ID!) : Group
+    simpleGroup(uid : ID!) : SimpleGroup
+    metaGroup(uid : ID!) : MetaGroup
+
+    # message queries
+
+    allMessages: [Message]
+    message(id: ID!): Message
+    allPosts: [Post]
+    post(id: ID!): Post
+    allEvents: [Event]
+    allAnnouncements: [Announcement]
+    
+    # user queries
+
+    user(uid: ID) : User
+
+    searchTOL(
+        givenName: String,
+        lastName: String,
+        nickname: String,
+        nationality: String,
+        school: String,
+        promotion: String,
+        groups: String,
+        studies: String,
+        sport: String,
+        phone: String,
+        mail: String,
+        adress: String,
+        ip: String
+    ): [String]
+
+    # Admin queries
+
+    allRequests(from : String!) : [Request]
+
+    # Speaker queries 
+
+    # allRequests(from : String!) : [Request]
+
+    # Member Queries
+
+    allMembers(from : String!) : [Group]
+
+    # Viewer Queries
+
+}
+
+type Mutation {
+
+    # Superviser mutations
+
+    takeAdminRights(from : String!) : Boolean
+    releaseAdminRights(from : String!) : Boolean
+
+    # Admin mutations
+
+    createSubgroup(
+        from : String!,
+        uid: ID = null,
+        name: String!,
+        website: String,
+        description: String,
+        school: String
+    ): Group
+
+    addUser(from : String!, userid : String!): User
+    removeUser(from : String!, userid : String!): User
+    addAdmin(from : String!, userid : String!): User
+    removeAdmin(from : String!, userid : String!): User
+
+    editGroup(
+        from : String!,
+        name: String,
+        website: String,
+        description: String,
+        school: String
+    ): Group
+
+    # Creates a new event.
+    postEvent(
+        # ID of the organizing group.
+        from: ID!, 
+        # Title of the event.
+        title: String,
+        # Date of event.
+        date: String
+    ): Event
+
+    answerEventRequest(from : String, request: ID, accept : Boolean): Request
+
+    # Log user into the API
+    login(username: String!, password: String!): String!
+    # Log user out of the API
+    logout(username: String!): Boolean
+    leave(from : String!) : Boolean
+
+    # Viewer mutations
+
+    requestJoin(from : String!) : Boolean
+
+}
+
+
+
+#        asSuperviser(groupUID: String): SuperviserMutation
+#        asAdmin(groupUID: String): AdminMutation
+#        asSpeaker(groupUID: String): SpeakerMutation
+#        asMember(groupUID: String): MemberMutation
+#        asViewer(groupUID: String): ViewerMutation
+
+#        accessGroups : GroupQuery
+#        accessPosts : MessageQuery
+#        accessUsers : UserQuery
+
+#        asAdmin(groupUID: ID): AdminQuery
+#        asSpeaker(groupUID: ID): AdminQuery
+#        asMember(groupUID: ID): MemberQuery
+#        asViewer(groupUID: ID): AdminQuery
+
+
+type SuperviserMutation {
+    runAdminOperation : AdminMutation
+    takeAdminRights : Boolean
+    releaseAdminRights : Boolean
+}
+
+type AdminMutation {
+
+    isAdmin: Boolean
+
+    createSubgroup(
+        uid: ID = null,
+        name: String,
+        website: String,
+        description: String,
+        school: String
+    ): Group
+
+    addUser(userid : String): User
+    removeUser(userid : String): User
+    addAdmin(userid : String): User
+    removeAdmin(userid : String): User
+
+    editGroup(
+        name: String,
+        website: String,
+        description: String,
+        school: String
+    ): Group
+
+}
+
+type SpeakerMutation{
+    postEvent(name: String, date: String): Event
+    answerEventRequest(request: ID, accept : Boolean): Request
+}
+
+type MemberMutation {
+    leave: Group
+}
+
+type ViewerMutation {
+    requestJoin: Group
+}
+
+
+# Requête pour obtenir un groupe.
+type GroupQuery{
+    allGroups: [Group]
+    allSimpleGroups: [SimpleGroup]
+
+    group(uid: ID) : Group
+    simpleGroup(uid : ID) : SimpleGroup
+    metaGroup(uid : ID) : MetaGroup
+
+}
+
+# Requête pour obtenir un message.
+type MessageQuery{
+    allMessages: [Message]
+    allEvents: [Event]
+    allPosts: [Post]
+    message(id: ID): Message
+    allAnnouncements: [Announcement]
+}
+
+
+# Requête pour obtenir un utilisateur.
+type UserQuery{
+
+    user(uid: ID) : User
+
+    searchTOL(
+        givenName: String,
+        lastName: String,
+        nickname: String,
+        nationality: String,
+        school: String,
+        promotion: String,
+        groups: String,
+        studies: String,
+        sport: String,
+        phone: String,
+        mail: String,
+        adress: String,
+        ip: String
+    ): [String]
+}
+
+# Requête à la base de donnée nécessitant d'être administrateur.
+type AdminQuery{
+    isAdmin: Boolean
+    allRequests : [Request]
+}
+
+type SpeakerQuery{
+    isSpeaker: Boolean
+    allRequests : [Request]
+}
+
+type MemberQuery{
+    isMember: Boolean
+    allMembers : [Group]
+}
+
+type ViewerQuery{
+    isViewer: Boolean
+}
diff --git a/src/graphql/typeDefs/objects.graphql b/src/graphql/typeDefs/objects.graphql
new file mode 100644
index 0000000..bc6609b
--- /dev/null
+++ b/src/graphql/typeDefs/objects.graphql
@@ -0,0 +1,164 @@
+type User {
+    # Prénom de l'utilisateur
+    givenName: String!
+    # Nom de famille
+    lastName: String!
+    # Surnom
+    nickname: String
+    nationality: String
+    uid: ID!
+    birthdate: String!
+    mail: String
+    phone: String
+    # Groupes dont l'utilisateur est membre.
+    groups: [SimpleGroup]
+    # Groupes que l'utilisateur aime.
+    likes: [Group]
+    # Adresse(s) de l'utilisateur.
+    address: [String]
+    # Promotion
+    promotion: String
+}
+
+# Groupes associatifs
+
+
+"""
+L'interface Group représente les deux types de groupes implémentés dans Sigma : les groupes
+simples, dont les membres sont des utilisateurs, et les métagroupes, dont les membres sont
+des groupes simples (tel que Federez, dont les membres incluent le BR et DaTA). 
+"""
+interface Group {
+    uid: ID
+    name: String
+    # Site Web.
+    website: String
+    description: String
+    
+    # Jour et heure de création du groupe.
+    createdAt: String!
+    # Dernière mise à jour du groupe.
+    updatedAt: String!
+
+}
+
+# Le groupe de base, dont les membres sont des utilisateurs : binets, Kès...
+type SimpleGroup implements Group {
+    uid: ID
+    name: String
+    website: String
+    createdAt: String!
+    updatedAt: String!
+
+    # Membres du groupe
+    members: [User]
+    description: String
+    # École d'origine du groupe
+    school: String
+    # Groupe parent
+    parent: Group
+}
+
+# Un groupe dont les membre sont d'autres groupes
+type MetaGroup implements Group {
+    uid: ID
+    name: String
+    website: String
+    createdAt: String!
+    updatedAt: String!
+    description: String
+
+    # Les groupes constitutifs du méta-groupe.
+    members: [Group]!
+}
+
+# Tout type de message créé par un ou plusieurs groupes.
+interface Message {
+    id: ID!
+    # Titre du message
+    title: String!
+    content: String
+    createdAt: String!
+    updatedAt: String!
+    # Auteur(s) du message
+    authors: [Group]
+}
+
+# Publication postée par un ou plusieurs groupes.
+type Post implements Message {
+    id: ID!
+    title: String!
+    createdAt: String!
+    updatedAt: String!
+    authors: [Group]
+    content: String!
+}
+
+# Annonce publique effectuée par un ou plusieurs groupes.
+type Announcement implements Message {
+    id: ID!
+    title: String!
+    createdAt: String!
+    updatedAt: String!
+    authors: [Group]
+    content: String!
+    importance: Int
+    views: Int
+    forEvent : Event
+}
+
+# Événements organisés par un ou plusieurs groupes.
+type Event implements Message {
+    id: ID!
+    # Intitulé de l'événement
+    title: String!
+    # Lieu de l'événement
+    location: String
+    createdAt: String!
+    updatedAt: String!
+    startTime: String!
+    endTime: String!
+    # Organisateurs
+    authors: [Group]
+    # Personnes qui participent à l'événement.
+    participatingGroups: [Group]
+    participatingUsers: [User]
+    content: String
+    asAnnouncement : Announcement
+}
+
+interface Request {
+    # ID de la demande
+    id: ID!
+    # message accompagnant la demande
+    message: String
+}
+
+# Demande d'un utilisateur désirant rejoindre le groupe.
+type UserJoinGroup implements Request{
+    id: ID!
+    message: String
+    # Émetteur de la demande
+    user: User
+}
+
+
+# Demande d'un groupe voulant rejoindre un événement
+type GroupJoinEvent implements Request{
+    id: ID!
+    message: String
+    # Événement concerné
+    event: Event
+    # Groupe voulant rejoindre l'événement
+    groupWantingToJoin: Group
+}
+
+# Demande au récipiendaire de rejoindre l'organisation d'un événement.
+type YourGroupHostEvent implements Request{
+    id: ID!
+    message: String
+    # Événement concerné
+    event: Event
+    # Groupe ayant publié l'évènement et lancé l'invitation
+    sender: Group
+}
diff --git a/webpack.config.js b/webpack.config.js
index 3369645..5b75c26 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -28,10 +28,23 @@ const config = {
         },{
             test: /\.css$/,
             use: ['style-loader', 'css-loader']
-        }, {
+        },{
             type: 'javascript/auto',
             test: /\.json$/,
             use: ['file-loader']
+        }, {
+            test: /\.graphql?$/,
+            use: [
+                {
+                    loader: 'webpack-graphql-loader',
+                    options: {
+                        // validate: true,
+                        // schema: "./path/to/schema.json",
+                        // removeUnusedFragments: true
+                        // etc. See "Loader Options" below
+                    }
+                }
+            ]
         },{
             test: /\.(png|jpg|ico)$/,
             loader: 'file-loader',
-- 
GitLab