@budibase/server
Version:
Budibase Web Server
48 lines (43 loc) • 1.36 kB
text/typescript
import { constants, context, logging } from "@budibase/backend-core"
import { DocUpdateEvent, WorkspaceResourceEvents } from "@budibase/types"
import sdk from "../../sdk"
const { AUTOMATION, DATASOURCE, TABLE, WORKSPACE_APP, QUERY, MEM_VIEW } =
constants.DocumentType
export default function process() {
const processor = async (update: DocUpdateEvent) => {
try {
const docId = update.id
const appId = update.appId
const isWSResource = [
AUTOMATION,
DATASOURCE,
TABLE,
WORKSPACE_APP,
QUERY,
MEM_VIEW,
].find(type => docId.startsWith(type))
if (isWSResource!! && appId) {
context.doInWorkspaceContext(appId, async () => {
const result = await sdk.workspace.findByResourceId(docId)
const [fav] = result
if (fav) {
// Purge
await sdk.workspace.remove(fav._id, fav._rev)
}
})
}
} catch (err: any) {
// if something not found - no changes to perform
if (err?.status === 404) {
return
}
// The user has already been synced in another process
else if (err?.status === 409) {
return
} else {
logging.logAlert("Failed to sync workspace resource faves", err)
}
}
}
return { events: WorkspaceResourceEvents, processor }
}