Skip to content

Commit

Permalink
Baseline 10
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelhoefer committed Apr 23, 2018
1 parent 165ba4d commit 9ac4498
Show file tree
Hide file tree
Showing 6 changed files with 177 additions and 57 deletions.
2 changes: 1 addition & 1 deletion api/orggroups.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ async function requestDelete(req, res, next) {

function requestUpgrade(req, res, next) {
push.upgradeOrgGroups([req.params.id], req.body.versions, req.body.scheduled_date)
.then((jobs) => {return res.json(jobs)})
.then((upgrade) => {return res.json(upgrade)})
.catch((e) => {console.error(e); next(e)})
}

Expand Down
2 changes: 1 addition & 1 deletion api/orgs.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ function requestById(req, res, next) {

function requestUpgrade(req, res, next) {
push.upgradeOrgs([req.params.id], req.body.versions, req.body.scheduled_date)
.then((jobs) => {return res.json(jobs)})
.then((upgrade) => {return res.json(upgrade)})
.catch((e) => {console.error(e); next(e)});
}

Expand Down
161 changes: 139 additions & 22 deletions api/upgrades.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,50 @@
const db = require('../util/pghelper');
const push = require('../worker/packagepush');
const sfdc = require('../api/sfdcconn');

const SELECT_ALL = `SELECT id, start_time FROM upgrade`;

const SELECT_ALL_ITEMS = `SELECT id, upgrade_id, push_request_id, package_org_id, package_version_id, start_time
FROM upgrade_item`;
const SELECT_ALL = `select u.id, u.start_time, count(i.*) item_count
from upgrade u
inner join upgrade_item i on i.upgrade_id = u.id
group by u.id, u.start_time`;

const SELECT_ONE = `select u.id, u.start_time, count(i.*) item_count
from upgrade u
inner join upgrade_item i on i.upgrade_id = u.id
where u.id = $1
group by u.id, u.start_time`;

const SELECT_ALL_ITEMS = `SELECT i.id, i.upgrade_id, i.push_request_id, i.package_org_id, i.start_time,
pv.version_number, pv.version_id,
p.name package_name,
count(j.*) job_count
FROM upgrade_item i
inner join package_version pv on pv.version_id = i.package_version_id
inner join package p on p.sfid = pv.package_id
inner join upgrade_job j on j.item_id = i.id
where i.upgrade_id = $1
group by i.id, i.upgrade_id, i.push_request_id, i.package_org_id, i.start_time,
pv.version_number, pv.version_id,
p.name`;


const SELECT_ONE_ITEM = `SELECT i.id, i.upgrade_id, i.push_request_id, i.package_org_id, i.start_time,
pv.version_number, pv.version_id,
p.name package_name
FROM upgrade_item i
INNER JOIN package_version pv on pv.version_id = i.package_version_id
INNER JOIN package p on p.sfid = pv.package_id`;

const SELECT_ALL_JOBS = `SELECT j.id, j.upgrade_id, j.push_request_id, j.job_id, j.org_id, j.status,
i.start_time,
pv.version_number, pv.version_id,
p.name package_name,
o.account_name
FROM upgrade_job j
INNER JOIN upgrade_item i on i.push_request_id = j.push_request_id
INNER JOIN package_version pv on pv.version_id = i.package_version_id
INNER JOIN package p on p.sfid = pv.package_id
INNER JOIN org o on o.org_id = j.org_id`;

async function createUpgrade(scheduledDate) {
let isoTime = scheduledDate ? scheduledDate.toISOString ? scheduledDate.toISOString() : scheduledDate : null;
Expand All @@ -12,71 +53,147 @@ async function createUpgrade(scheduledDate) {
}


async function createUpgradeItem(upgradeId, requestId, packageOrgId, versionId, scheduledDate) {
async function createUpgradeItem(upgradeId, requestId, packageOrgId, versionId, scheduledDate, status) {
let isoTime = scheduledDate ? scheduledDate.toISOString ? scheduledDate.toISOString() : scheduledDate : null;
let recs = await db.insert('INSERT INTO upgrade_item' +
' (upgrade_id, push_request_id, package_org_id, package_version_id, start_time)' +
' (upgrade_id, push_request_id, package_org_id, package_version_id, start_time, status)' +
' VALUES ($1,$2,$3,$4,$5)',
[upgradeId, requestId, packageOrgId, versionId, isoTime]);
[upgradeId, requestId, packageOrgId, versionId, isoTime, status]);
return recs[0];
}

async function createUpgradeJob(upgradeId, requestId, jobId, orgIds, status) {
let sql = `INSERT INTO upgrade_job (upgrade_id, push_request_id, job_id, org_id, status) VALUES`;
async function createUpgradeJob(upgradeId, itemId, requestId, jobId, orgIds, status) {
let sql = `INSERT INTO upgrade_job (upgrade_id, item_id, push_request_id, job_id, org_id, status) VALUES`;
let values = [];
for (let i = 0, n = 1; i < orgIds.length; i++) {
let orgId = orgIds[i];
if (i > 0) {
sql += ','
}
sql += `($${n++},$${n++},$${n++},$${n++},$${n++})`;
values.push(upgradeId, requestId, jobId, orgId, status);
values.push(upgradeId, itemId, requestId, jobId, orgId, status);
}

await db.insert(sql, values);
}

async function requestAll(req, res, next) {
try {
let upgrades = await findAll();
let upgrades = await findAll(req.query.sort_field, req.query.sort_dir);
return res.send(JSON.stringify(upgrades));
} catch (err) {
next(err);
}
}

async function findAll() {
let sort = " ORDER BY start_time asc";
return await db.query(SELECT_ALL + sort, [])
async function findAll(sortField, sortDir) {
let orderBy = ` ORDER BY ${sortField || "start_time"} ${sortDir || "asc"}`;
return await db.query(SELECT_ALL + orderBy, [])
}

async function requestAllItems(req, res, next) {
try {
let upgradeItems = await findAllItems(req.query.upgradeId, req.query.sort);
let upgradeItems = await findAllItems(req.query.upgradeId, req.query.sort_field, req.query.sort_dir);
return res.send(JSON.stringify(upgradeItems));
} catch (err) {
next(err);
}
}

async function findAllItems(upgradeId, sort) {
let orderBy = " ORDER BY " + (sort || "push_request_id");
return await db.query(SELECT_ALL_ITEMS + orderBy, [])
async function findAllItems(upgradeId, sortField, sortDir) {
let orderBy = ` ORDER BY ${sortField || "push_request_id"} ${sortDir || "asc"}`;
return await db.query(SELECT_ALL_ITEMS + orderBy, [upgradeId])
}

async function requestAllJobs(req, res, next) {
try {
let jobs = await findAllJobs(req.query.itemId, req.query.sort_field, req.query.sort_dir);
return res.send(JSON.stringify(jobs));
} catch (err) {
next(err);
}
}

async function findAllJobs(itemId, sortField, sortDir) {
let where = " WHERE j.item_id = $1";
let orderBy = ` ORDER BY ${sortField || "item_id"} ${sortDir || "asc"}`;
return await db.query(SELECT_ALL_JOBS + where + orderBy, [itemId])
}

function requestById(req, res, next) {
let id = req.params.id;
let where = " WHERE id = $1";
db.query(SELECT_ALL + where, [id])
.then(function (org) {
return res.json(org[0]);
db.query(SELECT_ONE, [id])
.then(function (recs) {
return res.json(recs[0]);
})
.catch(next);
}

function requestItemById(req, res, next) {
let id = req.params.id;
retrieveItemById(id).then(rec => res.json(rec))
.catch(next);
}

async function retrieveItemById(id) {
let where = " WHERE i.id = $1";
let recs = await db.query(SELECT_ONE_ITEM + where, [id])
return recs[0];
}

function requestJobById(req, res, next) {
let id = req.params.id;
let where = " WHERE j.id = $1";
db.query(SELECT_ALL_JOBS + where, [id])
.then(function (recs) {
return res.json(recs[0]);
})
.catch(next);
}

async function requestJobStatusByItemId(req, res, next) {
let id = req.params.id;
try {
let item = await retrieveItemById(id);
let pushJobs = await push.findJobsByRequestIds(item.package_org_id, [item.push_request_id]);
let statusMap = {};
for (let i = 0; i < pushJobs.length; i++) {
let job = pushJobs[i];
statusMap[job.id] = job.Status;
}
return res.send(JSON.stringify(statusMap));
} catch (err) {
next(err);
}
}

async function requestActivateUpgradeItem(req, res, next) {
return requestStatusUpdate(req, res, next, "Pending");
}

async function requestCancelUpgradeItem(req, res, next) {
return requestStatusUpdate(req, res, next, "Canceled");
}

async function requestStatusUpdate(req, res, next, status) {
let id = req.params.id;
try {
let item = await retrieveItemById(id);
return await push.updatePushRequest(item.package_org_id, item.push_request_id, status);
} catch (err) {
next(err);
}
}

exports.requestById = requestById;
exports.requestItemById = requestItemById;
exports.requestJobById = requestJobById;
exports.requestAll = requestAll;
exports.requestAllItems = requestAllItems;
exports.requestAllJobs = requestAllJobs;
exports.requestJobStatusByItemId = requestJobStatusByItemId;
exports.createUpgrade = createUpgrade;
exports.createUpgradeItem = createUpgradeItem;
exports.createUpgradeJob = createUpgradeJob;
exports.createUpgradeJob = createUpgradeJob;
exports.requestActivateUpgradeItem = requestActivateUpgradeItem;
exports.requestCancelUpgradeItem = requestCancelUpgradeItem;
3 changes: 3 additions & 0 deletions init.sql
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ drop table if exists package_version_latest;
drop table if exists license;
drop table if exists upgrade;
drop table if exists upgrade_item;
drop table if exists upgrade_job;

create table if not exists package_org
(
Expand Down Expand Up @@ -72,12 +73,14 @@ create table if not exists upgrade_item (
push_request_id varchar(18),
package_org_id varchar(18),
package_version_id varchar(18),
status varchar(40),
start_time TIMESTAMP WITH TIME ZONE
);

create table if not exists upgrade_job (
id serial primary key,
upgrade_id INTEGER,
item_id INTEGER,
push_request_id varchar(18),
job_id varchar(18),
org_id varchar(18),
Expand Down
13 changes: 13 additions & 0 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ const express = require('express'),
packages = require('./api/packages'),
packageorgs = require('./api/packageorgs'),
packageversions = require('./api/packageversions'),
upgrades = require('./api/upgrades'),
licenses = require('./api/licenses'),
auth = require('./api/auth'),
app = express();
Expand Down Expand Up @@ -60,6 +61,18 @@ app.get('/api/packageorgs/:id', packageorgs.requestById);
app.post('/api/packageorgs/:id', packageorgs.requestRefresh);
app.delete('/api/packageorgs/:id', packageorgs.requestDeleteById);

app.get('/api/upgrades', upgrades.requestAll);
app.get('/api/upgrades/:id', upgrades.requestById);

app.get('/api/upgradeitems', upgrades.requestAllItems);
app.get('/api/upgradeitems/:id', upgrades.requestItemById);
app.post('/api/upgradeitems/:id/activate', upgrades.requestActivateUpgradeItem);
app.post('/api/upgradeitems/:id/cancel', upgrades.requestCancelUpgradeItem);

app.get('/api/upgradejobs', upgrades.requestAllJobs);
app.get('/api/upgradejobs/:id', upgrades.requestJobById);
app.get('/api/upgradejobs/:id/status', upgrades.requestJobStatusByItemId);

// The "catchall" handler: for any request that doesn't
// match one above, send back React's index.html file.
app.get('*', (req, res) => {
Expand Down
Loading

0 comments on commit 9ac4498

Please sign in to comment.