Remove duplicate register request notifications

This commit is contained in:
Tim
2025-07-15 12:50:11 +08:00
parent 5b886420c5
commit 4036bd25a5
4 changed files with 38 additions and 12 deletions

View File

@@ -9,7 +9,6 @@ import com.openisle.service.GoogleAuthService;
import com.openisle.service.RegisterModeService;
import com.openisle.service.NotificationService;
import com.openisle.model.RegisterMode;
import com.openisle.model.NotificationType;
import com.openisle.repository.UserRepository;
import lombok.Data;
import lombok.RequiredArgsConstructor;
@@ -50,10 +49,7 @@ public class AuthController {
req.getUsername(), req.getEmail(), req.getPassword(), req.getReason(), registerModeService.getRegisterMode());
emailService.sendEmail(user.getEmail(), "Verification Code", "Your verification code is " + user.getVerificationCode());
if (!user.isApproved()) {
for (User admin : userRepository.findByRole(com.openisle.model.Role.ADMIN)) {
notificationService.createNotification(admin, NotificationType.REGISTER_REQUEST, null, null,
null, user, null, user.getRegisterReason());
}
notificationService.createRegisterRequestNotifications(user, user.getRegisterReason());
}
return ResponseEntity.ok(Map.of("message", "Verification code sent"));
}
@@ -98,11 +94,8 @@ public class AuthController {
if (user.isPresent()) {
if (!user.get().isApproved()) {
if (req.getReason() != null && !req.getReason().isEmpty()) {
// do not send empty notifition (while try login)
for (User admin : userRepository.findByRole(com.openisle.model.Role.ADMIN)) {
notificationService.createNotification(admin, NotificationType.REGISTER_REQUEST, null, null,
null, user.get(), null, req.getReason());
}
// do not send empty notification (while try login)
notificationService.createRegisterRequestNotifications(user.get(), req.getReason());
}
return ResponseEntity.badRequest().body(Map.of(
"error", "Account awaiting approval",

View File

@@ -4,6 +4,7 @@ import com.openisle.model.Notification;
import com.openisle.model.User;
import com.openisle.model.Post;
import com.openisle.model.Comment;
import com.openisle.model.NotificationType;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
@@ -15,4 +16,6 @@ public interface NotificationRepository extends JpaRepository<Notification, Long
long countByUserAndRead(User user, boolean read);
List<Notification> findByPost(Post post);
List<Notification> findByComment(Comment comment);
void deleteByTypeAndFromUser(NotificationType type, User fromUser);
}

View File

@@ -33,6 +33,18 @@ public class NotificationService {
return notificationRepository.save(n);
}
/**
* Create notifications for all admins when a user submits a register request.
* Old register request notifications from the same applicant are removed first.
*/
public void createRegisterRequestNotifications(User applicant, String reason) {
notificationRepository.deleteByTypeAndFromUser(NotificationType.REGISTER_REQUEST, applicant);
for (User admin : userRepository.findByRole(Role.ADMIN)) {
createNotification(admin, NotificationType.REGISTER_REQUEST, null, null,
null, applicant, null, reason);
}
}
public List<Notification> listNotifications(String username, Boolean read) {
User user = userRepository.findByUsername(username)
.orElseThrow(() -> new com.openisle.exception.NotFoundException("User not found"));