import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; export const getPastLotOccupancyOccupants = (filters, options) => { const database = sqlite(databasePath, { readonly: true }); let sqlWhereClause = " where o.recordDelete_timeMillis is null and l.recordDelete_timeMillis is null"; const sqlParameters = []; if (filters.searchFilter) { const searchFilterPieces = filters.searchFilter.split(" "); for (const searchFilterPiece of searchFilterPieces) { sqlWhereClause += " and (o.occupantName like '%' || ? || '%'" + " or o.occupantAddress1 like '%' || ? || '%'" + " or o.occupantAddress2 like '%' || ? || '%'" + " or o.occupantCity like '%' || ? || '%')"; sqlParameters.push(searchFilterPiece, searchFilterPiece, searchFilterPiece, searchFilterPiece); } } const sql = "select" + " o.occupantName, o.occupantAddress1, o.occupantAddress2," + " o.occupantCity, o.occupantProvince, o.occupantPostalCode," + " o.occupantPhoneNumber, o.occupantEmailAddress," + " count(*) as lotOccupancyIdCount," + " max(o.recordUpdate_timeMillis) as recordUpdate_timeMillisMax" + " from LotOccupancyOccupants o" + " left join LotOccupancies l on o.lotOccupancyId = l.lotOccupancyId" + sqlWhereClause + " group by occupantName, occupantAddress1, occupantAddress2, occupantCity, occupantProvince, occupantPostalCode," + " occupantPhoneNumber, occupantEmailAddress" + " order by lotOccupancyIdCount desc, recordUpdate_timeMillisMax desc" + " limit " + options.limit; const lotOccupancyOccupants = database .prepare(sql) .all(sqlParameters); database.close(); return lotOccupancyOccupants; }; export default getPastLotOccupancyOccupants;