@dossierhq/sqlite-core
Version:
A library used by concrete SQLite adapters for Dossier.
48 lines • 2.2 kB
JavaScript
/// <reference types="./deleteGetEntityInfo.d.ts" />
import { notOk, ok, } from '@dossierhq/core';
import { buildSqliteSqlQuery, } from '@dossierhq/database-adapter';
import { queryMany } from '../QueryFunctions.js';
export async function adminEntityDeleteGetEntityInfo(database, context, references) {
const uuids = references.map(({ id }) => id);
const entityResult = await queryMany(database, context, buildSqliteSqlQuery(({ sql, addValueList }) => sql `SELECT e.id, e.uuid, e.auth_key, e.resolved_auth_key, e.status, e.latest_entity_versions_id
FROM entities e
WHERE e.uuid IN ${addValueList(uuids)}`));
if (entityResult.isError())
return entityResult;
const missingUuids = [];
const payload = [];
for (const uuid of uuids) {
const row = entityResult.value.find((row) => row.uuid === uuid);
if (!row) {
missingUuids.push(uuid);
}
else {
payload.push({
entityId: uuid,
entityInternalId: row.id,
entityVersionInternalId: row.latest_entity_versions_id,
authKey: row.auth_key,
resolvedAuthKey: row.resolved_auth_key,
status: row.status,
referencedBy: [],
});
}
}
if (missingUuids.length > 0) {
return notOk.NotFound(`No such entities: ${missingUuids.join(', ')}`);
}
const latestReferencesResult = await queryMany(database, context, buildSqliteSqlQuery(({ sql, addValueList }) => sql `SELECT elr.to_entities_id, e.uuid
FROM entity_latest_references elr
JOIN entities e ON elr.from_entities_id = e.id
WHERE elr.to_entities_id IN ${addValueList(payload.map((it) => it.entityInternalId))}`));
if (latestReferencesResult.isError())
return latestReferencesResult;
for (const row of latestReferencesResult.value) {
const entity = payload.find((it) => it.entityInternalId === row.to_entities_id);
if (entity && row.uuid) {
entity.referencedBy.push({ id: row.uuid });
}
}
return ok(payload);
}
//# sourceMappingURL=deleteGetEntityInfo.js.map