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
Expand Up @@ -32,10 +32,7 @@ public class CalendarController {

@GetMapping
public ResponseEntity<List<CalendarResponse>> calendarList(@CurrentMember Member member) {
return ResponseEntity.ok(
calendarMemberService.searchCalendarsByMemberId(member.getId()).stream()
.map(CalendarResponse::from)
.toList());
return ResponseEntity.ok(calendarMemberService.searchCalendarsByMemberId(member.getId()));
}

@PostMapping
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.sillim.recordit.calendar.domain.Calendar;
import com.sillim.recordit.calendar.domain.CalendarMember;
import com.sillim.recordit.calendar.dto.response.CalendarMemberResponse;
import com.sillim.recordit.calendar.dto.response.CalendarResponse;
import com.sillim.recordit.calendar.repository.CalendarMemberRepository;
import com.sillim.recordit.global.exception.ErrorCode;
import com.sillim.recordit.global.exception.common.InvalidRequestException;
Expand Down Expand Up @@ -50,8 +51,10 @@ public List<CalendarMemberResponse> searchCalendarMembers(Long calendarId) {
}

@Transactional(readOnly = true)
public List<Calendar> searchCalendarsByMemberId(Long memberId) {
return calendarMemberRepository.findCalendarsByMemberId(memberId);
public List<CalendarResponse> searchCalendarsByMemberId(Long memberId) {
return calendarMemberRepository.findCalendarsByMemberId(memberId).stream()
.map(CalendarResponse::from)
.toList();
}

public Long addCalendarMember(Long calendarId, Long memberId) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.sillim.recordit.goal.service;

import com.sillim.recordit.calendar.domain.Calendar;
import com.sillim.recordit.calendar.service.CalendarMemberService;
import com.sillim.recordit.calendar.service.CalendarQueryService;
import com.sillim.recordit.global.exception.ErrorCode;
import com.sillim.recordit.global.exception.common.RecordNotFoundException;
Expand All @@ -18,11 +19,12 @@ public class WeeklyGoalQueryService {

private final CalendarQueryService calendarQueryService;
private final WeeklyGoalRepository weeklyGoalRepository;
private final CalendarMemberService calendarMemberService;

public List<WeeklyGoal> searchAllWeeklyGoalByDate(
final Integer year, final Integer month, final Long memberId, final Long calendarId) {
Calendar calendar = calendarQueryService.searchByCalendarId(calendarId);
calendar.validateAuthenticatedMember(memberId);
calendarMemberService.validateCalendarMember(calendar.getId(), memberId);

return weeklyGoalRepository.findWeeklyGoalInMonth(year, month, calendarId);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class AlarmLogController {
private final AlarmLogService alarmLogService;

@GetMapping
public ResponseEntity<SliceResponse<PushMessage>> alarmLogList(
public ResponseEntity<SliceResponse<PushMessage<String>>> alarmLogList(
Pageable pageable, @CurrentMember Member member) {
return ResponseEntity.ok(alarmLogService.searchRecentCreated(pageable, member.getId()));
}
Expand Down
20 changes: 3 additions & 17 deletions src/main/java/com/sillim/recordit/pushalarm/domain/AlarmLog.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,12 @@ public class AlarmLog extends BaseTime {
@Column(name = "alarm_log_id", nullable = false)
private Long id;

@Column(nullable = false)
private Long activeId;

@Column(nullable = false)
@Enumerated(EnumType.STRING)
private AlarmType alarmType;

@Column(nullable = false)
private String title;

@Column(nullable = false)
private String body;
private String content;

@Column(nullable = false)
private Long senderId;
Expand All @@ -41,17 +35,9 @@ public class AlarmLog extends BaseTime {
private boolean deleted;

@Builder
public AlarmLog(
Long activeId,
AlarmType alarmType,
String title,
String body,
Long senderId,
Long receiverId) {
this.activeId = activeId;
public AlarmLog(AlarmType alarmType, String content, Long senderId, Long receiverId) {
this.alarmType = alarmType;
this.title = title;
this.body = body;
this.content = content;
this.senderId = senderId;
this.receiverId = receiverId;
this.deleted = false;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.sillim.recordit.pushalarm.dto;

public enum AlarmType {
SCHEDULE,
SCHEDULE_ADD,
SCHEDULE_DELETE,
SCHEDULE_ALARM,
INVITE,
FOLLOWING,
FEED_LIKE,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.sillim.recordit.pushalarm.dto;

public record FeedLikeMessage(Long feedLikeId, String title) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.sillim.recordit.pushalarm.dto;

public record FollowMessage(Long followerId, String title, String body) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.sillim.recordit.pushalarm.dto;

public record InviteMessage(Long inviteLogId, String title, String body) {}
65 changes: 37 additions & 28 deletions src/main/java/com/sillim/recordit/pushalarm/dto/PushMessage.java
Original file line number Diff line number Diff line change
@@ -1,49 +1,58 @@
package com.sillim.recordit.pushalarm.dto;

import com.sillim.recordit.pushalarm.domain.AlarmLog;
import com.sillim.recordit.schedule.domain.Schedule;
import java.util.List;

public record PushMessage(Long id, AlarmType type, Long activeId, String title, String body) {
public record PushMessage<T>(Long id, AlarmType type, T content) {

public static PushMessage fromInvite(
public static PushMessage<InviteMessage> fromInvite(
Long activeId, String calendarTitle, String inviterPersonalId) {
return new PushMessage(
return new PushMessage<>(
null,
AlarmType.INVITE,
activeId,
inviterPersonalId + "님의 " + calendarTitle + "캘린더 초대",
"참가하시겠습니까?");
new InviteMessage(
activeId,
inviterPersonalId + "님의 " + calendarTitle + "캘린더 초대",
"참가하시겠습니까?"));
}

public static PushMessage fromFollowing(Long activeId, String followerPersonalId) {
return new PushMessage(
public static PushMessage<FollowMessage> fromFollowing(
Long activeId, String followerPersonalId) {
return new PushMessage<>(
null,
AlarmType.FOLLOWING,
activeId,
followerPersonalId + "님이 팔로우했습니다.",
"맞팔로우하시겠습니까?");
new FollowMessage(activeId, followerPersonalId + "님이 팔로우했습니다.", "맞팔로우하시겠습니까?"));
}

public static PushMessage fromSchedule(
public static PushMessage<ScheduleAlarmMessage> fromScheduleAlarm(
Long activeId, String scheduleTitle, String scheduledTime) {
return new PushMessage(null, AlarmType.SCHEDULE, activeId, scheduleTitle, scheduledTime);
}

public static PushMessage fromAlarmLog(AlarmLog alarmLog) {
return new PushMessage(
alarmLog.getId(),
alarmLog.getAlarmType(),
alarmLog.getActiveId(),
alarmLog.getTitle(),
alarmLog.getBody());
return new PushMessage<>(
null,
AlarmType.SCHEDULE_ALARM,
new ScheduleAlarmMessage(activeId, scheduleTitle, scheduledTime));
}

public static PushMessage fromFeedLike(
public static PushMessage<FeedLikeMessage> fromFeedLike(
Long feedLikeId, String likerPersonalId, String feedTitle) {
return new PushMessage(
return new PushMessage<>(
null,
AlarmType.FEED_LIKE,
feedLikeId,
likerPersonalId + "님이 " + feedTitle + " 피드에 좋아요를 눌렀습니다.",
"");
new FeedLikeMessage(
feedLikeId, likerPersonalId + "님이 " + feedTitle + " 피드에 좋아요를 눌렀습니다."));
}

public static PushMessage<List<ScheduleAddMessage>> fromAddSchedules(List<Schedule> schedules) {
return new PushMessage<>(
null,
AlarmType.SCHEDULE_ADD,
schedules.stream().map(ScheduleAddMessage::from).toList());
}

public static PushMessage<List<ScheduleDeleteMessage>> fromDeleteSchedules(
List<Schedule> schedules) {
return new PushMessage<>(
null,
AlarmType.SCHEDULE_DELETE,
schedules.stream().map(ScheduleDeleteMessage::from).toList());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.sillim.recordit.pushalarm.dto;

import com.sillim.recordit.schedule.domain.Schedule;
import java.time.LocalDateTime;
import lombok.Builder;

@Builder
public record ScheduleAddMessage(
Long id,
String title,
boolean isAllDay,
LocalDateTime startDateTime,
LocalDateTime endDateTime,
String colorHex,
Long calendarId) {

public static ScheduleAddMessage from(Schedule schedule) {
return ScheduleAddMessage.builder()
.id(schedule.getId())
.title(schedule.getTitle())
.isAllDay(schedule.isAllDay())
.startDateTime(schedule.getStartDateTime())
.endDateTime(schedule.getEndDateTime())
.colorHex(schedule.getColorHex())
.calendarId(schedule.getCalendar().getId())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.sillim.recordit.pushalarm.dto;

public record ScheduleAlarmMessage(Long scheduleId, String title, String body) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.sillim.recordit.pushalarm.dto;

import com.sillim.recordit.schedule.domain.Schedule;
import java.time.LocalDateTime;
import lombok.Builder;

@Builder
public record ScheduleDeleteMessage(
Long scheduleId, LocalDateTime startDateTime, LocalDateTime endDateTime, Long calendarId) {

public static ScheduleDeleteMessage from(Schedule schedule) {
return ScheduleDeleteMessage.builder()
.scheduleId(schedule.getId())
.startDateTime(schedule.getStartDateTime())
.endDateTime(schedule.getEndDateTime())
.calendarId(schedule.getCalendar().getId())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public void execute(JobExecutionContext context) {
}
});

alarmService.pushAlarm(-1L, memberId, PushMessage.fromSchedule(scheduleId, title, body));
alarmService.pushAlarm(
-1L, memberId, PushMessage.fromScheduleAlarm(scheduleId, title, body));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,22 @@
public class AlarmLogService {
private final AlarmLogRepository alarmLogRepository;

public SliceResponse<PushMessage> searchRecentCreated(Pageable pageable, Long memberId) {
public SliceResponse<PushMessage<String>> searchRecentCreated(
Pageable pageable, Long memberId) {
Slice<AlarmLog> alarmSlice =
alarmLogRepository.findByDeletedIsFalseAndReceiverIdOrderByCreatedAtDesc(
pageable, memberId);

return SliceResponse.of(
new SliceImpl<>(
alarmSlice.stream().map(PushMessage::fromAlarmLog).toList(),
alarmSlice.stream()
.map(
alarmLog ->
new PushMessage<>(
alarmLog.getId(),
alarmLog.getAlarmType(),
alarmLog.getContent()))
.toList(),
pageable,
alarmSlice.hasNext()));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.sillim.recordit.pushalarm.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sillim.recordit.global.exception.ErrorCode;
import com.sillim.recordit.global.exception.common.ApplicationException;
import com.sillim.recordit.pushalarm.domain.AlarmLog;
import com.sillim.recordit.pushalarm.dto.PushMessage;
import com.sillim.recordit.pushalarm.repository.AlarmLogRepository;
Expand All @@ -13,20 +17,25 @@
public class AlarmService {
private final SseEmitterManager sseEmitterManager;
private final AlarmLogRepository alarmLogRepository;
private final ObjectMapper objectMapper;

public boolean pushAlarm(Long senderId, Long receiverId, PushMessage message) {
AlarmLog alarmLog =
alarmLogRepository.save(
AlarmLog.builder()
.activeId(message.activeId())
.alarmType(message.type())
.title(message.title())
.body(message.body())
.senderId(senderId)
.receiverId(receiverId)
.build());

return sseEmitterManager.sendToClient(receiverId, PushMessage.fromAlarmLog(alarmLog));
public <T> void pushAlarm(Long senderId, Long receiverId, PushMessage<T> message) {
try {
AlarmLog alarmLog =
alarmLogRepository.save(
AlarmLog.builder()
.alarmType(message.type())
.content(objectMapper.writeValueAsString(message.content()))
.senderId(senderId)
.receiverId(receiverId)
.build());
sseEmitterManager.sendToClient(
receiverId,
new PushMessage<>(alarmLog.getId(), message.type(), message.content()));
} catch (JsonProcessingException e) {
throw new ApplicationException(
ErrorCode.UNHANDLED_EXCEPTION, "AlarmLog content를 직렬화하지 못했습니다.");
}
}

public void deleteAlarm(Long alarmLogId) {
Expand Down
Loading
Loading