Skip to content

Commit 0e775d1

Browse files
authored
Merge pull request #10 from demokratie-live/sprint#5/Webhook-vorbereiten
Webhook
2 parents 7eeebf7 + c9efbdf commit 0e775d1

File tree

4 files changed

+69
-38
lines changed

4 files changed

+69
-38
lines changed

scripts/import.js

Lines changed: 0 additions & 38 deletions
This file was deleted.

src/graphql/queries/getProcedures.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,21 @@ export default gql`
1010
currentStatus
1111
abstract
1212
tags
13+
subjectGroups
1314
history {
1415
assignment
16+
initiator
1517
decision {
1618
tenor
1719
}
1820
date
1921
}
22+
importantDocuments {
23+
editor
24+
type
25+
url
26+
number
27+
}
2028
}
2129
}
2230
`;

src/index.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import constants from './config/constants';
1212
import typeDefs from './graphql/schemas';
1313
import resolvers from './graphql/resolvers';
1414

15+
import importProcedures from './scripts/import';
16+
1517
// Models
1618
import ProcedureModel from './models/Procedure';
1719

@@ -52,6 +54,21 @@ app.use(constants.GRAPHQL_PATH, (req, res, next) => {
5254
})(req, res, next);
5355
});
5456

57+
app.post('/webhooks/bundestagio/update', async (req, res) => {
58+
const { procedureIds } = req.body;
59+
try {
60+
res.send({
61+
updated: await importProcedures(procedureIds),
62+
succeeded: true,
63+
});
64+
} catch (error) {
65+
res.send({
66+
error,
67+
succeeded: false,
68+
});
69+
}
70+
});
71+
5572
const graphqlServer = createServer(app);
5673

5774
graphqlServer.listen(constants.PORT, (err) => {

src/scripts/import.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import ProgressBar from 'cli-progress'; // eslint-disable-line
2+
import program from 'commander'; // eslint-disable-line
3+
4+
import client from '../graphql/client';
5+
import Procedure from '../models/Procedure';
6+
import getProcedures from '../graphql/queries/getProcedures';
7+
8+
const PAGE_SIZE = 20;
9+
10+
export default async (procedureIds) => {
11+
// Start Importing
12+
const { data: { procedures } } = await client.query({
13+
query: getProcedures,
14+
variables: { pageSize: PAGE_SIZE, IDs: procedureIds },
15+
});
16+
// Start Inserting
17+
const promises = await procedures.map(async (bIoProcedure) => {
18+
const newBIoProcedure = { ...bIoProcedure };
19+
if (bIoProcedure && bIoProcedure.history) {
20+
const [lastHistory] = newBIoProcedure.history.slice(-1);
21+
const btWithDecisions = bIoProcedure.history.filter(({ assignment, initiator }) => assignment === 'BT' && initiator === '2. Beratung');
22+
if (btWithDecisions.length > 0) {
23+
newBIoProcedure.voteDate = new Date(btWithDecisions.pop().date);
24+
} else if (newBIoProcedure.currentStatus === 'Zurückgezogen') {
25+
newBIoProcedure.voteDate = lastHistory.date;
26+
}
27+
28+
newBIoProcedure.lastUpdateDate = lastHistory.date;
29+
30+
newBIoProcedure.submissionDate = newBIoProcedure.history[0].date;
31+
}
32+
return Procedure.findOneAndUpdate(
33+
{ procedureId: newBIoProcedure.procedureId },
34+
newBIoProcedure,
35+
{
36+
upsert: true,
37+
},
38+
);
39+
});
40+
const result = await Promise.all(promises);
41+
42+
return result.length;
43+
// Imported everything!
44+
};

0 commit comments

Comments
 (0)