UNPKG

@dossierhq/sqlite-core

Version:

A library used by concrete SQLite adapters for Dossier.

57 lines 2.66 kB
/// <reference types="./getEntity.d.ts" /> /* eslint-disable @typescript-eslint/no-unused-expressions */ import { notOk, ok, } from '@dossierhq/core'; import { createSqliteSqlQuery, } from '@dossierhq/database-adapter'; import { queryNoneOrOne } from '../QueryFunctions.js'; import { assertIsDefined } from '../utils/AssertUtils.js'; import { resolveAdminEntityInfo, resolveEntityFields } from '../utils/CodecUtils.js'; export async function adminGetEntity(database, context, reference) { const result = 'version' in reference ? await getEntityWithVersion(database, context, reference) : await getEntityWithLatestVersion(database, context, reference); if (result.isError()) return result; const row = result.value; assertIsDefined(row.uuid); return ok({ ...resolveAdminEntityInfo(row), ...resolveEntityFields(row), id: row.uuid, resolvedAuthKey: row.resolved_auth_key, }); } async function getEntityWithLatestVersion(database, context, reference) { const { sql, query } = createSqliteSqlQuery(); sql `SELECT e.uuid, e.type, e.name, e.auth_key, e.resolved_auth_key, e.created_at, e.updated_at, e.status, e.invalid, ev.version, ev.schema_version, ev.encode_version, ev.fields, s.uuid AS subjects_uuid`; if ('id' in reference) { sql `FROM entities e, entity_versions ev, subjects s WHERE e.uuid = ${reference.id}`; } else { sql `FROM entities e, entity_versions ev, unique_index_values uiv, subjects s WHERE uiv.index_name = ${reference.index} AND uiv.value = ${reference.value} AND uiv.latest AND uiv.entities_id = e.id`; } sql `AND e.latest_entity_versions_id = ev.id AND ev.created_by = s.id`; const result = await queryNoneOrOne(database, context, query); if (result.isError()) return result; if (!result.value) { return notOk.NotFound('No such entity'); } return ok(result.value); } async function getEntityWithVersion(database, context, reference) { const result = await queryNoneOrOne(database, context, { text: `SELECT e.uuid, e.type, e.auth_key, e.resolved_auth_key, e.created_at, e.status, e.invalid, ev.name, ev.version, ev.schema_version, ev.encode_version, ev.fields, ev.created_at AS updated_at FROM entities e, entity_versions ev WHERE e.uuid = ?1 AND e.id = ev.entities_id AND ev.version = ?2`, values: [reference.id, reference.version], }); if (result.isError()) return result; if (!result.value) { return notOk.NotFound('No such entity or version'); } return ok(result.value); } //# sourceMappingURL=getEntity.js.map