From 47387ac479f5f035bed3a7d7c9cc6063cfdd764b Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Mon, 31 Oct 2022 13:50:08 -0400 Subject: [PATCH] reduce complexity --- helpers/lotOccupancyDB/getLots.js | 19 ++++++--- helpers/lotOccupancyDB/getLots.ts | 43 +++++++++++-------- helpers/lotOccupancyDB/getWorkOrders.d.ts | 2 +- helpers/lotOccupancyDB/getWorkOrders.js | 26 ++++++++---- helpers/lotOccupancyDB/getWorkOrders.ts | 50 ++++++++++++++--------- 5 files changed, 88 insertions(+), 52 deletions(-) diff --git a/helpers/lotOccupancyDB/getLots.js b/helpers/lotOccupancyDB/getLots.js index 4a601600..a8b7a1a0 100644 --- a/helpers/lotOccupancyDB/getLots.js +++ b/helpers/lotOccupancyDB/getLots.js @@ -2,11 +2,7 @@ import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import * as configFunctions from "../functions.config.js"; -export const getLots = (filters, options, connectedDatabase) => { - const database = connectedDatabase || - sqlite(databasePath, { - readonly: true - }); +const buildWhereClause = (filters) => { let sqlWhereClause = " where l.recordDelete_timeMillis is null"; const sqlParameters = []; if (filters.lotName) { @@ -51,8 +47,19 @@ export const getLots = (filters, options, connectedDatabase) => { " and l.lotId in (select lotId from WorkOrderLots where recordDelete_timeMillis is null and workOrderId = ?)"; sqlParameters.push(filters.workOrderId); } + return { + sqlWhereClause, + sqlParameters + }; +}; +export const getLots = (filters, options, connectedDatabase) => { + const database = connectedDatabase || + sqlite(databasePath, { + readonly: true + }); + const { sqlWhereClause, sqlParameters } = buildWhereClause(filters); const currentDate = dateToInteger(new Date()); - let count; + let count = 0; if (options.limit !== -1) { count = database .prepare("select count(*) as recordCount" + diff --git a/helpers/lotOccupancyDB/getLots.ts b/helpers/lotOccupancyDB/getLots.ts index 4655ce92..078e143e 100644 --- a/helpers/lotOccupancyDB/getLots.ts +++ b/helpers/lotOccupancyDB/getLots.ts @@ -23,23 +23,10 @@ interface GetLotsOptions { offset: number; } -export const getLots = ( - filters: GetLotsFilters, - options: GetLotsOptions, - connectedDatabase?: sqlite.Database -): { - count: number; - lots: recordTypes.Lot[]; -} => { - const database = - connectedDatabase || - sqlite(databasePath, { - readonly: true - }); - +const buildWhereClause = (filters: GetLotsFilters): { sqlWhereClause: string; sqlParameters: unknown[];} => { let sqlWhereClause = " where l.recordDelete_timeMillis is null"; - const sqlParameters = []; - + const sqlParameters: unknown[] = []; + if (filters.lotName) { if (filters.lotNameSearchType === "startsWith") { sqlWhereClause += " and l.lotName like ? || '%'"; @@ -86,9 +73,31 @@ export const getLots = ( sqlParameters.push(filters.workOrderId); } + return { + sqlWhereClause, + sqlParameters + }; +}; + +export const getLots = ( + filters: GetLotsFilters, + options: GetLotsOptions, + connectedDatabase?: sqlite.Database +): { + count: number; + lots: recordTypes.Lot[]; +} => { + const database = + connectedDatabase || + sqlite(databasePath, { + readonly: true + }); + + const { sqlWhereClause, sqlParameters } = buildWhereClause(filters); + const currentDate = dateToInteger(new Date()); - let count: number; + let count = 0; if (options.limit !== -1) { count = database diff --git a/helpers/lotOccupancyDB/getWorkOrders.d.ts b/helpers/lotOccupancyDB/getWorkOrders.d.ts index ba07a10b..af8a7849 100644 --- a/helpers/lotOccupancyDB/getWorkOrders.d.ts +++ b/helpers/lotOccupancyDB/getWorkOrders.d.ts @@ -13,7 +13,7 @@ interface GetWorkOrdersOptions { includeComments?: boolean; includeMilestones?: boolean; } -export declare const getWorkOrders: (filters?: GetWorkOrdersFilters, options?: GetWorkOrdersOptions) => { +export declare const getWorkOrders: (filters: GetWorkOrdersFilters, options?: GetWorkOrdersOptions) => { count: number; workOrders: recordTypes.WorkOrder[]; }; diff --git a/helpers/lotOccupancyDB/getWorkOrders.js b/helpers/lotOccupancyDB/getWorkOrders.js index 7c253cd8..23a41e50 100644 --- a/helpers/lotOccupancyDB/getWorkOrders.js +++ b/helpers/lotOccupancyDB/getWorkOrders.js @@ -5,11 +5,7 @@ import { getWorkOrderComments } from "./getWorkOrderComments.js"; import { getLots } from "./getLots.js"; import { getLotOccupancies } from "./getLotOccupancies.js"; import { getWorkOrderMilestones } from "./getWorkOrderMilestones.js"; -export const getWorkOrders = (filters, options) => { - const database = sqlite(databasePath, { - readonly: true - }); - database.function("userFn_dateIntegerToString", dateIntegerToString); +const buildWhereClause = (filters) => { let sqlWhereClause = " where w.recordDelete_timeMillis is null"; const sqlParameters = []; if (filters.workOrderTypeId) { @@ -46,8 +42,19 @@ export const getWorkOrders = (filters, options) => { sqlParameters.push(lotNamePiece); } } + return { + sqlWhereClause, + sqlParameters + }; +}; +export const getWorkOrders = (filters, options) => { + const database = sqlite(databasePath, { + readonly: true + }); + database.function("userFn_dateIntegerToString", dateIntegerToString); + const { sqlWhereClause, sqlParameters } = buildWhereClause(filters); const count = database - .prepare("select count(*) as recordCount" + " from WorkOrders w" + sqlWhereClause) + .prepare("select count(*) as recordCount from WorkOrders w" + sqlWhereClause) .get(sqlParameters).recordCount; let workOrders = []; if (count > 0) { @@ -72,9 +79,10 @@ export const getWorkOrders = (filters, options) => { (options ? " limit " + options.limit + " offset " + options.offset : "")) .all(sqlParameters); } - if (options.includeComments || - options.includeLotsAndLotOccupancies || - options.includeMilestones) { + if (options && + (options.includeComments || + options.includeLotsAndLotOccupancies || + options.includeMilestones)) { for (const workOrder of workOrders) { if (options.includeComments) { workOrder.workOrderComments = getWorkOrderComments(workOrder.workOrderId, database); diff --git a/helpers/lotOccupancyDB/getWorkOrders.ts b/helpers/lotOccupancyDB/getWorkOrders.ts index 8f06ce98..abfd607d 100644 --- a/helpers/lotOccupancyDB/getWorkOrders.ts +++ b/helpers/lotOccupancyDB/getWorkOrders.ts @@ -30,21 +30,11 @@ interface GetWorkOrdersOptions { includeMilestones?: boolean; } -export const getWorkOrders = ( - filters?: GetWorkOrdersFilters, - options?: GetWorkOrdersOptions -): { - count: number; - workOrders: recordTypes.WorkOrder[]; -} => { - const database = sqlite(databasePath, { - readonly: true - }); - - database.function("userFn_dateIntegerToString", dateIntegerToString); - +const buildWhereClause = ( + filters: GetWorkOrdersFilters +): { sqlWhereClause: string; sqlParameters: unknown[] } => { let sqlWhereClause = " where w.recordDelete_timeMillis is null"; - const sqlParameters = []; + const sqlParameters: unknown[] = []; if (filters.workOrderTypeId) { sqlWhereClause += " and w.workOrderTypeId = ?"; @@ -84,8 +74,29 @@ export const getWorkOrders = ( } } + return { + sqlWhereClause, + sqlParameters + }; +}; + +export const getWorkOrders = ( + filters: GetWorkOrdersFilters, + options?: GetWorkOrdersOptions +): { + count: number; + workOrders: recordTypes.WorkOrder[]; +} => { + const database = sqlite(databasePath, { + readonly: true + }); + + database.function("userFn_dateIntegerToString", dateIntegerToString); + + const { sqlWhereClause, sqlParameters } = buildWhereClause(filters); + const count: number = database - .prepare("select count(*) as recordCount" + " from WorkOrders w" + sqlWhereClause) + .prepare("select count(*) as recordCount from WorkOrders w" + sqlWhereClause) .get(sqlParameters).recordCount; let workOrders: recordTypes.WorkOrder[] = []; @@ -116,13 +127,14 @@ export const getWorkOrders = ( } if ( - options.includeComments || - options.includeLotsAndLotOccupancies || - options.includeMilestones + options && + (options.includeComments || + options.includeLotsAndLotOccupancies || + options.includeMilestones) ) { for (const workOrder of workOrders) { if (options.includeComments) { - workOrder.workOrderComments = getWorkOrderComments(workOrder.workOrderId, database); + workOrder.workOrderComments = getWorkOrderComments(workOrder.workOrderId as number, database); } if (options.includeLotsAndLotOccupancies) {