diff --git a/lib/relay/app.relay.js b/lib/relay/app.relay.js
new file mode 100644
index 0000000..e3d8963
--- /dev/null
+++ b/lib/relay/app.relay.js
@@ -0,0 +1,15 @@
+import 'babel-polyfill';
+
+import App from './components/App';
+import AppHomeRoute from './routes/AppHomeRoute';
+import React from 'react';
+import ReactDOM from 'react-dom';
+import Relay from 'react-relay';
+
+ReactDOM.render(
+ ,
+ document.getElementById('root')
+);
diff --git a/lib/relay/components/App.js b/lib/relay/components/App.js
new file mode 100644
index 0000000..c56199d
--- /dev/null
+++ b/lib/relay/components/App.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import Relay from 'react-relay';
+
+import DB from './../../config/database'
+
+class App extends React.Component {
+ render() {
+ var viewer = this.props.viewer,
+ house = viewer.house.edge.node;
+ return (
+
+
Hi, {viewer.username}
+
You are living in the {house.name} house!!!!
+
+ );
+ }
+}
+
+export default Relay.createContainer(App, {
+ fragments: {
+ viewer: () => Relay.QL`
+ fragment on ${DB.User.name} {
+ username
+ house {
+ edge {
+ node {
+ name
+ }
+ }
+ }
+ }
+ `,
+ },
+});
diff --git a/relay/routes/AppHomeRoute.js b/lib/relay/routes/AppHomeRoute.js
similarity index 100%
rename from relay/routes/AppHomeRoute.js
rename to lib/relay/routes/AppHomeRoute.js
diff --git a/models/house.js b/models/house.js
index 2ef5672..962fbfc 100644
--- a/models/house.js
+++ b/models/house.js
@@ -37,42 +37,52 @@ var House = DB.sequelize.define(NAME, {
},
classMethods: {
set: ()=>{
+
+ },
+ associate: ()=>{
House.hasMany(DB.PowerDatum, {as: 'PowerData'});
House.hasMany(DB.User, {as: 'Habitants'});
+ },
+ defineGraphQLType: ()=>{
House.graphql_type = new GraphQLObjectType({
name: NAME,
description: 'A house',
- fields: () => ({
- id: globalIdField(NAME),
- name: {
- type: new GraphQLNonNull(GraphQLString)
- },
- power_data: {
- type: connectionDefinitions({name: DB.PowerDatum.name, nodeType: DB.PowerDatum.graphql_type}).connectionType,
- description: "Returns house's power data.",
- args: connectionArgs,
- resolve: (house, args) => {
- return house.getPowerDataByTime(args);
+ fields: () => {
+ var {connectionType: power_data_connection} = connectionDefinitions({name: DB.PowerDatum.name, nodeType: DB.PowerDatum.graphql_type}),
+ {connectionType: habitants_connection} = connectionDefinitions({name: DB.User.name, nodeType: DB.User.graphql_type});
+
+ return {
+ id: globalIdField(NAME),
+ name: {
+ type: new GraphQLNonNull(GraphQLString)
+ },
+ power_data: {
+ type: power_data_connection,
+ description: "Returns house's power data.",
+ args: connectionArgs,
+ resolve: (house, args) => {
+ return house.getPowerDataByTime(args);
+ }
+ },
+ habitants: {
+ type: habitants_connection,
+ description: "Returns list of house's habitants.",
+ args: connectionArgs,
+ resolve: (house, args) => {
+ var params = extend({
+ order: 'name ASC',
+ limit: 50,
+ offset: 0,
+ }, args);
+ delete params.where; // don't allow any additional query params.
+ return house.getHabitants(params);
+ }
}
- },
- habitants: {
- type: connectionDefinitions({name: DB.User.name, nodeType: DB.User.graphql_type}).connectionType,
- description: "Returns list of house's habitants.",
- args: connectionArgs,
- resolve: (house, args) => {
- var params = extend({
- order: 'name ASC',
- limit: 50,
- offset: 0,
- }, args);
- delete params.where; // don't allow any additional query params.
- return house.getHabitants(params);
- }
- }
- }),
+ };
+ },
interfaces: [nodeInterface]
});
- },
+ }
getPowerDataByTime: (start_date, end_date, page)=>{
var params = extend({
order: 'time ASC',
diff --git a/models/power_datum.js b/models/power_datum.js
index 82293a9..edf11e4 100644
--- a/models/power_datum.js
+++ b/models/power_datum.js
@@ -34,7 +34,13 @@ var PowerDatum = DB.sequelize.define(NAME, {
},
classMethods: {
set: ()=>{
+ PowerDatum.associate();
+ PowerDatum.defineGraphQLType();
+ },
+ associate: ()=>{
PowerDatum.belongsTo(DB.House);
+ },
+ defineGraphQLType: ()=>{
PowerDatum.graphql_type = new GraphQLObjectType({
name: NAME,
description: 'A person who uses our app',
diff --git a/models/user.js b/models/user.js
index f025e1f..b758ec3 100644
--- a/models/user.js
+++ b/models/user.js
@@ -38,25 +38,32 @@ var User = DB.sequelize.define(NAME, {
},
classMethods: {
set: ()=>{
+ User.associate();
+ User.defineGraqhQLType()
+ },
+ associate: ()=>{
User.belongsTo(DB.House);
+ },
+ defineGraqhQLType: ()=>{
User.graphql_type = new GraphQLObjectType({
name: NAME,
description: 'A house',
- fields: () => ({
- id: globalIdField(NAME),
- username: {
- type: new GraphQLNonNull(GraphQLString)
- },
- house: {
- type: connectionDefinitions({name: DB.House.name, nodeType: DB.House.graphql_type}).connectionType,
- description: "Returns user's house.",
- args: connectionArgs,
- ref: DB.PowerDatum.name,
- resolve: (user, args) => {
- return user.getHouse();
+ fields: () => {
+ var {connectionType: house_connection} = connectionDefinitions({name: DB.House.name, nodeType: DB.House.graphql_type});
+ return {
+ id: globalIdField(NAME),
+ username: {
+ type: new GraphQLNonNull(GraphQLString)
+ },
+ house: {
+ type: house_connection,
+ description: "Returns user's house.",
+ resolve: (user, args) => {
+ return user.getHouse();
+ }
}
- }
- }),
+ };
+ },
interfaces: [nodeInterface]
});
}
diff --git a/relay/components/App.js b/relay/components/App.js
deleted file mode 100644
index 4492632..0000000
--- a/relay/components/App.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import React from 'react';
-import Relay from 'react-relay';
-
-class App extends React.Component {
- render() {
- return (
-
-
Widget list
-
- {this.props.viewer.widgets.edges.map(edge =>
- - {edge.node.name} (ID: {edge.node.id})
- )}
-
-
- );
- }
-}
-
-export default Relay.createContainer(App, {
- fragments: {
- viewer: () => Relay.QL`
- fragment on User {
- widgets(first: 10) {
- edges {
- node {
- id,
- name,
- },
- },
- },
- }
- `,
- },
-});