Skip to content

Commit

Permalink
Merge pull request #141 from Yanabada/feature/138
Browse files Browse the repository at this point in the history
알림 개별삭제 리팩토링 및 알림 전체 삭제 API 구현
  • Loading branch information
Programmer-may authored Jan 23, 2024
2 parents 8b39885 + 5a5a56b commit 3b64320
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package kr.co.fastcampus.yanabada.domain.notification.controller;

import java.util.List;
import kr.co.fastcampus.yanabada.common.response.ResponseBody;
import kr.co.fastcampus.yanabada.common.security.PrincipalDetails;
import kr.co.fastcampus.yanabada.domain.notification.dto.response.NotificationIdResponse;
import kr.co.fastcampus.yanabada.domain.notification.dto.request.NotificationDeleteRequest;
import kr.co.fastcampus.yanabada.domain.notification.dto.response.NotificationPageResponse;
import kr.co.fastcampus.yanabada.domain.notification.service.NotificationService;
import lombok.RequiredArgsConstructor;
Expand All @@ -13,7 +14,7 @@
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

Expand All @@ -36,13 +37,20 @@ public ResponseBody<NotificationPageResponse> getNotifications(
);
}

@DeleteMapping("/notificationId")
public ResponseBody<NotificationIdResponse> deleteNotification(
@DeleteMapping
public ResponseBody<Void> deleteNotifications(
@AuthenticationPrincipal PrincipalDetails principalDetails,
@PathVariable("notificationId") Long notificationId
@RequestBody List<NotificationDeleteRequest> requests
) {
return ResponseBody.ok(
notificationService.deleteNotification(principalDetails.id(), notificationId)
);
notificationService.deleteNotifications(principalDetails.id(), requests);
return ResponseBody.ok();
}

@DeleteMapping("/all")
public ResponseBody<Void> deleteAllNotifications(
@AuthenticationPrincipal PrincipalDetails principalDetails
) {
notificationService.deleteAllNotifications(principalDetails.id());
return ResponseBody.ok();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package kr.co.fastcampus.yanabada.domain.notification.dto.request;

public record NotificationDeleteRequest(
Long id
) {
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ public interface NotificationHistoryRepository extends JpaRepository<Notificatio
default NotificationHistory getNotificationHistory(Long id) {
return findById(id).orElseThrow(NotificationNotFoundException::new);
}

void deleteAllByReceiver(Member receiver);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Objects;
import kr.co.fastcampus.yanabada.common.exception.AccessForbiddenException;
import kr.co.fastcampus.yanabada.common.exception.JsonProcessFailedException;
Expand All @@ -30,7 +31,7 @@
import kr.co.fastcampus.yanabada.domain.member.repository.MemberRepository;
import kr.co.fastcampus.yanabada.domain.notification.dto.ChatNotificationDto;
import kr.co.fastcampus.yanabada.domain.notification.dto.TradeNotificationDto;
import kr.co.fastcampus.yanabada.domain.notification.dto.response.NotificationIdResponse;
import kr.co.fastcampus.yanabada.domain.notification.dto.request.NotificationDeleteRequest;
import kr.co.fastcampus.yanabada.domain.notification.dto.response.NotificationInfoResponse;
import kr.co.fastcampus.yanabada.domain.notification.dto.response.NotificationPageResponse;
import kr.co.fastcampus.yanabada.domain.notification.entity.NotificationHistory;
Expand Down Expand Up @@ -244,13 +245,16 @@ private String convertJsonToString(String key, String content) {
}

@Transactional
public NotificationIdResponse deleteNotification(Long memberId, Long notificationId) {
public void deleteNotifications(
Long memberId, List<NotificationDeleteRequest> requests
) {
Member member = memberRepository.getMember(memberId);
NotificationHistory notificationHistory =
notificationHistoryRepository.getNotificationHistory(notificationId);
validateMemberAndNotificationHistory(member, notificationHistory);
notificationHistoryRepository.delete(notificationHistory);
return NotificationIdResponse.from(notificationHistory);
requests.stream()
.map(request -> notificationHistoryRepository.getNotificationHistory(request.id()))
.forEach(notificationHistory -> {
validateMemberAndNotificationHistory(member, notificationHistory);
notificationHistoryRepository.delete(notificationHistory);
});
}

private void validateMemberAndNotificationHistory(
Expand All @@ -260,4 +264,10 @@ private void validateMemberAndNotificationHistory(
throw new AccessForbiddenException();
}
}

@Transactional
public void deleteAllNotifications(Long memberId) {
Member member = memberRepository.getMember(memberId);
notificationHistoryRepository.deleteAllByReceiver(member);
}
}

0 comments on commit 3b64320

Please sign in to comment.