async function getAllScanResults()

in src/db/tables/onerep_scans.ts [81:145]


async function getAllScanResults(
  age: Date,
  statuses: RemovalStatus[],
  page: number | null,
  perPage: number | null,
) {
  if (page && perPage) {
    // Our custom knex type doesn't seem to be quite right in this case.
    const countResult = (
      await knex("onerep_scan_results")
        .count("*")
        .whereIn("status", statuses)
        .andWhere("updated_at", "<", age)
    )[0] as unknown as { count: number };

    const count = countResult.count;

    const scanResults = await knex("onerep_scan_results")
      .limit(perPage)
      .offset((page - 1) * perPage)
      .whereIn("onerep_scan_results.status", statuses)
      .andWhere("onerep_scan_results.updated_at", "<", age)
      .join(
        "onerep_scans",
        "onerep_scan_results.onerep_scan_id",
        "=",
        "onerep_scans.onerep_scan_id",
      )
      .join(
        "subscribers",
        "onerep_scans.onerep_profile_id",
        "=",
        "subscribers.onerep_profile_id",
      )
      .orderBy("onerep_scan_result_id");

    let totalPages;

    if (count > 0 && count < perPage) {
      totalPages = 1;
    } else {
      totalPages = Math.ceil(count / perPage);
    }
    return { totalPages, scanResults };
  } else {
    const scanResults = await knex("onerep_scan_results")
      .whereIn("onerep_scan_results.status", statuses)
      .andWhere("onerep_scan_results.updated_at", "<", age)
      .join(
        "onerep_scans",
        "onerep_scan_results.onerep_scan_id",
        "=",
        "onerep_scans.onerep_scan_id",
      )
      .join(
        "subscribers",
        "onerep_scans.onerep_profile_id",
        "=",
        "subscribers.onerep_profile_id",
      )
      .orderBy("onerep_scan_result_id");

    return { scanResults };
  }
}