@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
47 lines (45 loc) • 1.89 kB
JavaScript
import { ItemsService } from "../../services/items.js";
import { sanitizeQuery } from "../../utils/sanitize-query.js";
import { getAccountabilityForRole } from "../../utils/get-accountability-for-role.js";
import { optionToObject, toArray } from "@directus/utils";
import { defineOperationApi } from "@directus/extensions";
//#region src/operations/item-read/index.ts
var item_read_default = defineOperationApi({
id: "item-read",
handler: async ({ collection, key, query, emitEvents, permissions }, { accountability, database, getSchema }) => {
const schema = await getSchema({ database });
let customAccountability;
if (!permissions || permissions === "$trigger") customAccountability = accountability;
else if (permissions === "$full") customAccountability = await getAccountabilityForRole("system", {
database,
schema,
accountability
});
else if (permissions === "$public") customAccountability = await getAccountabilityForRole(null, {
database,
schema,
accountability
});
else customAccountability = await getAccountabilityForRole(permissions, {
database,
schema,
accountability
});
const itemsService = new ItemsService(collection, {
schema,
accountability: customAccountability,
knex: database
});
const sanitizedQueryObject = await sanitizeQuery(query ? optionToObject(query) : {}, schema, customAccountability);
let result;
if (!key || Array.isArray(key) && key.length === 0) result = await itemsService.readByQuery(sanitizedQueryObject, { emitEvents: !!emitEvents });
else {
const keys = toArray(key);
if (keys.length === 1) result = await itemsService.readOne(keys[0], sanitizedQueryObject, { emitEvents: !!emitEvents });
else result = await itemsService.readMany(keys, sanitizedQueryObject, { emitEvents: !!emitEvents });
}
return result;
}
});
//#endregion
export { item_read_default as default };