Password Policy/App rename/PM Scheduling Improvements
This commit is contained in:
@@ -2,18 +2,32 @@ const { all, audit, now, one, parseJson, run } = require('../db');
|
||||
|
||||
const SOURCES = ['common', 'industry', 'business', 'custom'];
|
||||
|
||||
// How many asset categories reference a given class number (categories store it in metadata).
|
||||
// How many asset categories reference a class. Categories link by unique asset_class_id; older
|
||||
// records that only stored asset_class_number fall back to matching on the (non-unique) number.
|
||||
function categoryUsage() {
|
||||
const counts = {};
|
||||
const byId = {};
|
||||
const byNumber = {};
|
||||
for (const row of all("SELECT metadata FROM reference_values WHERE type = 'category'")) {
|
||||
const num = parseJson(row.metadata, {}).asset_class_number;
|
||||
if (num) counts[num] = (counts[num] || 0) + 1;
|
||||
const meta = parseJson(row.metadata, {});
|
||||
if (meta.asset_class_id) byId[meta.asset_class_id] = (byId[meta.asset_class_id] || 0) + 1;
|
||||
else if (meta.asset_class_number) byNumber[meta.asset_class_number] = (byNumber[meta.asset_class_number] || 0) + 1;
|
||||
}
|
||||
return counts;
|
||||
// Class numbers are not unique (e.g. 00.12 is shared by Computers, Casinos, and a dozen others). A
|
||||
// category that only stored a number can't be pinned to one class, so the number fallback is only
|
||||
// safe when exactly one class carries that number — otherwise it would falsely flag every sharing
|
||||
// class as "assigned."
|
||||
const numberOwners = {};
|
||||
for (const row of all('SELECT class_number FROM asset_classes WHERE class_number IS NOT NULL')) {
|
||||
numberOwners[row.class_number] = (numberOwners[row.class_number] || 0) + 1;
|
||||
}
|
||||
return { byId, byNumber, numberOwners };
|
||||
}
|
||||
|
||||
function fromRow(row, usage) {
|
||||
if (!row) return null;
|
||||
const idCount = usage.byId[row.id] || 0;
|
||||
const uniqueNumber = row.class_number && usage.numberOwners[row.class_number] === 1;
|
||||
const numberCount = uniqueNumber ? (usage.byNumber[row.class_number] || 0) : 0;
|
||||
return {
|
||||
id: row.id,
|
||||
class_number: row.class_number,
|
||||
@@ -22,7 +36,7 @@ function fromRow(row, usage) {
|
||||
ads: row.ads,
|
||||
source: row.source,
|
||||
table: row.source, // back-compat alias used by the category picker
|
||||
category_count: row.class_number ? (usage[row.class_number] || 0) : 0
|
||||
category_count: idCount + numberCount
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user