import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import type * as recordTypes from "../../types/recordTypes"; export const getLotOccupancyFields = ( lotOccupancyId: number | string, connectedDatabase?: sqlite.Database ): recordTypes.LotOccupancyField[] => { const database = connectedDatabase || sqlite(databasePath, { readonly: true }); const lotOccupancyFields: recordTypes.LotOccupancyField[] = database .prepare( "select o.lotOccupancyId," + " o.occupancyTypeFieldId, o.lotOccupancyFieldValue," + " f.occupancyTypeField," + " f.occupancyTypeFieldValues, f.isRequired, f.pattern, f.minimumLength, f.maximumLength," + " f.orderNumber, t.orderNumber as occupancyTypeOrderNumber" + " from LotOccupancyFields o" + " left join OccupancyTypeFields f on o.occupancyTypeFieldId = f.occupancyTypeFieldId" + " left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId" + " where o.recordDelete_timeMillis is null" + " and o.lotOccupancyId = ?" + " union" + " select ? as lotOccupancyId," + " f.occupancyTypeFieldId, '' as lotOccupancyFieldValue," + " f.occupancyTypeField," + " f.occupancyTypeFieldValues, f.isRequired, f.pattern, f.minimumLength, f.maximumLength," + " f.orderNumber, t.orderNumber as occupancyTypeOrderNumber" + " from OccupancyTypeFields f" + " left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId" + " where f.recordDelete_timeMillis is null" + " and (f.occupancyTypeId is null or f.occupancyTypeId in (select occupancyTypeId from LotOccupancies where lotOccupancyId = ?))" + " and f.occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields where lotOccupancyId = ? and recordDelete_timeMillis is null)" + " order by occupancyTypeOrderNumber, f.orderNumber, f.occupancyTypeField" ) .all(lotOccupancyId, lotOccupancyId, lotOccupancyId, lotOccupancyId); if (!connectedDatabase) { database.close(); } return lotOccupancyFields; }; export default getLotOccupancyFields;