05e00d2c5c
* chore(acc): put permission gql in correct place * feat(acc): swap to new rvt import * fix(acc): add oda secrets * feat(acc): auth cookies * feat(acc): introduce integrations as workspace setting * feat(acc): create sync item from models * fix(acc): bump * fix(acc): naming lost in merge * feat(acc): no acc tab - table under settings * chore(acc): new sync but will disapper * feat(acc): see statuses over model list * chore(acc): fix return type * chore(acc): type saga * chore(acc): status badge * chore(acc): refactor acc gql (#5556) * checkpoint * fix(acc): refactor gql items * feat(acc): double button * chore(acc): gqlgen * fix(acc): model ids are not project ids * chore(acc): bump function version * chore(acc): split up clients * feat(acc): more-optimised gql folder fetching schema * feat(acc): acc folder contents gql impl * feat(acc): apollo cache optimisations * chore(acc): gqlgen * fix(acc): return something for * fix(acc): handle null values correctly * chore(acc): specify prod functions --------- Co-authored-by: Chuck Driesler <chuck@speckle.systems>
70 lines
2.4 KiB
TypeScript
70 lines
2.4 KiB
TypeScript
import {
|
|
queryAllAccSyncItemsFactory,
|
|
updateAccSyncItemStatusFactory
|
|
} from '@/modules/acc/repositories/accSyncItems'
|
|
import type { ScheduleExecution } from '@/modules/core/domain/scheduledTasks/operations'
|
|
import { db } from '@/db/knex'
|
|
import { getProjectDbClient } from '@/modules/multiregion/utils/dbSelector'
|
|
import {
|
|
getAutomationFactory,
|
|
getLatestAutomationRevisionFactory,
|
|
upsertAutomationRunFactory,
|
|
getAutomationTokenFactory
|
|
} from '@/modules/automate/repositories/automations'
|
|
import {
|
|
storeApiTokenFactory,
|
|
storeTokenScopesFactory,
|
|
storeTokenResourceAccessDefinitionsFactory,
|
|
storeUserServerAppTokenFactory
|
|
} from '@/modules/core/repositories/tokens'
|
|
import { createAppTokenFactory } from '@/modules/core/services/tokens'
|
|
import { TIME_MS } from '@speckle/shared'
|
|
import { AccSyncItemStatuses } from '@/modules/acc/domain/acc/constants'
|
|
import { triggerSyncItemAutomationFactory } from '@/modules/acc/services/automate'
|
|
|
|
const queryAllAccSyncItems = queryAllAccSyncItemsFactory({ db })
|
|
|
|
export const schedulePendingSyncItemsCheck = (deps: {
|
|
scheduleExecution: ScheduleExecution
|
|
}) => {
|
|
const callback = async () => {
|
|
for await (const items of queryAllAccSyncItems({
|
|
filter: { status: AccSyncItemStatuses.pending }
|
|
})) {
|
|
for (const syncItem of items) {
|
|
const projectDb = await getProjectDbClient({ projectId: syncItem.projectId })
|
|
|
|
await triggerSyncItemAutomationFactory({
|
|
updateAccSyncItemStatus: updateAccSyncItemStatusFactory({ db }),
|
|
getAutomation: getAutomationFactory({ db: projectDb }),
|
|
getLatestAutomationRevision: getLatestAutomationRevisionFactory({
|
|
db: projectDb
|
|
}),
|
|
upsertAutomationRun: upsertAutomationRunFactory({ db: projectDb }),
|
|
createAppToken: createAppTokenFactory({
|
|
storeApiToken: storeApiTokenFactory({ db }),
|
|
storeTokenScopes: storeTokenScopesFactory({ db }),
|
|
storeTokenResourceAccessDefinitions:
|
|
storeTokenResourceAccessDefinitionsFactory({
|
|
db
|
|
}),
|
|
storeUserServerAppToken: storeUserServerAppTokenFactory({ db })
|
|
}),
|
|
getAutomationToken: getAutomationTokenFactory({
|
|
db: projectDb
|
|
})
|
|
})({
|
|
id: syncItem.id
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
return deps.scheduleExecution(
|
|
'*/1 * * * *',
|
|
'pendingAccSyncItemsCheck',
|
|
callback,
|
|
15 * TIME_MS.minute
|
|
)
|
|
}
|