cityssm/corporate-records-manager

View on GitHub
helpers/recordsDB/getSuggestedRecordUsers.ts

Summary

Maintainability
A
0 mins
Test Coverage
import * as sqlPool from "@cityssm/mssql-multi-pool";
import * as configFns from "../configFns.js";

import type * as sqlTypes from "mssql";

import debug from "debug";
const debugSQL = debug("corporate-records-manager:recordsDB:getSuggestedRecordUsers");


interface SuggestedRecordUser {
  fullName: string;
  userName: string;
  recordCount: number;
}


export const getSuggestedRecordUsers = async (): Promise<SuggestedRecordUser[]> => {

  try {
    const pool: sqlTypes.ConnectionPool =
      await sqlPool.connect(configFns.getProperty("mssqlConfig"));

    const result = await pool.request()
      .query("select" +
      " case" +
      " when u.userName is not null and u.userName != '' then u.userName" +
      " else r.userName" +
      " end as userName," +
      " case" +
      " when u.fullName is not null and u.fullName != '' then u.fullName" +
      " when u.userName is not null and u.userName != '' then u.userName" +
      " else r.userName" +
      " end as fullName," +
      " count(recordUserID) as recordCount" +
      " from CR.Users u" +
      " full join CR.RecordUsers r on u.userName = r.userName and r.recordDelete_datetime is null" +
      " group by u.userName, u.fullName, r.userName" +
      " order by recordCount desc");

    if (result.recordset && result.recordset.length > 0) {
      return result.recordset;
    }

  } catch (error) {
    debugSQL(error);
  }

  return [];
};


export default getSuggestedRecordUsers;