cityssm/lottery-licence-manager

View on GitHub
helpers/licencesDB/mergeLocations.js

Summary

Maintainability
A
0 mins
Test Coverage
F
8%
import sqlite from "better-sqlite3";
import { licencesDB as databasePath } from "../../data/databasePaths.js";
export const mergeLocations = (targetLocationID, sourceLocationID, requestSession) => {
    const database = sqlite(databasePath);
    const nowMillis = Date.now();
    const locationAttributes = database.prepare("select max(locationIsDistributor) as locationIsDistributorMax," +
        " max(locationIsManufacturer) as locationIsManufacturerMax," +
        " count(locationID) as locationCount" +
        " from Locations" +
        " where recordDelete_timeMillis is null" +
        " and (locationID = ? or locationID = ?)")
        .get(targetLocationID, sourceLocationID);
    if (!locationAttributes) {
        database.close();
        return false;
    }
    if (locationAttributes.locationCount !== 2) {
        database.close();
        return false;
    }
    database.prepare("update Locations" +
        " set locationIsDistributor = ?," +
        " locationIsManufacturer = ?" +
        " where locationID = ?")
        .run(locationAttributes.locationIsDistributorMax, locationAttributes.locationIsManufacturerMax, targetLocationID);
    database.prepare("update LotteryLicences" +
        " set locationID = ?" +
        " where locationID = ?" +
        " and recordDelete_timeMillis is null")
        .run(targetLocationID, sourceLocationID);
    database.prepare("update LotteryLicenceTicketTypes" +
        " set distributorLocationID = ?" +
        " where distributorLocationID = ?" +
        " and recordDelete_timeMillis is null")
        .run(targetLocationID, sourceLocationID);
    database.prepare("update LotteryLicenceTicketTypes" +
        " set manufacturerLocationID = ?" +
        " where manufacturerLocationID = ?" +
        " and recordDelete_timeMillis is null")
        .run(targetLocationID, sourceLocationID);
    database.prepare("update Locations" +
        " set recordDelete_userName = ?," +
        " recordDelete_timeMillis = ?" +
        " where locationID = ?")
        .run(requestSession.user.userName, nowMillis, sourceLocationID);
    database.close();
    return true;
};