Files
speckle-server/packages/server/modules/shared/repositories/roles.ts
T
Iain Sproat 6715a030ec fix(server/auth): database errors result in 500 status code (#2731)
* fix(server/auth): database errors result in 500 status code
- previously 401 were returned which resulted in connectors not retrying

* log as info, not error. Handle errors while validating read

* Unknown errors should continue to be bubbled up the stack
2024-08-22 15:39:37 +02:00

33 lines
899 B
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'
let roles: UserRole[]
export const getRolesFactory =
({ db }: { db: Knex }): GetRoles =>
async () => {
if (roles) return roles
try {
roles = await db('user_roles').select('*')
} catch (e) {
if (e instanceof Error)
throw new DatabaseError(
'Database error occurred while attempting to get Roles',
{ cause: e }
)
throw e
}
return roles
}
export const registerOrUpdateRole =
({ db }: { db: Knex }): UpsertRole =>
async ({ role }) => {
await db('user_roles')
.insert(role)
.onConflict('name')
.merge(['weight', 'description', 'resourceTarget'])
}