From dacaa3feb351eb48a644655b08e16b06f87ea877 Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Mon, 31 Oct 2022 13:33:42 -0400 Subject: [PATCH] attempt to isolate complexity --- helpers/lotOccupancyDB/getLotOccupancies.js | 21 ++++++--- helpers/lotOccupancyDB/getLotOccupancies.ts | 51 +++++++++++++-------- 2 files changed, 45 insertions(+), 27 deletions(-) diff --git a/helpers/lotOccupancyDB/getLotOccupancies.js b/helpers/lotOccupancyDB/getLotOccupancies.js index 321e7354..865fd91a 100644 --- a/helpers/lotOccupancyDB/getLotOccupancies.js +++ b/helpers/lotOccupancyDB/getLotOccupancies.js @@ -2,12 +2,7 @@ import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { dateIntegerToString, dateStringToInteger, dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { getLotOccupancyOccupants } from "./getLotOccupancyOccupants.js"; -export const getLotOccupancies = (filters, options, connectedDatabase) => { - const database = connectedDatabase || - sqlite(databasePath, { - readonly: true - }); - database.function("userFn_dateIntegerToString", dateIntegerToString); +const buildWhereClause = (filters) => { let sqlWhereClause = " where o.recordDelete_timeMillis is null"; const sqlParameters = []; if (filters.lotId) { @@ -91,7 +86,19 @@ export const getLotOccupancies = (filters, options, connectedDatabase) => { " and o.lotOccupancyId not in (select lotOccupancyId from WorkOrderLotOccupancies where recordDelete_timeMillis is null and workOrderId = ?)"; sqlParameters.push(filters.notWorkOrderId); } - let count; + return { + sqlWhereClause, + sqlParameters + }; +}; +export const getLotOccupancies = (filters, options, connectedDatabase) => { + const database = connectedDatabase || + sqlite(databasePath, { + readonly: true + }); + database.function("userFn_dateIntegerToString", dateIntegerToString); + const { sqlWhereClause, sqlParameters } = buildWhereClause(filters); + let count = 0; if (options.limit !== -1) { count = database .prepare("select count(*) as recordCount" + diff --git a/helpers/lotOccupancyDB/getLotOccupancies.ts b/helpers/lotOccupancyDB/getLotOccupancies.ts index 9d0b9b1a..7550719c 100644 --- a/helpers/lotOccupancyDB/getLotOccupancies.ts +++ b/helpers/lotOccupancyDB/getLotOccupancies.ts @@ -33,24 +33,11 @@ interface GetLotOccupanciesOptions { includeOccupants: boolean; } -export const getLotOccupancies = ( - filters: GetLotOccupanciesFilters, - options: GetLotOccupanciesOptions, - connectedDatabase?: sqlite.Database -): { - count: number; - lotOccupancies: recordTypes.LotOccupancy[]; -} => { - const database = - connectedDatabase || - sqlite(databasePath, { - readonly: true - }); - - database.function("userFn_dateIntegerToString", dateIntegerToString); - +const buildWhereClause = ( + filters: GetLotOccupanciesFilters +): { sqlWhereClause: string; sqlParameters: unknown[] } => { let sqlWhereClause = " where o.recordDelete_timeMillis is null"; - const sqlParameters = []; + const sqlParameters: unknown[] = []; if (filters.lotId) { sqlWhereClause += " and o.lotId = ?"; @@ -148,7 +135,31 @@ export const getLotOccupancies = ( sqlParameters.push(filters.notWorkOrderId); } - let count: number; + return { + sqlWhereClause, + sqlParameters + }; +}; + +export const getLotOccupancies = ( + filters: GetLotOccupanciesFilters, + options: GetLotOccupanciesOptions, + connectedDatabase?: sqlite.Database +): { + count: number; + lotOccupancies: recordTypes.LotOccupancy[]; +} => { + const database = + connectedDatabase || + sqlite(databasePath, { + readonly: true + }); + + database.function("userFn_dateIntegerToString", dateIntegerToString); + + const { sqlWhereClause, sqlParameters } = buildWhereClause(filters); + + let count = 0; if (options.limit !== -1) { count = database @@ -175,7 +186,7 @@ export const getLotOccupancies = ( " from LotOccupancies o" + " left join OccupancyTypes t on o.occupancyTypeId = t.occupancyTypeId" + " left join Lots l on o.lotId = l.lotId" + - " left join LotTypes lt on l.lotTypeId = lt.lotTypeId" + + " left join LotTypes lt on l.lotTypeId = lt.lotTypeId" + " left join Maps m on l.mapId = m.mapId" + sqlWhereClause + " order by o.occupancyStartDate desc, ifnull(o.occupancyEndDate, 99999999) desc, l.lotName, o.lotId" + @@ -192,7 +203,7 @@ export const getLotOccupancies = ( if (options.includeOccupants) { for (const lotOccupancy of lotOccupancies) { lotOccupancy.lotOccupancyOccupants = getLotOccupancyOccupants( - lotOccupancy.lotOccupancyId, + lotOccupancy.lotOccupancyId as number, database ); }