1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81import { db, event, graphqlQuery } from '#src/utils';
export const getAuditResults = async () => {
const auditId = event.queryStringParameters.id;
await db.connect();
const audit = (await db.query({
text: `SELECT * FROM "audits" WHERE "id" = $1`,
values: [auditId],
})).rows?.[0];
const urls = (await db.query({
text: `SELECT "id", "url", "type" FROM "urls" WHERE "audit_id" = $1`,
values: [auditId],
})).rows;
await db.clean();
const query = {
query: `query ($audit_id: uuid!) {
audits_by_pk(id: $audit_id) {
scans(order_by: {created_at: desc}, limit: 1) {
blockers {
id
created_at
content
url_id
blocker_messages {
id
blocker {
equalified
}
message {
id
content
category
message_tags {
tag {
id
content
}
}
}
}
}
}
}
}`,
variables: { audit_id: auditId },
};
console.log(JSON.stringify({ query }));
const response = await graphqlQuery(query);
console.log(JSON.stringify({ response }));
// Get URL lookup map for easier reference
const urlMap = urls.reduce((acc, url) => {
acc[url.id] = { url: url.url, type: url.type};
return acc;
}, {});
const jsonRows = response.audits_by_pk.scans[0]?.blockers?.map(blocker => {
return {
blocker_id: blocker.id,
url_id: urlMap[blocker.url_id].url,
html: blocker.content,
equalified: blocker.equalified,
created_at: blocker.created_at,
type: urlMap[blocker.url_id].type,
messages: blocker.blocker_messages.map(obj =>
`${obj.message.category}: ${obj.message.content}`
)
}
}) ?? [];
return {
statusCode: 200,
headers: { 'content-type': 'application/json' },
body: {
...audit,
blockers: jsonRows,
},
};
}