Fix workspace/user deletion (#2648)
* Fix workspace/user deletion * remove logs * add defaultWorkspace check
This commit is contained in:
@ -159,10 +159,18 @@ export class AuthService {
|
||||
|
||||
assert(user, "This user doesn't exist", NotFoundException);
|
||||
|
||||
assert(
|
||||
user.defaultWorkspace,
|
||||
'User has no default workspace',
|
||||
NotFoundException,
|
||||
);
|
||||
|
||||
// passwordHash is hidden for security reasons
|
||||
user.passwordHash = '';
|
||||
user.workspaceMember = await this.userService.loadWorkspaceMember(user);
|
||||
|
||||
console.log(user.workspaceMember);
|
||||
|
||||
const accessToken = await this.tokenService.generateAccessToken(user.id);
|
||||
const refreshToken = await this.tokenService.generateRefreshToken(user.id);
|
||||
|
||||
|
||||
@ -23,7 +23,9 @@ export class RefreshToken {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@ManyToOne(() => User, (user) => user.refreshTokens)
|
||||
@ManyToOne(() => User, (user) => user.refreshTokens, {
|
||||
onDelete: 'CASCADE',
|
||||
})
|
||||
@JoinColumn({ name: 'userId' })
|
||||
user: User;
|
||||
|
||||
|
||||
@ -70,16 +70,14 @@ export class UserService extends TypeOrmQueryService<User> {
|
||||
);
|
||||
}
|
||||
|
||||
async deleteUser({
|
||||
workspaceId: _workspaceId,
|
||||
userId,
|
||||
}: {
|
||||
workspaceId: string;
|
||||
userId: string;
|
||||
}) {
|
||||
const user = await this.userRepository.findBy({ id: userId });
|
||||
async deleteUser(userId: string): Promise<User> {
|
||||
const user = await this.userRepository.findOneBy({
|
||||
id: userId,
|
||||
});
|
||||
assert(user, 'User not found');
|
||||
|
||||
await this.userRepository.delete(user.id);
|
||||
|
||||
return user;
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,10 +63,14 @@ export class User {
|
||||
deletedAt: Date;
|
||||
|
||||
@Field(() => Workspace, { nullable: false })
|
||||
@ManyToOne(() => Workspace, (workspace) => workspace.users)
|
||||
@ManyToOne(() => Workspace, (workspace) => workspace.users, {
|
||||
onDelete: 'SET NULL',
|
||||
})
|
||||
defaultWorkspace: Workspace;
|
||||
|
||||
@OneToMany(() => RefreshToken, (refreshToken) => refreshToken.user)
|
||||
@OneToMany(() => RefreshToken, (refreshToken) => refreshToken.user, {
|
||||
cascade: true,
|
||||
})
|
||||
refreshTokens: RefreshToken[];
|
||||
|
||||
@Field(() => UserWorkspaceMember, { nullable: false })
|
||||
|
||||
@ -19,11 +19,9 @@ import { AuthUser } from 'src/decorators/auth-user.decorator';
|
||||
import { EnvironmentService } from 'src/integrations/environment/environment.service';
|
||||
import { streamToBuffer } from 'src/utils/stream-to-buffer';
|
||||
import { FileUploadService } from 'src/core/file/services/file-upload.service';
|
||||
import { AuthWorkspace } from 'src/decorators/auth-workspace.decorator';
|
||||
import { assert } from 'src/utils/assert';
|
||||
import { JwtAuthGuard } from 'src/guards/jwt.auth.guard';
|
||||
import { User } from 'src/core/user/user.entity';
|
||||
import { Workspace } from 'src/core/workspace/workspace.entity';
|
||||
import { UserWorkspaceMember } from 'src/core/user/dtos/workspace-member.dto';
|
||||
|
||||
import { UserService } from './services/user.service';
|
||||
@ -96,10 +94,7 @@ export class UserResolver {
|
||||
}
|
||||
|
||||
@Mutation(() => User)
|
||||
async deleteUser(
|
||||
@AuthUser() { id: userId }: User,
|
||||
@AuthWorkspace() { id: workspaceId }: Workspace,
|
||||
) {
|
||||
return this.userService.deleteUser({ userId, workspaceId });
|
||||
async deleteUser(@AuthUser() { id: userId }: User) {
|
||||
return this.userService.deleteUser(userId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,6 +22,7 @@ export class WorkspaceService extends TypeOrmQueryService<Workspace> {
|
||||
assert(workspace, 'Workspace not found');
|
||||
|
||||
await this.workspaceManagerService.delete(id);
|
||||
await this.workspaceRepository.delete(id);
|
||||
|
||||
return workspace;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user