Recover
We should also be able to recover soft-deleted data.
Let's return to the UsersController to create a route for recovering a user that was soft-deleted.
@Patch(':id/recover')
recover(@Param() { id }: IdDto) {
return this.usersService.recover(id);
}In the UsersService, we shall then create the recover() method too. Here, we'll first find a user in a very similar fashion to the findOne() method, with the sole difference of using the withDeleted option to actually find the soft-deleted record. After that, check if the user exists and if it's actually soft-deleted. Finally, recover it.
async recover(id: number) {
const user = await this.usersRepository.findOne({
where: { id },
relations: {
orders: {
items: true,
payment: true,
},
},
withDeleted: true,
});
if (!user) {
throw new NotFoundException('User not found');
}
if (!user.registryDates.deletedAt) {
throw new ConflictException('User not deleted');
}
return this.usersRepository.recover(user);
}As a minor change, we could go back to the User entity and have a get field to tell if the user has been soft-deleted, by using a double negation operator, like so:
get isDeleted() {
return !!this.registryDates.deletedAt;
}And then, use it when checking if the user has been soft-deleted. With this, we now have soft delete functionality in our system.
Commit - Applying soft delete
Last updated