joyent-portal/portal-api/lib/models/graphql.js
2017-04-27 22:59:25 +01:00

156 lines
3.1 KiB
JavaScript

'use strict';
const Graphql = require('graphql');
const internals = {
schema: `
scalar Object
scalar Date
type Activity {
date: Date!
type: String!
meta: Object
}
type Datacenter {
name: String!
url: String!
}
input DeploymentCreate {
name: String!
datacenter: String!
}
input DeploymentUpdate {
id: ID!
name: String!
datacenter: String!
}
type Deployment {
id: ID!
name: String!
datacenter: String!
}
type Manifest {
revision: Int!
file: Object!
}
input ManifestCreate {
file: Object!
}
type Metric {
service: String!
cpu: Float!
memory: Float!
network: Float!
}
type Service {
name: String!
count: Int!
}
input ServiceUpdate {
name: String!
count: Int!
}
type Mutation {
createDeployment(deployment: DeploymentCreate!): Deployment!
deleteDeployment(deploymentId: ID!): String
updateDeployment(deployment: DeploymentUpdate!): Deployment!
createManifest(deploymentId: ID!, manifest: ManifestCreate!): Manifest!
updateService(deploymentId: ID!, service: ServiceUpdate!): Service!
}
type Query {
getActivities: [Activity]
getDatacenters: [Datacenter]
getDeployment(id: ID!): Deployment
getDeployments: [Deployment]
getManifest(deploymentId: ID!, revision: Int!): Manifest
getMetrics(deploymentId: ID!): [Metric]
getServices(deploymentId: ID!): [Service]
}
`
};
exports.options = (data) => {
const schema = Graphql.buildSchema(internals.schema);
const createDeployment = function (args) {
return data.createDeployment(args.deployment);
};
const deleteDeployment = function (args) {
return data.deleteDeployment(args.deploymentId);
};
const updateDeployment = function (args) {
return data.updateDeployment(args.deployment);
};
const createManifest = function (args) {
return data.createManifest(args.deploymentId, args.manifest);
};
const updateService = function (args) {
return data.updateService(args.deploymentId, args.service);
};
const getActivities = function () {
return data.getActivities();
};
const getDatacenters = function () {
return data.getDatacenters();
};
const getDeployment = function (args) {
return data.getDeployment(args.id);
};
const getDeployments = function () {
return data.getDeployments();
};
const getManifest = function (args) {
return data.getManifest(args.deploymentId, args.revision);
};
const getMetrics = function (args) {
return data.getMetrics(args.deploymentId);
};
const getServices = function (args) {
return data.v(args.deploymentId);
};
return {
schema,
endpointURL: '/graphql',
rootValue: {
createDeployment,
deleteDeployment,
updateDeployment,
createManifest,
updateService,
getActivities,
getDatacenters,
getDeployment,
getDeployments,
getManifest,
getMetrics,
getServices
}
};
};