📦 EqualifyEverything / equalify

📄 getAuditResults.ts · 81 lines
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,
        },
    };
}