c382064585
* 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
47 lines
1.4 KiB
TypeScript
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
|
|
}
|