Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package ku_rum.backend.domain.alarm.application;


import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import ku_rum.backend.domain.alarm.domain.Alarm;
import ku_rum.backend.domain.alarm.domain.AlarmCategory;
Expand Down Expand Up @@ -143,22 +146,39 @@ public GetAlarmUnreadResponse getAlarmUnreadResponse(CustomUserDetails userDetai
@Transactional
public PatchDisableAlarmResponse disableAlarm(CustomUserDetails userDetails, PatchDisableAlarmRequest request) {
User user = userService.getUser();
AlarmType alarmType = request.alarmType();
Optional<UserDisabledAlarm> optional = userDisabledAlarmRepository.findByUserAndAlarmType(user,
alarmType);

if (optional.isEmpty()) {
List<AlarmType> alarmTypes = request.alarmTypes();
List<UserDisabledAlarm> existingDisabledAlarms = userDisabledAlarmRepository.findByUserAndAlarmTypeIn(user,
alarmTypes);
Set<AlarmType> existingAlarmTypes = existingDisabledAlarms.stream()
.map(UserDisabledAlarm::getAlarmType)
.collect(Collectors.toSet());

List<UserDisabledAlarm> toCreate = new ArrayList<>();
List<UserDisabledAlarm> toDelete = new ArrayList<>();

for (AlarmType alarmType : alarmTypes) {
if (existingAlarmTypes.contains(alarmType)) {
existingDisabledAlarms.stream()
.filter(alarm -> alarm.getAlarmType().equals(alarmType))
.findFirst()
.ifPresent(toDelete::add);
continue;
}
UserDisabledAlarm userDisabledAlarm = UserDisabledAlarm.builder()
.user(user)
.alarmType(alarmType)
.build();
UserDisabledAlarm saveUserDisabledAlarm = userDisabledAlarmRepository.save(userDisabledAlarm);
return PatchDisableAlarmResponse.of(saveUserDisabledAlarm, true);
toCreate.add(userDisabledAlarm);
}

if (!toCreate.isEmpty()) {
userDisabledAlarmRepository.saveAll(toCreate);
}
if (!toDelete.isEmpty()) {
userDisabledAlarmRepository.deleteAll(toDelete);
}

UserDisabledAlarm userDisabledAlarm = optional.get();
userDisabledAlarmRepository.delete(userDisabledAlarm);
return PatchDisableAlarmResponse.of(userDisabledAlarm, false);
return PatchDisableAlarmResponse.of(user.getId(), toCreate, toDelete);
}

public GetAlarmDisableResponse findDisableAlarm(CustomUserDetails userDetails) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,7 @@ public interface UserDisabledAlarmRepository extends JpaRepository<UserDisabledA

Optional<UserDisabledAlarm> findByUserAndAlarmType(User user, AlarmType alarmType);

List<UserDisabledAlarm> findByUserAndAlarmTypeIn(User user, List<AlarmType> alarmTypes);

List<UserDisabledAlarm> findByUser(User user);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ku_rum.backend.domain.alarm.dto.request;

import java.util.List;
import ku_rum.backend.domain.alarm.domain.AlarmType;

public record PatchDisableAlarmRequest(AlarmType alarmType) {
public record PatchDisableAlarmRequest(List<AlarmType> alarmTypes) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ku_rum.backend.domain.alarm.dto.response;

import ku_rum.backend.domain.alarm.domain.AlarmType;
import ku_rum.backend.domain.alarm.domain.UserDisabledAlarm;

public record DisableAlarmDto(AlarmType alarmType, Boolean isDisabled) {
public static DisableAlarmDto of(UserDisabledAlarm userDisabledAlarm, boolean isDisabled) {
return new DisableAlarmDto(userDisabledAlarm.getAlarmType(), isDisabled);
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,25 @@
package ku_rum.backend.domain.alarm.dto.response;

import ku_rum.backend.domain.alarm.domain.AlarmType;
import java.util.ArrayList;
import java.util.List;
import ku_rum.backend.domain.alarm.domain.UserDisabledAlarm;

public record PatchDisableAlarmResponse(Long userId, AlarmType alarmType, Boolean isDisabled) {
public static PatchDisableAlarmResponse of(UserDisabledAlarm userDisabledAlarm, boolean isDisabled) {
return new PatchDisableAlarmResponse(userDisabledAlarm.getUser().getId(), userDisabledAlarm.getAlarmType(),
isDisabled);
public record PatchDisableAlarmResponse(Long userId, List<DisableAlarmDto> alarms) {
public static PatchDisableAlarmResponse of(Long userId, List<UserDisabledAlarm> toCreate,
List<UserDisabledAlarm> toDelete) {

List<DisableAlarmDto> createdAlarms = toCreate.stream()
.map(userDisabledAlarm -> DisableAlarmDto.of(userDisabledAlarm, true))
.toList();

List<DisableAlarmDto> deletedAlarms = toDelete.stream()
.map(userDisabledAlarm -> DisableAlarmDto.of(userDisabledAlarm, false))
.toList();

List<DisableAlarmDto> allAlarms = new ArrayList<>();
allAlarms.addAll(createdAlarms);
allAlarms.addAll(deletedAlarms);

return new PatchDisableAlarmResponse(userId, allAlarms);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import ku_rum.backend.domain.alarm.dto.request.PatchAlarmRequest;
import ku_rum.backend.domain.alarm.dto.request.PatchDisableAlarmRequest;
import ku_rum.backend.domain.alarm.dto.response.AlarmPaginationRequest;
import ku_rum.backend.domain.alarm.dto.response.DisableAlarmDto;
import ku_rum.backend.domain.alarm.dto.response.GetAlarmDisableResponse;
import ku_rum.backend.domain.alarm.dto.response.GetAlarmDto;
import ku_rum.backend.domain.alarm.dto.response.GetAlarmResponse;
Expand Down Expand Up @@ -201,10 +202,10 @@ void getUnreadAlarmsCount() throws Exception {
void patchDisableAlarm() throws Exception {

// given
PatchDisableAlarmResponse response = new PatchDisableAlarmResponse(1L, AlarmType.NEW_NOTICE,
Boolean.valueOf(true));
DisableAlarmDto disableAlarmDto = new DisableAlarmDto(AlarmType.NEW_NOTICE, true);
PatchDisableAlarmResponse response = new PatchDisableAlarmResponse(1L, List.of(disableAlarmDto));

PatchDisableAlarmRequest request = new PatchDisableAlarmRequest(AlarmType.NEW_NOTICE);
PatchDisableAlarmRequest request = new PatchDisableAlarmRequest(List.of(AlarmType.NEW_NOTICE));
given(alarmService.disableAlarm(any(), eq(request)))
.willReturn(response);

Expand All @@ -214,15 +215,15 @@ void patchDisableAlarm() throws Exception {
.contentType(MediaType.APPLICATION_JSON)
.content("""
{
"alarmType": "NEW_NOTICE"
"alarmTypes": ["NEW_NOTICE"]
}
"""))
// then
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.data.userId").value(1))
.andExpect(jsonPath("$.data.alarmType").value("NEW_NOTICE"))
.andExpect(jsonPath("$.data.isDisabled").value(true))
.andExpect(jsonPath("$.data.alarms[0].alarmType").value("NEW_NOTICE"))
.andExpect(jsonPath("$.data.alarms[0].isDisabled").value(true))
.andDo(restDocs.document(resource(
ResourceSnippetParameters.builder()
.tag("알림 조회 API")
Expand All @@ -235,8 +236,8 @@ void patchDisableAlarm() throws Exception {
fieldWithPath("status").description("응답 상태"),
fieldWithPath("message").description("응답 메시지"),
fieldWithPath("data.userId").description("유저 ID"),
fieldWithPath("data.alarmType").description("알람 타입"),
fieldWithPath("data.isDisabled").description("활성화 비활성화 여부")
fieldWithPath("data.alarms[].alarmType").description("알람 타입"),
fieldWithPath("data.alarms[].isDisabled").description("활성 여부")
)
.build()
)));
Expand All @@ -250,7 +251,6 @@ void getDisableAlarm() throws Exception {
GetAlarmDisableResponse response = new GetAlarmDisableResponse(
List.of(AlarmType.NEW_NOTICE, AlarmType.NEW_KEYWORD_NOTICE));

PatchDisableAlarmRequest request = new PatchDisableAlarmRequest(AlarmType.NEW_NOTICE);
given(alarmService.findDisableAlarm(any()))
.willReturn(response);

Expand Down
Loading