feat(workspaces): add repository function implementations
Co-authored-by: Charles Driesler <chuck@speckle.systems>
This commit is contained in:
@@ -1,24 +1,53 @@
|
||||
import { Workspace, WorkspaceAcl } from '@/modules/workspaces/domain/types'
|
||||
import {
|
||||
StoreWorkspace,
|
||||
GetWorkspace,
|
||||
GetWorkspaceRole,
|
||||
UpsertWorkspace,
|
||||
UpsertWorkspaceRole
|
||||
} from '@/modules/workspaces/domain/operations'
|
||||
import { Workspace, WorkspaceAcl } from '@/modules/workspaces/domain/types'
|
||||
import { Roles } from '@speckle/shared'
|
||||
import { Knex } from 'knex'
|
||||
import { Roles } from '@speckle/shared'
|
||||
|
||||
const tables = {
|
||||
workspaces: (db: Knex) => db<Workspace>('workspaces'),
|
||||
workspacesAcl: (db: Knex) => db<WorkspaceAcl>('workspace_acl')
|
||||
}
|
||||
|
||||
export const storeWorkspaceFactory =
|
||||
({ db }: { db: Knex }): StoreWorkspace =>
|
||||
async ({ workspace }) => {
|
||||
await tables.workspaces(db).insert(workspace)
|
||||
export const getWorkspaceFactory =
|
||||
({ db }: { db: Knex }): GetWorkspace =>
|
||||
async ({ workspaceId }) => {
|
||||
const workspace = await tables
|
||||
.workspaces(db)
|
||||
.select('*')
|
||||
.where('id', '=', workspaceId)
|
||||
.first()
|
||||
|
||||
return workspace || null
|
||||
}
|
||||
|
||||
// TODO: Authorise requester for given role change operation?
|
||||
export const upsertWorkspaceRole =
|
||||
export const upsertWorkspaceFactory =
|
||||
({ db }: { db: Knex }): UpsertWorkspace =>
|
||||
async ({ workspace }) => {
|
||||
await tables
|
||||
.workspaces(db)
|
||||
.insert(workspace)
|
||||
.onConflict('id')
|
||||
.merge(['description', 'logoUrl', 'name', 'updatedAt'])
|
||||
}
|
||||
|
||||
export const getWorkspaceRoleFactory =
|
||||
({ db }: { db: Knex }): GetWorkspaceRole =>
|
||||
async ({ userId, workspaceId }) => {
|
||||
const acl = await tables
|
||||
.workspacesAcl(db)
|
||||
.select('*')
|
||||
.where({ userId, workspaceId })
|
||||
.first()
|
||||
|
||||
return acl || null
|
||||
}
|
||||
|
||||
export const upsertWorkspaceRoleFactory =
|
||||
({ db }: { db: Knex }): UpsertWorkspaceRole =>
|
||||
async ({ userId, workspaceId, role }) => {
|
||||
const validRoles = Object.values(Roles.Workspace)
|
||||
@@ -26,5 +55,9 @@ export const upsertWorkspaceRole =
|
||||
throw new Error(`Unexpected workspace role provided: ${role}`)
|
||||
}
|
||||
|
||||
await tables.workspacesAcl(db).insert({ userId, workspaceId, role })
|
||||
await tables
|
||||
.workspacesAcl(db)
|
||||
.insert({ userId, workspaceId, role })
|
||||
.onConflict(['userId', 'workspaceId'])
|
||||
.merge(['role'])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user