Skip to content

Commit

Permalink
feat: (#774) 내 정보 조회를 할 때 최신 알림이 있는지 여부를 판단하여 반환하도록 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
jeomxon committed Oct 18, 2023
1 parent f371e6f commit 216401f
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import java.time.LocalDateTime;
import java.util.Objects;
import lombok.AccessLevel;
import lombok.Builder;
Expand Down Expand Up @@ -74,4 +75,11 @@ public void checkOwner(final Member member) {
}
}

public LocalDateTime getLatestAlarmCreatedAt(final LocalDateTime reportActionAlarmCreatedAt) {
if (this.getCreatedAt().isAfter(reportActionAlarmCreatedAt)) {
return this.getCreatedAt();
}
return reportActionAlarmCreatedAt;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
@Getter
public enum AlarmExceptionType implements ExceptionType {

NOT_FOUND_ACTION(1300, "신고조치알림이 존재하지 않습니다."),
NOT_FOUND_ACTION(1300, "신고 조치 알림이 존재하지 않습니다."),
NOT_FOUND(1301, "알림이 존재하지 않습니다."),
NOT_OWNER(1302, "알림을 읽을 대상이 아닙니다."),
NOT_FOUND_ACTION_TYPE(1303, "등록되지 않은 알림 동작입니다."),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.votogether.domain.alarm.entity.Alarm;
import com.votogether.domain.member.entity.Member;
import java.util.List;
import java.util.Optional;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.jpa.repository.JpaRepository;
Expand All @@ -13,4 +14,6 @@ public interface AlarmRepository extends JpaRepository<Alarm, Long> {

List<Alarm> findAllByMember(final Member member);

Optional<Alarm> findByMemberOrderByCreatedAtDesc(final Member member);

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ public interface ReportActionAlarmRepository extends JpaRepository<ReportActionA

Optional<ReportActionAlarm> findByIdAndMember(final Long Id, final Member member);

Optional<ReportActionAlarm> findByMemberOrderByCreatedAtDesc(final Member member);

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,16 @@ public record MemberInfoResponse(
@Schema(description = "출생년도", example = "2002")
Integer birthYear,

@Schema(description = "권한", example = "MEMBER")
Roles roles,

@Schema(description = "작성한 게시글 수", example = "5")
long postCount,

@Schema(description = "투표한 수", example = "10")
long voteCount
long voteCount,

@Schema(description = "권한", example = "MEMBER")
Roles roles,

@Schema(description = "최신 알림 존재 여부", example = "false")
boolean hasLatestAlarm
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,10 @@ public boolean hasEssentialInfo() {
return (this.gender != null && this.birthYear != null);
}

public boolean hasLatestAlarmCompareTo(final LocalDateTime latestAlarmCreatedAt) {
return alarmCheckedAt.isBefore(latestAlarmCreatedAt);
}

public String getNickname() {
return this.nickname.getValue();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.votogether.domain.member.service;

import com.votogether.domain.alarm.entity.Alarm;
import com.votogether.domain.alarm.entity.ReportActionAlarm;
import com.votogether.domain.alarm.exception.AlarmExceptionType;
import com.votogether.domain.alarm.repository.AlarmRepository;
import com.votogether.domain.alarm.repository.ReportActionAlarmRepository;
import com.votogether.domain.member.dto.request.MemberDetailRequest;
import com.votogether.domain.member.dto.response.MemberInfoResponse;
import com.votogether.domain.member.entity.Member;
Expand All @@ -23,6 +26,7 @@
import com.votogether.domain.vote.repository.VoteRepository;
import com.votogether.global.exception.BadRequestException;
import com.votogether.global.exception.NotFoundException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
Expand All @@ -43,6 +47,7 @@ public class MemberService {
private final ReportRepository reportRepository;
private final CommentRepository commentRepository;
private final AlarmRepository alarmRepository;
private final ReportActionAlarmRepository reportActionAlarmRepository;

@Transactional
public Member register(final Member member) {
Expand Down Expand Up @@ -73,17 +78,29 @@ public Member findById(final Long memberId) {
public MemberInfoResponse findMemberInfo(final Member member) {
final MemberMetric memberMetric = memberMetricRepository.findByMember(member)
.orElseThrow(() -> new NotFoundException(MemberExceptionType.NOT_FOUND_METRIC));
final boolean hasLatestAlarm = hasLatestAlarm(member);

return new MemberInfoResponse(
member.getNickname(),
member.getGender(),
member.getBirthYear(),
member.getRoles(),
memberMetric.getPostCount(),
memberMetric.getVoteCount()
memberMetric.getVoteCount(),
member.getRoles(),
hasLatestAlarm
);
}

private boolean hasLatestAlarm(final Member member) {
final Alarm alarm = alarmRepository.findByMemberOrderByCreatedAtDesc(member)
.orElseThrow(() -> new NotFoundException(AlarmExceptionType.NOT_FOUND));
final ReportActionAlarm reportActionAlarm = reportActionAlarmRepository.findByMemberOrderByCreatedAtDesc(member)
.orElseThrow(() -> new NotFoundException(AlarmExceptionType.NOT_FOUND_ACTION));

final LocalDateTime latestAlarmCreatedAt = alarm.getLatestAlarmCreatedAt(reportActionAlarm.getCreatedAt());
return member.hasLatestAlarmCompareTo(latestAlarmCreatedAt);
}

@Transactional
public void changeNickname(final Member member, final String nickname) {
validateExistentNickname(nickname);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,10 @@ void findMemberInfo() throws Exception {
"저문",
Gender.MALE,
1988,
Roles.MEMBER,
0,
0
0,
Roles.MEMBER,
false
);

given(tokenProcessor.resolveToken(anyString())).willReturn("token");
Expand Down

0 comments on commit 216401f

Please sign in to comment.