Skip to content

Commit

Permalink
Server: components API
Browse files Browse the repository at this point in the history
  • Loading branch information
rwaldron committed Aug 6, 2020
1 parent 756e1d6 commit df82a56
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 0 deletions.
2 changes: 2 additions & 0 deletions server/index.js
Expand Up @@ -6,6 +6,7 @@ const { Pool } = require('pg');
const pgSession = require('connect-pg-simple')(session);

const authRouter = require('./service/auth');
const componentsRouter = require('./service/components');
const cohortRouter = require('./service/cohort');
const historyRouter = require('./service/history');
const rolesRouter = require('./service/roles');
Expand Down Expand Up @@ -43,6 +44,7 @@ app.use(
app.use(logRequestAndResponse);

app.use('/auth', authRouter);
app.use('/components', componentsRouter);
app.use('/cohort', cohortRouter);
app.use('/history', historyRouter);
app.use('/media', mediaRouter);
Expand Down
58 changes: 58 additions & 0 deletions server/service/components/db.js
@@ -0,0 +1,58 @@
const { sql } = require('../../util/sqlHelpers');
const { query } = require('../../util/db');

const omitThese = ['ResponseRecall'];

exports.getComponentsByUserId = async user_id => {
const results = await query(sql`
SELECT scenario_id, components
FROM slide
WHERE scenario_id IN (
SELECT scenario.id AS scenario_id
FROM scenario
JOIN scenario_user_role ON scenario_user_role.scenario_id = scenario.id
WHERE deleted_at IS NULL
AND scenario_user_role.user_id = ${user_id}
AND scenario_user_role.role IN ('owner', 'author')
)
AND is_finish IS FALSE
AND jsonb_array_length( components::jsonb ) != 0
ORDER BY "order"
`);

return results.rows.reduce((accum, {scenario_id, components}) => {
return accum.concat(
components.reduce((accum, component) => {
if (omitThese.includes(component.type)) {
return accum;
}
component.scenario_id = scenario_id;
return accum.concat([component]);
}, [])
);
}, []);
};

exports.getComponentsByScenarioId = async scenario_id => {
const results = await query(sql`
SELECT scenario_id, components
FROM slide
WHERE scenario_id = ${scenario_id}
AND is_finish IS FALSE
AND jsonb_array_length( components::jsonb ) != 0
ORDER BY "order"
`);

return results.rows.reduce((accum, {scenario_id, components}) => {
return accum.concat(
components.reduce((accum, component) => {
if (omitThese.includes(component.type)) {
return accum;
}
component.scenario_id = scenario_id;
return accum.concat([component]);
}, [])
);
}, []);
};

21 changes: 21 additions & 0 deletions server/service/components/endpoints.js
@@ -0,0 +1,21 @@
const { asyncMiddleware } = require('../../util/api');
const db = require('./db');

async function getComponentsAsync(req, res) {
const components = await db.getComponentsByUserId(req.session.user.id);
res.json({ components, status: 200 });
}

async function getComponentsByUserIdAsync(req, res) {
const components = await db.getComponentsByUserId(req.params.user_id);
res.json({ components, status: 200 });
}

async function getComponentsByScenarioIdAsync(req, res) {
const components = await db.getComponentsByScenarioId(req.params.scenario_id);
res.json({ components, status: 200 });
}

exports.getComponents = asyncMiddleware(getComponentsAsync);
exports.getComponentsByUserId = asyncMiddleware(getComponentsByUserIdAsync);
exports.getComponentsByScenarioId = asyncMiddleware(getComponentsByScenarioIdAsync);
13 changes: 13 additions & 0 deletions server/service/components/index.js
@@ -0,0 +1,13 @@
const { Router } = require('express');
const components = new Router();
const {
getComponents,
getComponentsByUserId,
getComponentsByScenarioId,
} = require('./endpoints');

components.get('/', getComponents);
components.get('/user/:user_id', getComponentsByUserId);
components.get('/scenario/:scenario_id', getComponentsByScenarioId);

module.exports = components;
19 changes: 19 additions & 0 deletions server/service/scenarios/slides/db.js
Expand Up @@ -11,6 +11,25 @@ exports.getScenarioSlides = async scenarioId => {
return results.rows;
};

// exports.getCollaboratorSlides = async user_id => {
// const results = await query(sql`
// SELECT id, title, components, is_finish
// FROM slide
// WHERE scenario_id IN (
// SELECT scenario.id AS scenario_id
// FROM scenario
// JOIN scenario_user_role ON scenario_user_role.scenario_id = scenario.id
// WHERE deleted_at IS NULL
// AND scenario_user_role.user_id = ${user_id}
// AND scenario_user_role.role IN ('owner', 'author')
// )
// AND is_finish IS FALSE
// ORDER BY "order";
// `);
// return results.rows;
// };


exports.addSlide = async ({
scenario_id,
title,
Expand Down

0 comments on commit df82a56

Please sign in to comment.