house, power, energy data generators, savers
This commit is contained in:
38
server/config/database.js
Normal file
38
server/config/database.js
Normal 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;
|
||||
19
server/config/graphql/node.js
Normal file
19
server/config/graphql/node.js
Normal 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};
|
||||
27
server/config/graphql/schema.graphql
Normal file
27
server/config/graphql/schema.graphql
Normal 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
|
||||
}
|
||||
27
server/config/graphql/schema.js
Normal file
27
server/config/graphql/schema.js
Normal 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
|
||||
});
|
||||
}
|
||||
1176
server/config/graphql/schema.json
Normal file
1176
server/config/graphql/schema.json
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user