File size: 1,327 Bytes
3b6afc0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
const mergeSort = require('./mergeSort');
const { cleanUpPrimaryKeyValue } = require('./misc');

function reduceMessages(hits) {
  const counts = {};

  for (const hit of hits) {
    if (!counts[hit.conversationId]) {
      counts[hit.conversationId] = 1;
    } else {
      counts[hit.conversationId]++;
    }
  }

  const result = [];

  for (const [conversationId, count] of Object.entries(counts)) {
    result.push({
      conversationId,
      count,
    });
  }

  return mergeSort(result, (a, b) => b.count - a.count);
}

function reduceHits(hits, titles = []) {
  const counts = {};
  const titleMap = {};
  const convos = [...hits, ...titles];

  for (const convo of convos) {
    const currentId = cleanUpPrimaryKeyValue(convo.conversationId);
    if (!counts[currentId]) {
      counts[currentId] = 1;
    } else {
      counts[currentId]++;
    }

    if (convo.title) {
      // titleMap[currentId] = convo._formatted.title;
      titleMap[currentId] = convo.title;
    }
  }

  const result = [];

  for (const [conversationId, count] of Object.entries(counts)) {
    result.push({
      conversationId,
      count,
      title: titleMap[conversationId] ? titleMap[conversationId] : null,
    });
  }

  return mergeSort(result, (a, b) => b.count - a.count);
}

module.exports = { reduceMessages, reduceHits };