Files
speckle-server/packages/server/modules/acc/services/cron.ts
T
Oğuzhan Koral 05e00d2c5c feat(acc): revamp (#5501)
* 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>
2025-10-03 13:54:17 +01:00

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
)
}