house, power, energy data generators, savers

This commit is contained in:
Eric Hulburd
2016-02-07 15:32:02 -06:00
parent d1e230c6fd
commit 3cb2320300
47 changed files with 246 additions and 89685 deletions

38
server/config/database.js Normal file
View File

@@ -0,0 +1,38 @@
"use strict";
import fs from "fs";
import Sequelize from 'sequelize';
var sequelize = new Sequelize("postgres://spikeuser:123456@localhost:5432/spike2", {
pool: {
max: 5,
min: 0,
idle: 10000
}
});
const model_dir = __dirname + '/../models'
class Database {
static sync(){
console.log("syncing db")
fs.readdirSync(model_dir).forEach(function(file) {
var model = require(model_dir + '/' + file);
Database[model.name] = model;
Database.models.push(model);
});
// add associations
for (var model of Database.models){
console.log(`setting ${model.name}`);
model.set();
}
return sequelize.sync().then(()=>{ console.log("done syncing db") });
}
}
Database.sequelize = sequelize;
Database.Sequelize = Sequelize;
Database.models = [];
export default Database;

View File

@@ -0,0 +1,19 @@
import {
fromGlobalId,
nodeDefinitions,
} from 'graphql-relay';
import DB from './../database'
var {nodeInterface, nodeField} = nodeDefinitions(
(globalId) => {
var {graphql_type_name, id} = fromGlobalId(globalId),
model = DB[graphql_type_name];
return model.findOne({where: {id: id}});
},
(instance) => {
return instance.Model().graphql_type;
}
);
export {nodeInterface, nodeField};

View File

@@ -0,0 +1,27 @@
type House implements Node {
id: ID!
name: String!
power_data(after: String, first: Int, before: String, last: Int): [PowerDatum]
habitants(after: String, first: Int, before: String, last: Int): [User]
}
interface Node {
id: ID!
}
type PowerDatum implements Node {
id: ID!
power: Float
time: Int
}
type Query {
node(id: ID!): Node
viewer: User
}
type User implements Node {
id: ID!
username: String!
house: House
}

View File

@@ -0,0 +1,27 @@
import {
GraphQLObjectType,
GraphQLSchema
} from 'graphql';
import {nodeField} from './node';
import DB from './../database';
export default function(){
var queryType = new GraphQLObjectType({
name: 'Query',
fields: () => ({
node: nodeField,
viewer: {
type: DB.User.graphql_type,
resolve: (_, args) => {
return DB.User.findOne({where: {username: 'bethany'}});
}
},
}),
});
return new GraphQLSchema({
query: queryType
});
}

File diff suppressed because it is too large Load Diff