mirror of
https://github.com/hcengineering/platform.git
synced 2026-09-12 12:47:45 +02:00
Fix remove project (#7941)
Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
This commit is contained in:
@@ -34,6 +34,7 @@
|
||||
"@hcengineering/server-github": "^0.6.0",
|
||||
"@hcengineering/server-core": "^0.6.1",
|
||||
"@hcengineering/github": "^0.6.0",
|
||||
"@hcengineering/tracker": "^0.6.24",
|
||||
"@hcengineering/notification": "^0.6.23",
|
||||
"@hcengineering/server-notification": "^0.6.1",
|
||||
"@hcengineering/time": "^0.6.0"
|
||||
|
||||
@@ -8,6 +8,7 @@ import core from '@hcengineering/core'
|
||||
import serverCore from '@hcengineering/server-core'
|
||||
import serverGithub from '@hcengineering/server-github'
|
||||
import time from '@hcengineering/time'
|
||||
import tracker from '@hcengineering/tracker'
|
||||
|
||||
export { serverGithubId } from '@hcengineering/server-github'
|
||||
|
||||
@@ -16,6 +17,15 @@ export function createModel (builder: Builder): void {
|
||||
trigger: serverGithub.trigger.OnProjectChanges,
|
||||
isAsync: true
|
||||
})
|
||||
|
||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||
trigger: serverGithub.trigger.OnProjectRemove,
|
||||
txMatch: {
|
||||
_class: core.class.TxRemoveDoc,
|
||||
objectClass: tracker.class.Project
|
||||
}
|
||||
})
|
||||
|
||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||
trigger: serverGithub.trigger.OnGithubBroadcast,
|
||||
isAsync: false
|
||||
|
||||
@@ -98,10 +98,53 @@ export async function OnProjectChanges (txes: Tx[], control: TriggerControl): Pr
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export async function OnProjectRemove (txes: Tx[], control: TriggerControl): Promise<Tx[]> {
|
||||
const result: Tx[] = []
|
||||
for (const ltx of txes) {
|
||||
if (ltx._class === core.class.TxRemoveDoc) {
|
||||
const cud = ltx as TxCUD<Doc>
|
||||
if (control.hierarchy.isDerived(cud.objectClass, tracker.class.Project)) {
|
||||
const project = control.removedMap.get(cud.objectId)
|
||||
if (project === undefined) {
|
||||
continue
|
||||
}
|
||||
if (control.hierarchy.hasMixin(project, github.mixin.GithubProject)) {
|
||||
const repos = await control.findAll(control.ctx, github.class.GithubIntegrationRepository, {
|
||||
githubProject: cud.objectId as Ref<GithubProject>
|
||||
})
|
||||
for (const repo of repos) {
|
||||
result.push(
|
||||
control.txFactory.createTxUpdateDoc(repo._class, repo.space, repo._id, {
|
||||
enabled: false,
|
||||
githubProject: null
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
const syncDocs = control.modelDb.findAllSync(github.class.DocSyncInfo, {
|
||||
space: cud.objectId as Ref<Space>
|
||||
})
|
||||
for (const syncDoc of syncDocs) {
|
||||
result.push(control.txFactory.createTxRemoveDoc(syncDoc._class, syncDoc.space, syncDoc._id))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (result.length > 0) {
|
||||
await OnGithubBroadcast(txes, control)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export default async () => ({
|
||||
trigger: {
|
||||
OnProjectChanges,
|
||||
OnProjectRemove,
|
||||
OnGithubBroadcast
|
||||
},
|
||||
functions: {
|
||||
|
||||
@@ -21,6 +21,7 @@ export const serverGithubId = 'server-github' as Plugin
|
||||
export default plugin(serverGithubId, {
|
||||
trigger: {
|
||||
OnProjectChanges: '' as Resource<TriggerFunc>,
|
||||
OnProjectRemove: '' as Resource<TriggerFunc>,
|
||||
OnGithubBroadcast: '' as Resource<TriggerFunc>
|
||||
},
|
||||
functions: {
|
||||
|
||||
Reference in New Issue
Block a user