chore(server): core IoC #67 - remaining users repo
This commit is contained in:
@@ -5,7 +5,12 @@ import {
|
||||
} from '@/modules/core/domain/users/types'
|
||||
import { UserUpdateInput } from '@/modules/core/graph/generated/graphql'
|
||||
import { ServerAclRecord, UserWithRole } from '@/modules/core/helpers/types'
|
||||
import { Nullable, NullableKeysToOptional, ServerRoles } from '@speckle/shared'
|
||||
import {
|
||||
Nullable,
|
||||
NullableKeysToOptional,
|
||||
Optional,
|
||||
ServerRoles
|
||||
} from '@speckle/shared'
|
||||
|
||||
export type GetUserParams = Partial<{
|
||||
/**
|
||||
@@ -80,6 +85,10 @@ export type UpdateUserServerRole = (params: {
|
||||
|
||||
export type MarkUserAsVerified = (email: string) => Promise<boolean>
|
||||
|
||||
export type MarkOnboardingComplete = (userId: string) => Promise<boolean>
|
||||
|
||||
export type GetFirstAdmin = () => Promise<Optional<User>>
|
||||
|
||||
export type LegacyGetUserByEmail = (params: {
|
||||
email: string
|
||||
}) => Promise<Nullable<Omit<User, 'passwordDigest'>>>
|
||||
|
||||
@@ -7,7 +7,6 @@ const {
|
||||
} = require('@/modules/core/services/users/adminUsersListService')
|
||||
const { Roles, Scopes } = require('@speckle/shared')
|
||||
const {
|
||||
markOnboardingComplete,
|
||||
legacyGetUserFactory,
|
||||
legacyGetUserByEmailFactory,
|
||||
getUserFactory,
|
||||
@@ -16,7 +15,8 @@ const {
|
||||
deleteUserRecordFactory,
|
||||
getUserRoleFactory,
|
||||
updateUserServerRoleFactory,
|
||||
searchUsersFactory
|
||||
searchUsersFactory,
|
||||
markOnboardingCompleteFactory
|
||||
} = require('@/modules/core/repositories/users')
|
||||
const { UsersMeta } = require('@/modules/core/dbSchema')
|
||||
const { getServerInfo } = require('@/modules/core/services/generic')
|
||||
@@ -69,6 +69,7 @@ const changeUserRole = changeUserRoleFactory({
|
||||
updateUserServerRole: updateUserServerRoleFactory({ db })
|
||||
})
|
||||
const searchUsers = searchUsersFactory({ db })
|
||||
const markOnboardingComplete = markOnboardingCompleteFactory({ db })
|
||||
|
||||
/** @type {import('@/modules/core/graph/generated/graphql').Resolvers} */
|
||||
module.exports = {
|
||||
|
||||
@@ -7,13 +7,13 @@ import { UserValidationError } from '@/modules/core/errors/user'
|
||||
import { Knex } from 'knex'
|
||||
import { Roles, ServerRoles } from '@speckle/shared'
|
||||
import { updateUserEmailFactory } from '@/modules/core/repositories/userEmails'
|
||||
import { db } from '@/db/knex'
|
||||
import { markUserEmailAsVerifiedFactory } from '@/modules/core/services/users/emailVerification'
|
||||
import { UserWithOptionalRole } from '@/modules/core/domain/users/types'
|
||||
import {
|
||||
CountAdminUsers,
|
||||
CountUsers,
|
||||
DeleteUserRecord,
|
||||
GetFirstAdmin,
|
||||
GetUser,
|
||||
GetUserByEmail,
|
||||
GetUserParams,
|
||||
@@ -25,6 +25,7 @@ import {
|
||||
LegacyGetUser,
|
||||
LegacyGetUserByEmail,
|
||||
ListPaginatedUsersPage,
|
||||
MarkOnboardingComplete,
|
||||
MarkUserAsVerified,
|
||||
SearchLimitedUsers,
|
||||
StoreUser,
|
||||
@@ -214,14 +215,16 @@ export const markUserAsVerifiedFactory =
|
||||
return !!(usersUpdate || userEmailsUpdate)
|
||||
}
|
||||
|
||||
export async function markOnboardingComplete(userId: string) {
|
||||
if (!userId) return false
|
||||
export const markOnboardingCompleteFactory =
|
||||
(deps: { db: Knex }): MarkOnboardingComplete =>
|
||||
async (userId: string) => {
|
||||
if (!userId) return false
|
||||
|
||||
const meta = metaHelpers(Users, db)
|
||||
const newMeta = await meta.set(userId, 'isOnboardingFinished', true)
|
||||
const meta = metaHelpers(Users, deps.db)
|
||||
const newMeta = await meta.set(userId, 'isOnboardingFinished', true)
|
||||
|
||||
return !!newMeta.value
|
||||
}
|
||||
return !!newMeta.value
|
||||
}
|
||||
|
||||
const cleanInputRecord = (
|
||||
update: Partial<UserRecord & { password?: string }>
|
||||
@@ -272,14 +275,17 @@ export const updateUserFactory =
|
||||
return newUser as Nullable<UserRecord>
|
||||
}
|
||||
|
||||
export async function getFirstAdmin() {
|
||||
const q = Users.knex()
|
||||
.select<UserRecord[]>(Users.cols)
|
||||
.innerJoin(ServerAcl.name, ServerAcl.col.userId, Users.col.id)
|
||||
.where(ServerAcl.col.role, Roles.Server.Admin)
|
||||
export const getFirstAdminFactory =
|
||||
(deps: { db: Knex }): GetFirstAdmin =>
|
||||
async () => {
|
||||
const q = tables
|
||||
.users(deps.db)
|
||||
.select<UserRecord[]>(Users.cols)
|
||||
.innerJoin(ServerAcl.name, ServerAcl.col.userId, Users.col.id)
|
||||
.where(ServerAcl.col.role, Roles.Server.Admin)
|
||||
|
||||
return await q.first()
|
||||
}
|
||||
return await q.first()
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use getUser instead
|
||||
|
||||
@@ -52,7 +52,7 @@ import {
|
||||
markOnboardingBaseStreamFactory
|
||||
} from '@/modules/core/repositories/streams'
|
||||
import {
|
||||
getFirstAdmin,
|
||||
getFirstAdminFactory,
|
||||
getUserFactory,
|
||||
getUsersFactory
|
||||
} from '@/modules/core/repositories/users'
|
||||
@@ -172,7 +172,7 @@ const crossServerSyncModule: SpeckleModule = {
|
||||
})
|
||||
const ensureOnboardingProject = ensureOnboardingProjectFactory({
|
||||
getOnboardingBaseStream: getOnboardingBaseStreamFactory({ db }),
|
||||
getFirstAdmin,
|
||||
getFirstAdmin: getFirstAdminFactory({ db }),
|
||||
downloadProject: downloadProjectFactory({
|
||||
downloadCommit: downloadCommitFactory({
|
||||
getStream,
|
||||
|
||||
@@ -3,7 +3,7 @@ import {
|
||||
GetOnboardingBaseStream,
|
||||
MarkOnboardingBaseStream
|
||||
} from '@/modules/core/domain/streams/operations'
|
||||
import { getFirstAdmin } from '@/modules/core/repositories/users'
|
||||
import { GetFirstAdmin } from '@/modules/core/domain/users/operations'
|
||||
import {
|
||||
DownloadProject,
|
||||
EnsureOnboardingProject,
|
||||
@@ -39,7 +39,7 @@ export const getOnboardingBaseProjectFactory =
|
||||
export const ensureOnboardingProjectFactory =
|
||||
(deps: {
|
||||
getOnboardingBaseStream: GetOnboardingBaseStream
|
||||
getFirstAdmin: typeof getFirstAdmin
|
||||
getFirstAdmin: GetFirstAdmin
|
||||
downloadProject: DownloadProject
|
||||
markOnboardingBaseStream: MarkOnboardingBaseStream
|
||||
}): EnsureOnboardingProject =>
|
||||
|
||||
Reference in New Issue
Block a user