Files
speckle-server/packages/server/modules/workspaces/repositories/regions.ts
T
Chuck Driesler c382064585 feat(regions): move project branches and commits (#3843)
* feat(regions): repo functions for copying project branches and commits

* chore(regions): wire up move to resolver

* chore(regions): successful basic test of project region change

* fix(regions): sabrina carpenter please please please

* fix(regions): repair multiregion test setup

* chore(regions): appease ts

* chore(multiregion): update test multiregion config

* chore(multiregion): fix test docker config and test

* chore(multiregion): use transaction

* chore(multiregion): maybe this will work

* fix(multiregion): drop subs synchronously

* chore(multiregion): desperate test logs

* chore(multiregion): somehow that worked?

* chore(multiregion): add load-bearing log statement

* chore(multiregion): move services

* fix(multiregion): test drop waits

* chore(regions): fix import

* chore(regions): make test a bit more thorough for good measure

* fix(regions): speed up inserts

* fix(regions): ignore workspace conflict on move
2025-02-13 14:39:23 +00:00

47 lines
1.4 KiB
TypeScript

import { buildTableHelper } from '@/modules/core/dbSchema'
import { RegionRecord } from '@/modules/multiregion/helpers/types'
import { Regions } from '@/modules/multiregion/repositories'
import {
GetDefaultRegion,
UpsertRegionAssignment
} from '@/modules/workspaces/domain/operations'
import { WorkspaceRegionAssignment } from '@/modules/workspacesCore/domain/types'
import { Knex } from 'knex'
export const WorkspaceRegions = buildTableHelper('workspace_regions', [
'workspaceId',
'regionKey'
])
const tables = {
regions: (db: Knex) => db<RegionRecord>(Regions.name),
workspaceRegions: (db: Knex) => db<WorkspaceRegionAssignment>(WorkspaceRegions.name)
}
export const upsertRegionAssignmentFactory =
(deps: { db: Knex }): UpsertRegionAssignment =>
async (params) => {
const { workspaceId, regionKey } = params
const [row] = await tables
.workspaceRegions(deps.db)
.insert({ workspaceId, regionKey }, '*')
.onConflict(['workspaceId', 'regionKey'])
.merge()
return row
}
export const getDefaultRegionFactory =
(deps: { db: Knex }): GetDefaultRegion =>
async (params) => {
const { workspaceId } = params
const row = await tables
.regions(deps.db)
.select<RegionRecord>(Regions.cols)
.join(WorkspaceRegions.name, WorkspaceRegions.col.regionKey, Regions.col.key)
.where({ [WorkspaceRegions.col.workspaceId]: workspaceId })
.first()
return row
}