clean up database model setting

This commit is contained in:
Eric Hulburd
2016-01-31 17:49:02 -06:00
parent c0efde030d
commit 51a0e40f55
7 changed files with 114 additions and 76 deletions

15
lib/relay/app.relay.js Normal file
View 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')
);

View 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
}
}
}
}
`,
},
});

View File

@@ -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',

View File

@@ -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',

View File

@@ -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]
});
}

View File

@@ -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,
},
},
},
}
`,
},
});