feat(workspaces): add repository function implementations

Co-authored-by: Charles Driesler <chuck@speckle.systems>
This commit is contained in:
Gergő Jedlicska
2024-07-04 14:46:48 +02:00
committed by GitHub
parent 8ba0b09f45
commit 28ce7c757c
10 changed files with 201 additions and 27 deletions
@@ -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'])
}