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

@ -4,6 +4,7 @@ import com.mfsys.aconnect.usermanagement.model.User;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional; import java.util.Optional;
@Repository @Repository
@ -11,4 +12,6 @@ public interface UserRepository extends JpaRepository<User, String> {
Optional<User> findByUserIdAndIsActiveTrue(String userId); Optional<User> findByUserIdAndIsActiveTrue(String userId);
boolean existsByUserId(String userId); boolean existsByUserId(String userId);
boolean existsByEmail(String email); 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.EmailAlreadyExistException;
import com.mfsys.aconnect.usermanagement.exceptions.OldPasswordNotMatch; import com.mfsys.aconnect.usermanagement.exceptions.OldPasswordNotMatch;
import com.mfsys.aconnect.usermanagement.exceptions.UsernameAlreadyExistException; import com.mfsys.aconnect.usermanagement.exceptions.UsernameAlreadyExistException;
import com.mfsys.aconnect.usermanagement.model.Role;
import com.mfsys.common.configuration.service.PasswordEncryptionService; import com.mfsys.common.configuration.service.PasswordEncryptionService;
import com.mfsys.aconnect.usermanagement.dto.UserDTOs; import com.mfsys.aconnect.usermanagement.dto.UserDTOs;
import com.mfsys.aconnect.usermanagement.model.User; import com.mfsys.aconnect.usermanagement.model.User;
@ -72,6 +73,7 @@ public class UserService {
public List<UserDTOs.UserResponse> getAllUsers() { public List<UserDTOs.UserResponse> getAllUsers() {
return userRepository.findAll().stream() return userRepository.findAll().stream()
.filter(user -> user.getRole() != Role.ADMIN)
.map(this::mapToResponseDTO) .map(this::mapToResponseDTO)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@ -96,10 +98,10 @@ public class UserService {
@Transactional @Transactional
public void deleteUser(String userId) { public void deleteUser(String userId) {
if (!userRepository.existsById(userId)) { User user = userRepository.findById(userId).orElseThrow();
throw new EntityNotFoundException("User not found with ID: " + userId); user.setDeleted(true);
} user.setActive(false);
userRepository.deleteById(userId); userRepository.save(user);
} }

Loading…
Cancel
Save