async function submitSearch()

in main/src/search/search.ts [116:184]


async function submitSearch(search: any) {
  const searchId = su.generate()

  var metric = DEFAULT_METRIC;

  if (search[METRIC]) {
    if (search[METRIC]==EUCLIDEAN_METRIC) {
      metric = EUCLIDEAN_METRIC;
    } else if (search[METRIC]==COSINE_METRIC) {
      metric = COSINE_METRIC;
    }
  }

  var maxHits = DEFAULT_MAX_HITS
  if (search[MAX_HITS]) {
    maxHits = search[MAX_HITS]    
  }
  
  const submitTimestamp = getTimestamp
  
  var requireMoa = "false";
  if (search[REQUIRE_MOA]) {
    if (search[REQUIRE_MOA].toLowerCase()=="true") {
      requireMoa = "true";
    }
  }
  
  const searchEntry = {
    [PARTITION_KEY_SRTID]: searchId,
    [SORT_KEY_IMGID]: ORIGIN,
    [TRAIN_ID]: search.trainId,
    [QUERY_IMAGE_ID]: search[QUERY_IMAGE_ID],
    [METRIC]: metric,
    [MAX_HITS]: maxHits,
    [REQUIRE_MOA]: requireMoa,
    [SUBMIT_TIMESTAMP]: submitTimestamp,
     ...(INCLUSION_TAG_LIST in search && {
        [INCLUSION_TAG_LIST]: search[INCLUSION_TAG_LIST],
      }),
     ...(EXCLUSION_TAG_LIST in search && {
        [EXCLUSION_TAG_LIST]: search[EXCLUSION_TAG_LIST],
      }),
  }
  
  const messageBody = generateSearchMessageBody(searchEntry);
  
  const dynamoParams = {
    TableName: TABLE_NAME,
    Item: searchEntry
  };
  
  const sqsParams = {
    MessageBody: messageBody,
    MessageGroupId: "BioimsSearch",
    MessageDeduplicationId: searchId,
    QueueUrl: SEARCH_QUEUE_URL
  };
  
  const p: any[] = [];
  p.push(db.put(dynamoParams).promise());
  p.push(sqs.sendMessage(sqsParams).promise());
  await Promise.all(p)
  await updateSearchStatus(searchId, STATUS_SUBMITTED);

  const response = {
    searchId: searchId
  }
  return response
}