diff --git a/packages/backend/server/src/core/user/index.ts b/packages/backend/server/src/core/user/index.ts index da48739598241..e130d325fd9cb 100644 --- a/packages/backend/server/src/core/user/index.ts +++ b/packages/backend/server/src/core/user/index.ts @@ -2,12 +2,12 @@ import { Module } from '@nestjs/common'; import { StorageModule } from '../storage'; import { UserAvatarController } from './controller'; -import { UserResolver } from './resolver'; +import { UserManagementResolver, UserResolver } from './resolver'; import { UserService } from './service'; @Module({ imports: [StorageModule], - providers: [UserResolver, UserService], + providers: [UserResolver, UserService, UserManagementResolver], controllers: [UserAvatarController], exports: [UserService], }) diff --git a/packages/backend/server/src/core/user/resolver.ts b/packages/backend/server/src/core/user/resolver.ts index 86795ab9a84ab..88d3b06762453 100644 --- a/packages/backend/server/src/core/user/resolver.ts +++ b/packages/backend/server/src/core/user/resolver.ts @@ -13,8 +13,12 @@ import { PrismaClient } from '@prisma/client'; import GraphQLUpload from 'graphql-upload/GraphQLUpload.mjs'; import { isNil, omitBy } from 'lodash-es'; -import type { Config, CryptoHelper, FileUpload } from '../../fundamentals'; -import { Throttle } from '../../fundamentals'; +import { + Config, + CryptoHelper, + type FileUpload, + Throttle, +} from '../../fundamentals'; import { CurrentUser } from '../auth/current-user'; import { Public } from '../auth/guard'; import { sessionUser } from '../auth/service'; @@ -158,9 +162,6 @@ class CreateUserInput { @Field(() => String, { nullable: true }) password!: string | null; - - @Field(() => Boolean, { nullable: true, defaultValue: true }) - requireEmailVerification!: boolean; } @Admin() diff --git a/packages/backend/server/src/schema.gql b/packages/backend/server/src/schema.gql index 0e3ce5f07ec31..41667a30ecb84 100644 --- a/packages/backend/server/src/schema.gql +++ b/packages/backend/server/src/schema.gql @@ -108,6 +108,12 @@ input CreateCopilotPromptInput { name: String! } +input CreateUserInput { + email: String! + name: String + password: String +} + type CredentialsRequirementType { password: PasswordLimitsType! } @@ -233,6 +239,11 @@ type LimitedUserType { hasPassword: Boolean } +input ListUserInput { + first: Int = 20 + skip: Int = 0 +} + type Mutation { acceptInviteById(inviteId: String!, sendAcceptMail: Boolean, workspaceId: String!): Boolean! addAdminister(email: String!): Boolean! @@ -260,10 +271,16 @@ type Mutation { """Create a stripe customer portal to manage payment methods""" createCustomerPortal: String! + """Create a new user""" + createUser(input: CreateUserInput!): UserType! + """Create a new workspace""" createWorkspace(init: Upload): WorkspaceType! deleteAccount: DeleteAccount! deleteBlob(hash: String!, workspaceId: String!): Boolean! + + """Delete a user account""" + deleteUser(id: String!): DeleteAccount! deleteWorkspace(id: String!): Boolean! invite(email: String!, permission: Permission!, sendInviteMail: Boolean, workspaceId: String!): String! leaveWorkspace(sendLeaveMail: Boolean, workspaceId: String!, workspaceName: String!): Boolean! @@ -362,6 +379,12 @@ type Query { """Get user by email""" user(email: String!): UserOrLimitedUser + """Get user by id""" + userById(id: String!): UserType! + + """List registered users""" + users(filter: ListUserInput!): [UserType!]! + """Get workspace by id""" workspace(id: String!): WorkspaceType!