6d3ba0de22
* chore(server): errors for database append additional context * Refactor
40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import { GetRoles, UpsertRole } from '@/modules/shared/domain/rolesAndScopes/operations'
|
|
import { UserRole } from '@/modules/shared/domain/rolesAndScopes/types'
|
|
import { Knex } from 'knex'
|
|
import { DatabaseError } from '@/modules/shared/errors'
|
|
import { UserRoles } from '@/modules/core/dbSchema'
|
|
|
|
let roles: UserRole[]
|
|
|
|
const tables = {
|
|
userRoles: (db: Knex) => db<UserRole>(UserRoles.name)
|
|
}
|
|
|
|
export const getRolesFactory =
|
|
({ db }: { db: Knex }): GetRoles =>
|
|
async () => {
|
|
if (roles) return roles
|
|
try {
|
|
roles = await tables.userRoles(db).select('*')
|
|
} catch (e) {
|
|
if (e instanceof Error)
|
|
throw new DatabaseError(
|
|
'Database error occurred while attempting to get Roles',
|
|
db,
|
|
{ cause: e }
|
|
)
|
|
throw e
|
|
}
|
|
return roles
|
|
}
|
|
|
|
export const registerOrUpdateRole =
|
|
({ db }: { db: Knex }): UpsertRole =>
|
|
async ({ role }) => {
|
|
await tables
|
|
.userRoles(db)
|
|
.insert(role)
|
|
.onConflict('name')
|
|
.merge(['weight', 'description', 'resourceTarget'])
|
|
}
|