feat(server): import users (#10762)

close CLOUD-167
This commit is contained in:
forehalo
2025-03-12 02:52:19 +00:00
parent ea72599bde
commit 50da76d4af
3 changed files with 69 additions and 1 deletions

View File

@@ -1,9 +1,11 @@
import {
Args,
createUnionType,
Field,
InputType,
Int,
Mutation,
ObjectType,
Query,
Resolver,
} from '@nestjs/graphql';
@@ -168,9 +170,29 @@ class CreateUserInput {
email!: string;
@Field(() => String, { nullable: true })
name!: string | null;
name?: string;
}
@InputType()
class ImportUsersInput {
@Field(() => [CreateUserInput])
users!: CreateUserInput[];
}
@ObjectType()
class UserImportFailedType {
@Field(() => String)
email!: string;
@Field(() => String)
error!: string;
}
const UserImportResultType = createUnionType({
name: 'UserImportResultType',
types: () => [UserType, UserImportFailedType],
});
@Admin()
@Resolver(() => UserType)
export class UserManagementResolver {
@@ -245,6 +267,27 @@ export class UserManagementResolver {
return this.getUser(id);
}
@Mutation(() => [UserImportResultType], {
description: 'import users',
})
async importUsers(
@Args({ name: 'input', type: () => ImportUsersInput })
input: ImportUsersInput
): Promise<(typeof UserImportResultType)[]> {
const results = await this.models.user.importUsers(input.users);
return results.map((result, i) => {
if (result.status === 'fulfilled') {
return sessionUser(result.value);
} else {
return {
email: input.users[i].email,
error: result.reason.message,
};
}
});
}
@Mutation(() => DeleteAccount, {
description: 'Delete a user account',
})