Implement soft delete for User entity

Added an isDeleted field to the User model and updated the deleteUser method in UserService to perform a soft delete by setting isDeleted to true and isActive to false. Updated UserRepository with methods to filter out deleted users and adjusted getAllUsers to exclude admin roles.
dev-pending-20-01-2026-naeem
Naeem Ullah 2 weeks ago
parent 72180528de
commit d304477b8c

@ -2,9 +2,7 @@ package com.mfsys.aconnect.usermanagement.model;
import com.mfsys.common.configuration.constant.FieldNameLength;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.*;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
@ -15,6 +13,8 @@ import java.util.Set;
@Entity(name = "users")
@Table(name = "users")
@Data
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {
@ -48,6 +48,9 @@ public class User {
@Column(name = "is_active", columnDefinition = FieldNameLength.BOOLEAN_BIT)
private boolean isActive = true;
@Column(name = "is_deleted", columnDefinition = FieldNameLength.BOOLEAN_BIT)
private boolean isDeleted = false;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;

@ -4,6 +4,7 @@ import com.mfsys.aconnect.usermanagement.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
@ -11,4 +12,6 @@ public interface UserRepository extends JpaRepository<User, String> {
Optional<User> findByUserIdAndIsActiveTrue(String userId);
boolean existsByUserId(String userId);
boolean existsByEmail(String email);
List<User> findByIsDeletedFalse();
Optional<User> findByUserIdAndIsDeletedFalse(String userId);
}

@ -5,6 +5,7 @@ import com.mfsys.aconnect.security.dto.ResetPasswordDTO;
import com.mfsys.aconnect.usermanagement.exceptions.EmailAlreadyExistException;
import com.mfsys.aconnect.usermanagement.exceptions.OldPasswordNotMatch;
import com.mfsys.aconnect.usermanagement.exceptions.UsernameAlreadyExistException;
import com.mfsys.aconnect.usermanagement.model.Role;
import com.mfsys.common.configuration.service.PasswordEncryptionService;
import com.mfsys.aconnect.usermanagement.dto.UserDTOs;
import com.mfsys.aconnect.usermanagement.model.User;
@ -72,6 +73,7 @@ public class UserService {
public List<UserDTOs.UserResponse> getAllUsers() {
return userRepository.findAll().stream()
.filter(user -> user.getRole() != Role.ADMIN)
.map(this::mapToResponseDTO)
.collect(Collectors.toList());
}
@ -96,10 +98,10 @@ public class UserService {
@Transactional
public void deleteUser(String userId) {
if (!userRepository.existsById(userId)) {
throw new EntityNotFoundException("User not found with ID: " + userId);
}
userRepository.deleteById(userId);
User user = userRepository.findById(userId).orElseThrow();
user.setDeleted(true);
user.setActive(false);
userRepository.save(user);
}

Loading…
Cancel
Save