@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
47 lines (45 loc) • 1.75 kB
JavaScript
import { NotificationsService } from "../../services/notifications.js";
import { getAccountabilityForRole } from "../../utils/get-accountability-for-role.js";
import { optionToString, toArray } from "@directus/utils";
import { defineOperationApi } from "@directus/extensions";
//#region src/operations/notification/index.ts
var notification_default = defineOperationApi({
id: "notification",
handler: async ({ recipient, subject, message, permissions, collection, item }, { accountability, database, getSchema }) => {
const schema = await getSchema({ database });
let customAccountability;
if (!permissions || permissions === "$trigger") customAccountability = accountability;
else if (permissions === "$full") customAccountability = null;
else if (permissions === "$public") customAccountability = await getAccountabilityForRole(null, {
database,
schema,
accountability
});
else customAccountability = await getAccountabilityForRole(permissions, {
database,
schema,
accountability
});
const notificationsService = new NotificationsService({
schema: await getSchema({ database }),
accountability: customAccountability,
knex: database
});
const messageString = message ? optionToString(message) : null;
const collectionString = collection ? optionToString(collection) : null;
const itemString = item ? optionToString(item) : null;
const payload = toArray(recipient).map((userId) => {
return {
recipient: userId,
sender: customAccountability?.user ?? null,
subject,
message: messageString,
collection: collectionString,
item: itemString
};
});
return await notificationsService.createMany(payload);
}
});
//#endregion
export { notification_default as default };