Skip to content

Commit baca49b

Browse files
committed
fixed suggested changes
1 parent 1064c4d commit baca49b

File tree

7 files changed

+68
-67
lines changed

7 files changed

+68
-67
lines changed

scripts/importAll.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ import getAllProcedures from '../src/graphql/queries/getAllProcedures';
77

88
require('../src/config/db');
99

10-
const PAGE_SIZE = 20;
11-
1210
(async () => {
1311
console.log('Start Importing');
1412
const { data: { allProcedures } } = await client.query({
1513
query: getAllProcedures,
16-
variables: { pageSize: PAGE_SIZE },
14+
// variables: {},
1715
});
1816
console.log(allProcedures.map(({ procedureId }) => procedureId));
1917
console.log('Start Inserting');

src/graphql/queries/getAllProcedures.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import gql from 'graphql-tag';
22

33
export default gql`
4-
query allProcedures($pageSize: Int) {
5-
allProcedures(pageSize: $pageSize) {
4+
query allProcedures() {
5+
allProcedures() {
66
title
77
procedureId
88
type

src/graphql/queries/getProcedureUpdates.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import gql from 'graphql-tag';
22

33
export default gql`
4-
query procedureUpdates($pageSize: Int, $period: [Int!], $type: [String!]) {
5-
procedureUpdates(pageSize: $pageSize, period: $period, type: $type) {
4+
query procedureUpdates($period: [Int!], $type: [String!]) {
5+
procedureUpdates(period: $period, type: $type) {
66
procedureId
77
updatedAt
88
}

src/graphql/queries/getProcedures.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import gql from 'graphql-tag';
22

33
export default gql`
4-
query procedures($pageSize: Int, $IDs: [String!]) {
5-
procedures(pageSize: $pageSize, IDs: $IDs) {
4+
query procedures($IDs: [String!]) {
5+
procedures(IDs: $IDs) {
66
title
77
procedureId
88
type

src/index.js

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

15-
import importProcedures from './scripts/import';
15+
import webhook from './scripts/webhook';
1616

1717
// Models
18-
import Procedure from './models/Procedure';
19-
import getProcedureUpdates from './graphql/queries/getProcedureUpdates';
20-
import client from './graphql/client';
18+
import ProcedureModel from './models/Procedure';
2119

2220
const app = express();
2321

@@ -51,7 +49,7 @@ app.use(constants.GRAPHQL_PATH, (req, res, next) => {
5149
schema,
5250
context: {
5351
// Models
54-
Procedure,
52+
ProcedureModel,
5553
},
5654
tracing: true,
5755
cacheControl: true,
@@ -61,56 +59,7 @@ app.use(constants.GRAPHQL_PATH, (req, res, next) => {
6159
app.post('/webhooks/bundestagio/update', async (req, res) => {
6260
const { data } = req.body;
6361
try {
64-
// Count local Data in groups
65-
const groups = await Procedure.aggregate([{
66-
// Group by Period & Type
67-
$group: {
68-
_id: { period: '$period', type: '$type' },
69-
count: { $sum: 1 },
70-
},
71-
},
72-
{
73-
// Group by Period
74-
$group: {
75-
_id: '$_id.period',
76-
types: { $push: { type: '$_id.type', count: '$count' } },
77-
},
78-
},
79-
{
80-
// Rename _id Field to period
81-
$project: { _id: 0, period: '$_id', types: 1 },
82-
}]);
83-
84-
const update = [];
85-
await Promise.all(data.map(async (d) => {
86-
const period = parseInt(d.period, 10);
87-
const { type, countBefore, changedIds } = d.types.find(t => t.type === 'Gesetzgebung');
88-
const localCount = groups.find(c => c.period === period).types
89-
.find(ct => ct.type === type).count;
90-
// Append Changed IDs
91-
update.concat(changedIds);
92-
// Compare Counts Remote & Local
93-
if (countBefore > localCount) {
94-
// Find remote Procedure Updates
95-
const { data: { procedureUpdates } } = await client.query({
96-
query: getProcedureUpdates,
97-
variables: { pageSize: 20, period, type },
98-
});
99-
// Find local Procedure Updates
100-
const localProcedureUpdates = await Procedure
101-
.find({ period, type }, { procedureId: 1, lastUpdateDate: 1 });
102-
// Compare
103-
procedureUpdates.map((pu) => {
104-
const localData = localProcedureUpdates.find(ld => ld.procedureId === pu.procedureId);
105-
if (!localData || new Date(localData.lastUpdateDate) < new Date(pu.updatedAt)) {
106-
update.push(pu.procedureId);
107-
}
108-
return null;
109-
});
110-
}
111-
}));
112-
// Update
113-
const updated = await importProcedures(update);
62+
const updated = await webhook(data);
11463
res.send({
11564
updated,
11665
succeeded: true,

src/scripts/import.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,11 @@ import client from '../graphql/client';
55
import Procedure from '../models/Procedure';
66
import getProcedures from '../graphql/queries/getProcedures';
77

8-
const PAGE_SIZE = 20;
9-
108
export default async (procedureIds) => {
119
// Start Importing
1210
const { data: { procedures } } = await client.query({
1311
query: getProcedures,
14-
variables: { pageSize: PAGE_SIZE, IDs: procedureIds },
12+
variables: { IDs: procedureIds },
1513
});
1614
// Start Inserting
1715
const promises = await procedures.map(async (bIoProcedure) => {

src/scripts/webhook.js

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import importProcedures from './import';
2+
import getProcedureUpdates from '../graphql/queries/getProcedureUpdates';
3+
import client from '../graphql/client';
4+
import ProcedureModel from '../models/Procedure';
5+
6+
export default async (data) => {
7+
// Count local Data in groups
8+
const groups = await ProcedureModel.aggregate([{
9+
// Group by Period & Type
10+
$group: {
11+
_id: { period: '$period', type: '$type' },
12+
count: { $sum: 1 },
13+
},
14+
},
15+
{
16+
// Group by Period
17+
$group: {
18+
_id: '$_id.period',
19+
types: { $push: { type: '$_id.type', count: '$count' } },
20+
},
21+
},
22+
{
23+
// Rename _id Field to period
24+
$project: { _id: 0, period: '$_id', types: 1 },
25+
}]);
26+
27+
const update = [];
28+
await Promise.all(data.map(async (d) => {
29+
const period = parseInt(d.period, 10);
30+
const { type, countBefore, changedIds } = d.types.find(t => t.type === 'Gesetzgebung');
31+
const localCount = groups.find(c => c.period === period).types
32+
.find(ct => ct.type === type).count;
33+
// Append Changed IDs
34+
update.concat(changedIds);
35+
// Compare Counts Remote & Local
36+
if (countBefore > localCount) {
37+
// Find remote Procedure Updates
38+
const { data: { procedureUpdates } } = await client.query({
39+
query: getProcedureUpdates,
40+
variables: { period, type },
41+
});
42+
// Find local Procedure Updates
43+
const localProcedureUpdates = await ProcedureModel
44+
.find({ period, type }, { procedureId: 1, lastUpdateDate: 1 });
45+
// Compare
46+
procedureUpdates.forEach((pu) => {
47+
const localData = localProcedureUpdates.find(ld => ld.procedureId === pu.procedureId);
48+
if (!localData || new Date(localData.lastUpdateDate) < new Date(pu.updatedAt)) {
49+
update.push(pu.procedureId);
50+
}
51+
});
52+
}
53+
}));
54+
// Update
55+
return importProcedures(update);
56+
};

0 commit comments

Comments
 (0)