clean up database model setting
This commit is contained in:
15
lib/relay/app.relay.js
Normal file
15
lib/relay/app.relay.js
Normal file
@@ -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(
|
||||
<Relay.RootContainer
|
||||
Component={App}
|
||||
route={new AppHomeRoute()}
|
||||
/>,
|
||||
document.getElementById('root')
|
||||
);
|
||||
34
lib/relay/components/App.js
Normal file
34
lib/relay/components/App.js
Normal file
@@ -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 (
|
||||
<div>
|
||||
<h1>Hi, {viewer.username}</h1>
|
||||
<p>You are living in the {house.name} house!!!!</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Relay.createContainer(App, {
|
||||
fragments: {
|
||||
viewer: () => Relay.QL`
|
||||
fragment on ${DB.User.name} {
|
||||
username
|
||||
house {
|
||||
edge {
|
||||
node {
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
},
|
||||
});
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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]
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
import React from 'react';
|
||||
import Relay from 'react-relay';
|
||||
|
||||
class App extends React.Component {
|
||||
render() {
|
||||
return (
|
||||
<div>
|
||||
<h1>Widget list</h1>
|
||||
<ul>
|
||||
{this.props.viewer.widgets.edges.map(edge =>
|
||||
<li key={edge.node.id}>{edge.node.name} (ID: {edge.node.id})</li>
|
||||
)}
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Relay.createContainer(App, {
|
||||
fragments: {
|
||||
viewer: () => Relay.QL`
|
||||
fragment on User {
|
||||
widgets(first: 10) {
|
||||
edges {
|
||||
node {
|
||||
id,
|
||||
name,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
`,
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user