import { Account, Doc, Ref, TxOperations } from '@hcengineering/core' import notification, { DocNotifyContext } from '@hcengineering/notification' import { IntlString } from '@hcengineering/platform' import { PersonSpace } from '@hcengineering/contact' import github from '@hcengineering/github' export async function createNotification ( client: TxOperations, forDoc: Doc, data: { user: Ref, space: Ref, message: IntlString, props: Record } ): Promise { let docNotifyContext = await client.findOne(notification.class.DocNotifyContext, { objectId: forDoc._id }) if (docNotifyContext?._id === undefined) { const docNotifyContextId = await client.createDoc(notification.class.DocNotifyContext, data.space, { objectId: forDoc._id, objectClass: forDoc._class, objectSpace: forDoc.space, user: data.user, isPinned: false, hidden: false }) docNotifyContext = await client.findOne(notification.class.DocNotifyContext, { _id: docNotifyContextId }) } // Check if we had already same notification send, and just unmark it viewed. const existing = await client.findOne(notification.class.CommonInboxNotification, { user: data.user, message: data.message, props: data.props }) if (existing !== undefined) { await client.update(existing, { isViewed: false }) } else { await client.createDoc(notification.class.CommonInboxNotification, data.space, { user: data.user, icon: github.icon.Github, message: data.message, props: data.props, isViewed: false, archived: false, docNotifyContext: docNotifyContext?._id as Ref }) } }