@dossierhq/sqlite-core
Version:
A library used by concrete SQLite adapters for Dossier.
32 lines • 2.5 kB
JavaScript
/// <reference types="./deleteEntity.d.ts" />
import { ok } from '@dossierhq/core';
import { buildSqliteSqlQuery, } from '@dossierhq/database-adapter';
import { queryRun } from '../QueryFunctions.js';
import { getTransactionTimestamp } from '../SqliteTransaction.js';
export async function adminEntityDeleteEntities(database, context, references, syncEvent) {
const now = syncEvent?.createdAt ?? getTransactionTimestamp(context.transaction);
const entityIds = references.map((it) => it.entityInternalId);
const entityResult = await queryRun(database, context, buildSqliteSqlQuery(({ sql, addValueList }) => sql `UPDATE entities
SET uuid_before_delete = uuid, uuid = NULL, name_before_delete = name, name = NULL, deleted_at = ${now.toISOString()}, status = 'deleted'
WHERE id IN ${addValueList(entityIds)}`));
if (entityResult.isError())
return entityResult;
// Update indexes
const deleteFtsResult = await queryRun(database, context, buildSqliteSqlQuery(({ sql, addValueList }) => sql `DELETE FROM entities_latest_fts WHERE rowid IN ${addValueList(entityIds)}`));
if (deleteFtsResult.isError())
return deleteFtsResult;
const removeExistingReferencesResult = await queryRun(database, context, buildSqliteSqlQuery(({ sql, addValueList }) => sql `DELETE FROM entity_latest_references WHERE from_entities_id IN ${addValueList(entityIds)}`));
if (removeExistingReferencesResult.isError())
return removeExistingReferencesResult;
const removeExistingLocationsResult = await queryRun(database, context, buildSqliteSqlQuery(({ sql, addValueList }) => sql `DELETE FROM entity_latest_locations WHERE entities_id IN ${addValueList(entityIds)}`));
if (removeExistingLocationsResult.isError())
return removeExistingLocationsResult;
const removeExistingValueTypesResult = await queryRun(database, context, buildSqliteSqlQuery(({ sql, addValueList }) => sql `DELETE FROM entity_latest_value_types WHERE entities_id IN ${addValueList(entityIds)}`));
if (removeExistingValueTypesResult.isError())
return removeExistingValueTypesResult;
const removeUniqueValuesResult = await queryRun(database, context, buildSqliteSqlQuery(({ sql, addValueList }) => sql `DELETE FROM unique_index_values WHERE entities_id IN ${addValueList(entityIds)}`));
if (removeUniqueValuesResult.isError())
return removeUniqueValuesResult;
return ok({ deletedAt: now });
}
//# sourceMappingURL=deleteEntity.js.map