Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

코레아 1.34v 배포 #804

Merged
merged 124 commits into from
Dec 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
b0449dc
rename: 아래 화살표 버튼 plus에서 more로 변경
chlwlstlf Nov 9, 2024
8425976
feat: 방 생성하기 플로팅 버튼 생성
chlwlstlf Nov 9, 2024
ad90c04
feat: 달력, 시간 입력 error 속성 추가
chlwlstlf Nov 9, 2024
e0087ca
feat: ErrorText 공통 스타일 생성
chlwlstlf Nov 9, 2024
16983f0
feat: 방 생성 유효성 유틸 함수 만들기
chlwlstlf Nov 9, 2024
d74735a
refactor: Input 태그에서 글자수 태그에 absolute 제거
chlwlstlf Nov 9, 2024
61d487c
feat: 엔터키 눌러서 다음으로 이동하기
chlwlstlf Nov 9, 2024
3e0ad1c
feat: keyword 엔터로 추가, 클릭해서 삭제하기
chlwlstlf Nov 9, 2024
c426b26
fix: 키워드 입력할 때 다른 키도 허용
chlwlstlf Nov 9, 2024
847c327
design: 스켈레톤 세로 길이 변경
chlwlstlf Nov 11, 2024
372385a
fix: 로딩 중일 때 방 생성하기 클릭 안 되게 하기
chlwlstlf Nov 11, 2024
969ccad
feat: 키워드 호버했을 때 삭제 아이콘 표시
chlwlstlf Nov 11, 2024
377bc85
Merge branch 'develop' of https://github.com/woowacourse-teams/2024-c…
chlwlstlf Nov 13, 2024
8a84f3f
design: 글자수 확인 부분 absolute 제거
chlwlstlf Nov 13, 2024
41c179e
fix: input, textarea 글자수 absolute로 수정
chlwlstlf Nov 13, 2024
4e2d1f5
fix: textarea 글자수 absolute로 변경
chlwlstlf Nov 13, 2024
499897e
fix: 띄어쓰기만 입력했을 때는 생성 안 되게 하기
chlwlstlf Nov 13, 2024
e83793f
design: delete 아이콘 변경
chlwlstlf Nov 13, 2024
838984c
design: 방 생성 페이지 디자인 변경
chlwlstlf Nov 13, 2024
e6e7a06
Merge branch 'develop' of https://github.com/woowacourse-teams/2024-c…
chlwlstlf Nov 13, 2024
de38ed6
fix: isPrivate 필드 추가
chlwlstlf Nov 13, 2024
851e4d5
feat: 깃허브 링크 유효성 검사 함수 추가
chlwlstlf Nov 13, 2024
3761d5e
feat: 깃허브 링크 placeholder에 넣기
chlwlstlf Nov 14, 2024
2d3e307
feat: 방 상세페이지에서 수정 버튼 생성
chlwlstlf Nov 14, 2024
ad35966
feat: modal에서 버튼은 하단에, 닫기 버튼은 오른쪽 상단에 고정
chlwlstlf Nov 14, 2024
d540913
refactor: mocking 상태로 되돌리기
chlwlstlf Nov 14, 2024
372c407
fix: 로딩 중일 때만 방 생성하기 버튼 안 눌리기
chlwlstlf Nov 14, 2024
83623e0
design: 수정 버튼 모집 중, 방장일 때만 띄우기
chlwlstlf Nov 14, 2024
b813d5b
refactor: input forwardRef 제거
chlwlstlf Nov 14, 2024
4c61052
feat: 방 생성에서 안내 문구 추가
chlwlstlf Nov 14, 2024
d56d033
design: 방 정보에서 개행 인식하게 변경
chlwlstlf Nov 14, 2024
9067617
fix: isPrivate에서 isPublic으로 변경
chlwlstlf Nov 14, 2024
d93f379
feat: 레포지토리 공용 여부 안내 문구 추가
chlwlstlf Nov 14, 2024
529c5bf
refactor: 예외 메세지 변경
jcoding-play Nov 15, 2024
70263a9
refactor: 메서드명 변경
jcoding-play Nov 15, 2024
77a505c
feat: 모집 기간에 대한 원시값 포장
jcoding-play Nov 15, 2024
fcdc10d
feat: 모집 기간을 검증하는 기능 구현
jcoding-play Nov 15, 2024
4cc87f7
test: @ServiceTest 어노테이션 적용
jcoding-play Nov 15, 2024
239f8a4
feat: 방 정렬 방식에 대한 Enum 구현
jcoding-play Nov 15, 2024
e6a5d2c
feat: 방 상태에 따라 방 정렬 방식을 얻는 기능 구현
jcoding-play Nov 15, 2024
bd076ce
feat: 종료된 방은 종료된 최신순으로 조회하는 기능 구현
jcoding-play Nov 15, 2024
fcc3ba0
feat: 개발 피드백 키워드 추가
jcoding-play Nov 15, 2024
318bec1
feat: 소셜 피드백 키워드 추가
jcoding-play Nov 15, 2024
0711b50
test: 피드백 키워드명 변경
jcoding-play Nov 15, 2024
edec3b4
refactor: 기간 검증 로직 수정
jcoding-play Nov 15, 2024
1a3eec1
design: 상세 페이지 설명 글씨 줄이고 키워드 글씨 키우기
chlwlstlf Nov 15, 2024
ded6e0c
refactor: 방 검색 시, 정렬 방식 수정
jcoding-play Nov 15, 2024
ef4c468
[BE] 방 생성 검증 로직 부활(#753) (#762)
jcoding-play Nov 15, 2024
e07f41c
feat: 방 상세페이지에 ControlButton 만들기
chlwlstlf Nov 15, 2024
cf2e0d0
Merge branch 'feat/#763' into feat/#647
jcoding-play Nov 15, 2024
ed086ad
chore: 패키지명 수정
jcoding-play Nov 15, 2024
4de4145
refactor: z-index 상수화하기
chlwlstlf Nov 15, 2024
2aace6c
feat: introPage에도 z-index 추가
chlwlstlf Nov 15, 2024
1b7dff7
feat: z-index에 header 추가
chlwlstlf Nov 15, 2024
75a4add
fix: 리뷰마감일 날짜 바꿨을 때 모집마감일 시간 바뀌는 오류 해결
chlwlstlf Nov 15, 2024
95e701e
feat: 깃허브 링크 유효성 검사 추가
chlwlstlf Nov 15, 2024
a541013
feat: selectedAction 생성해서 동적으로 모달 관리하기
chlwlstlf Nov 15, 2024
3bd809d
test: 방 생성, 수정, 삭제 테스트 구현
jcoding-play Nov 16, 2024
4bb672a
feat: 상세페이지 ControlButton 생성
chlwlstlf Nov 16, 2024
e699e6e
refactor: 유효성 검사 리팩토링
chlwlstlf Nov 16, 2024
8dc78ff
Update README.md
pp449 Nov 16, 2024
9a86397
test: 방 조회 테스트 구현
jcoding-play Nov 16, 2024
92975d5
[FE] 방 생성, 수정 기능 추가(#743) (#746)
pp449 Nov 16, 2024
73d3a67
test: 방 조회 테스트 수정
jcoding-play Nov 16, 2024
a654eb4
feat: 매칭 완료, 실패 알림 렌더링
00kang Nov 18, 2024
9869e3a
Merge branch 'develop' into feat/#763
jcoding-play Nov 18, 2024
3e6ddab
test: Disabled 어노테이션 적용
jcoding-play Nov 18, 2024
880ab53
test: Disabled 어노테이션 적용
jcoding-play Nov 18, 2024
7c422c8
[BE] 종료됨 탭에서 reviewDeadline 역순으로 정렬하는 기능 구현(#763) (#765)
jcoding-play Nov 18, 2024
f3d2d30
fix: 조합이 완료됐을 때만 키워드 추가하기
chlwlstlf Nov 18, 2024
1308ae2
fix: 빈칸 유니코드 입력했을 때도 예외처리
chlwlstlf Nov 18, 2024
0cbb2fc
design: 로그인 중... 글씨 보이게 하기
chlwlstlf Nov 18, 2024
69e60c3
feat: 피드백 작성 알림 추가
00kang Nov 18, 2024
24399c3
[FE] 맥북에서 키워드 마지막 글자 입력되는 오류 해결(#774) (#776)
pp449 Nov 19, 2024
0a0621e
[BE] 피드백 키워드 추가(#766) (#767)
chlwlstlf Nov 20, 2024
00cf45c
feat: 키워드 추가 (#778)
github-actions[bot] Nov 21, 2024
903a722
[BE] 피드백 완료 알람 기능 구현(#771) (#772)
github-actions[bot] Nov 21, 2024
bdd82ac
[BE] 매칭 완료 알람 기능 구현(#761) (#768)
github-actions[bot] Nov 21, 2024
e193a1a
refactor: 로그인하지 않았을 때 불필요하게 alarm/count api 호출되는 상황 막기
00kang Nov 21, 2024
b7855ae
refactor: alarm/count get요청을 1분마다 실행하도록 수정
00kang Nov 21, 2024
08a8ffe
refactor: 알람 리스트를 가져온 후 알람 카운트 데이터도 자동으로 업데이트
00kang Nov 21, 2024
170d167
Merge branch 'develop' of https://github.com/woowacourse-teams/2024-c…
00kang Nov 21, 2024
a5b7f8a
refactor: alarm get 요청도 1분마다 재실행하도록 수정
00kang Nov 21, 2024
2c43595
refactor: 알림페이지에서 EmptyAlarm 컴포넌트 분리
00kang Nov 22, 2024
01d075d
refactor: 알림페이지에서 AlarmItem 컴포넌트 분리
00kang Nov 22, 2024
53ab511
refactor: 알림 문구와 path 객체로 매핑
00kang Nov 22, 2024
8850d75
chore: alaram.ts -> alarm.ts 로 파일명 변경
00kang Nov 22, 2024
66148a4
[FE] 리뷰완료 한번에 클릭 시 일어나는 문제 해결(#781) (#782)
github-actions[bot] Nov 25, 2024
b21a900
refactor: ALARM_MESSAGES_WITH_USERNAME와 ALARM_MESSAGES_WITHOUT_USERNA…
00kang Nov 25, 2024
b57b7d0
refactor: useSelectedFeedbackData 커스텀 훅 활용해서 피드백 작성 알림 클릭시 오픈
00kang Nov 25, 2024
caa8acd
refactor: fetch함수에서 60000을 60*1000으로 수정
00kang Nov 25, 2024
9981209
design: 빈 알림리스트일 때 스크롤 안 생기도록 조정
00kang Nov 25, 2024
d53e91d
Merge branch 'develop' of https://github.com/woowacourse-teams/2024-c…
00kang Nov 25, 2024
58e79fc
[BE] 깃허브 API 비동기 작업시 ThreadPoolExecutor 주입(#764) (#775)
github-actions[bot] Nov 25, 2024
31dd6e2
fix: 알람읽는 post함수에 alarmType을 USER로 하드코딩해서 생긴 문제 해결
00kang Nov 25, 2024
ba6bb94
[FE] 매칭 완료, 피드백 완료 알림 기능(#773) (#780)
pp449 Nov 25, 2024
f5ab3f1
feat: alarm checked post 모킹 추가
chlwlstlf Nov 26, 2024
7b33404
feat: select와 deselect 함수 만들기
chlwlstlf Nov 26, 2024
3f60754
refactor: FeedbackType을 type 폴더로 분리
chlwlstlf Nov 26, 2024
3032244
refactor: toggleFeedbackSelection와 삼항연산자로 변경
chlwlstlf Nov 26, 2024
b387d8f
refactor: refetchIntervalInBackground 주석처리
chlwlstlf Nov 26, 2024
6518e01
refactor: refetchIntervalInBackground 속성 삭제
chlwlstlf Nov 27, 2024
c41e97c
fix: refetchInterval 3초에서 1분으로 변경
chlwlstlf Nov 27, 2024
cba5d74
[FE] useSelectedFeedbackData 훅 오류 해결(#783) (#784)
chlwlstlf Nov 27, 2024
76cb1b2
test: test 설정 변경
jcoding-play Nov 28, 2024
a32324a
[BE] Room 테스트 리팩터링(#647) (#770)
jcoding-play Nov 28, 2024
324a012
test: @ActiveProfiles를 이용한 테스트 제거
jcoding-play Nov 28, 2024
04436b5
test: @Disabled 제거
jcoding-play Nov 28, 2024
bc83263
test: 테스트 설정 변경
jcoding-play Nov 28, 2024
6cf6859
[BE] Test 리팩터링(#788) (#789)
jcoding-play Nov 28, 2024
653aaf5
refactor: RoomSortStrategy 정렬 반환 방식 변경
jcoding-play Nov 28, 2024
d79261d
[BE] RoomSortStrategy 정렬 반환 방식 변경(#787) (#790)
jcoding-play Nov 28, 2024
a31a810
refactor: cors 해결
jcoding-play Nov 28, 2024
6644677
[BE] 방 생성 때 방장도 참여 정할수 있게 변경 & DTO 리팩토링(#785) (#786)
github-actions[bot] Dec 7, 2024
c50b9f5
[FE] 방 생성 때 방장도 참여 정할수 있게 변경 & 데이터 타입 변경(#798) (#799)
github-actions[bot] Dec 9, 2024
8c3e639
fix: 방 생성 문구 수정
chlwlstlf Dec 9, 2024
aff7438
refactor: 리뷰어, 참여자 문구 보여주기
chlwlstlf Dec 9, 2024
8c09e29
fix: 방 수정하기 기능 보류
chlwlstlf Dec 9, 2024
32ebcf1
feat: feedback 카드에 스크롤 기능 넣기
chlwlstlf Dec 9, 2024
7cd09e4
fix: scrollIntoView 없애서 드롭다운 눌렀을 때 화면 상단으로 가는 오류 해결
chlwlstlf Dec 9, 2024
262b91b
[FE] 방 생성 QA 반영(#800) (#801)
pp449 Dec 9, 2024
d942a38
feat: introPage에 필요한 이미지 추가
00kang Dec 9, 2024
ae207b6
feat: introPage에 방 생성 기능 안내 추가
00kang Dec 9, 2024
2e908a7
[FE] 방 생성 기능 추가로 인해 소개 페이지 수정(#802) (#803)
chlwlstlf Dec 9, 2024
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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
# 기술 스택 소개

![dd](https://github.com/user-attachments/assets/a2411aee-bca9-4dc4-9332-87460e3e4f0f)
![image (1)](https://github.com/user-attachments/assets/6b3d7fe8-7895-46bf-8eac-f0f6cda63e8b)

<br>
<br>
Expand Down
4 changes: 2 additions & 2 deletions backend/src/main/java/corea/ContextInitializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -409,8 +409,8 @@ private void matchingAndReviewComplete(List<Participation> participations, Room
}

private void reviewSocialAndDevelopFeedback(MatchResult matchResult) {
socialFeedbackRepository.save(new SocialFeedback(matchResult.getRoomId(), matchResult.getReviewee(), matchResult.getReviewer(), 5, List.of(KIND, GOOD_AT_EXPLAINING), "너무 맘에 드는 말투이고, 설명이 친절했어요! 기회가 된다면 한번 더 리뷰 받고 싶어요~"));
developFeedbackRepository.save(new DevelopFeedback(matchResult.getRoomId(), matchResult.getReviewer(), matchResult.getReviewee(), 5, List.of(EASY_TO_UNDERSTAND_THE_CODE, MAKE_CODE_FOR_THE_PURPOSE), "코드를 이해하기 쉬워 리뷰하기 편했어요!~", 3));
socialFeedbackRepository.save(new SocialFeedback(matchResult.getRoomId(), matchResult.getReviewee(), matchResult.getReviewer(), 5, List.of(POSITIVE_SOCIAL_FEEDBACK_1, POSITIVE_SOCIAL_FEEDBACK_2), "너무 맘에 드는 말투이고, 설명이 친절했어요! 기회가 된다면 한번 더 리뷰 받고 싶어요~"));
developFeedbackRepository.save(new DevelopFeedback(matchResult.getRoomId(), matchResult.getReviewer(), matchResult.getReviewee(), 5, List.of(POSITIVE_DEVELOP_FEEDBACK_1, POSITIVE_DEVELOP_FEEDBACK_2), "코드를 이해하기 쉬워 리뷰하기 편했어요!~", 3));
matchResult.reviewComplete();
matchResult.reviewerCompleteFeedback();
matchResult.revieweeCompleteFeedback();
Expand Down
1 change: 1 addition & 0 deletions backend/src/main/java/corea/WebConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public class WebConfig implements WebMvcConfigurer {
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:3000", "https://d2n5lw9a9hwjzs.cloudfront.net/",
"https://d114zsd8hvayia.cloudfront.net/", "https://vvv.code-review-area.com/",
"https://code-review-area.com/", "https://www.code-review-area.com/",
"https://dev.code-review-area.com/")
.allowedMethods("GET", "POST", "DELETE", "PUT")
Expand Down
22 changes: 22 additions & 0 deletions backend/src/main/java/corea/alarm/domain/Alarm.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package corea.alarm.domain;

import corea.member.domain.Member;

public interface Alarm {

boolean isStatus(boolean status);

boolean isNotReceiver(Member member);

void read();

String getActionType();

Long getId();

Long getActorId();

Long getInteractionId();

Long getReceiverId();
}
3 changes: 3 additions & 0 deletions backend/src/main/java/corea/alarm/domain/AlarmActionType.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,7 @@
public enum AlarmActionType {
REVIEW_COMPLETE,
REVIEW_URGE,
MATCH_COMPLETE,
MATCH_FAIL,
FEEDBACK_CREATED,
}
3 changes: 2 additions & 1 deletion backend/src/main/java/corea/alarm/domain/AlarmType.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

public enum AlarmType {
// 유저간 상호작용으로 인한 알람
USER;
USER,
SERVER;

public static AlarmType from(String value) {
return AlarmType.valueOf(value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@
import java.util.Set;
import java.util.stream.Collectors;

public record UserAlarmsByActionType(Map<AlarmActionType, List<UserToUserAlarm>> data) {
public record AlarmsByActionType(Map<AlarmActionType, List<Alarm>> data) {

public Set<Long> getActorIds() {
return data.values()
.stream()
.flatMap(Collection::stream)
.map(UserToUserAlarm::getActorId)
.map(Alarm::getActorId)
.collect(Collectors.toSet());
}

Expand All @@ -20,11 +21,11 @@ public Set<Long> getRoomIds() {
.stream()
.flatMap(Collection::stream)
//.filter(alarm -> alarm.getAlarmActionType() == AlarmActionType.REVIEW_COMPLETE)
.map(UserToUserAlarm::getInteractionId)
.map(Alarm::getInteractionId)
.collect(Collectors.toSet());
}

public List<UserToUserAlarm> getList() {
public List<Alarm> getList() {
return data.values()
.stream()
.flatMap(Collection::stream)
Expand Down
60 changes: 60 additions & 0 deletions backend/src/main/java/corea/alarm/domain/ServerToUserAlarm.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package corea.alarm.domain;

import corea.global.BaseTimeEntity;
import corea.member.domain.Member;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import static jakarta.persistence.GenerationType.IDENTITY;

@Entity
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
public class ServerToUserAlarm extends BaseTimeEntity implements Alarm {

@Id
@GeneratedValue(strategy = IDENTITY)
private Long id;

@Enumerated(EnumType.STRING)
private AlarmActionType alarmActionType;

private Long receiverId;

private Long interactionId;

private boolean isRead;

public ServerToUserAlarm(AlarmActionType alarmActionType, long receiverId, long interactionId, boolean isRead) {
this(null, alarmActionType, receiverId, interactionId, isRead);
}

@Override
public boolean isStatus(boolean status) {
return isRead == status;
}

@Override
public String getActionType() {
return alarmActionType.name();
}

@Override
public Long getActorId() {
return null;
}

@Override
public boolean isNotReceiver(Member member) {
return !receiverId.equals(member.getId());
}

@Override
public void read() {
isRead = true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package corea.alarm.domain;

import corea.alarm.repository.ServerToUserAlarmRepository;
import corea.exception.CoreaException;
import corea.exception.ExceptionType;
import corea.global.annotation.Reader;
import corea.member.domain.Member;
import lombok.RequiredArgsConstructor;

import java.util.EnumMap;
import java.util.stream.Collectors;

@Reader
@RequiredArgsConstructor
public class ServerToUserAlarmReader {

private final ServerToUserAlarmRepository serverToUserAlarmRepository;

public long countReceivedAlarm(Member member, boolean isRead) {
return serverToUserAlarmRepository.findAllByReceiverId(member.getId())
.stream()
.filter(alarm -> alarm.isStatus(isRead))
.count();
}

public ServerToUserAlarm find(long actionId) {
return serverToUserAlarmRepository.findById(actionId)
.orElseThrow(() -> new CoreaException(ExceptionType.NOT_RECEIVED_ALARM));
}

public AlarmsByActionType findAllByReceiver(Member member) {
return new AlarmsByActionType(serverToUserAlarmRepository.findAllByReceiverId(member.getId())
.stream()
.collect(Collectors.groupingBy(
ServerToUserAlarm::getAlarmActionType,
() -> new EnumMap<>(AlarmActionType.class),
Collectors.toList()
)));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package corea.alarm.domain;

import corea.alarm.repository.ServerToUserAlarmRepository;
import corea.exception.CoreaException;
import corea.exception.ExceptionType;
import corea.global.annotation.Writer;
import corea.member.domain.Member;
import lombok.RequiredArgsConstructor;

@Writer
@RequiredArgsConstructor
public class ServerToUserAlarmWriter {

private final ServerToUserAlarmRepository serverToUserAlarmRepository;

public ServerToUserAlarm create(ServerToUserAlarm serverToUserAlarm) {
return serverToUserAlarmRepository.save(serverToUserAlarm);
}

public ServerToUserAlarm check(Member member, ServerToUserAlarm serverToUserAlarm) {
if (serverToUserAlarm.isNotReceiver(member)) {
throw new CoreaException(ExceptionType.NOT_RECEIVED_ALARM);
}
serverToUserAlarm.read();
return serverToUserAlarm;
}
}
14 changes: 9 additions & 5 deletions backend/src/main/java/corea/alarm/domain/UserToUserAlarm.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
public class UserToUserAlarm extends BaseTimeEntity {
public class UserToUserAlarm extends BaseTimeEntity implements Alarm {

@Id
@GeneratedValue(strategy = IDENTITY)
Expand All @@ -40,23 +40,27 @@ public UserToUserAlarm(AlarmActionType alarmActionType, long actorId, long recei
this(null, alarmActionType, actorId, receiverId, interactionId, isRead);
}

public boolean isUrgeAlarm() {
return alarmActionType == AlarmActionType.REVIEW_URGE;
}

@Override
public boolean isStatus(boolean status) {
return isRead == status;
}

@Override
public String getActionType() {
return alarmActionType.name();
}

@Override
public boolean isNotReceiver(Member member) {
return !receiverId.equals(member.getId());
}

@Override
public void read() {
isRead = true;
}

public boolean isUrgeAlarm() {
return alarmActionType == AlarmActionType.REVIEW_URGE;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package corea.alarm.domain;

import corea.alarm.repository.UserToUserAlarmRepository;
import corea.exception.CoreaException;
import corea.exception.ExceptionType;
import corea.global.annotation.Reader;
Expand Down Expand Up @@ -28,8 +29,8 @@ public UserToUserAlarm find(long actionId) {
.orElseThrow(() -> new CoreaException(ExceptionType.NOT_RECEIVED_ALARM));
}

public UserAlarmsByActionType findAllByReceiver(Member member) {
return new UserAlarmsByActionType(userToUserAlarmRepository.findAllByReceiverId(member.getId())
public AlarmsByActionType findAllByReceiver(Member member) {
return new AlarmsByActionType(userToUserAlarmRepository.findAllByReceiverId(member.getId())
.stream()
.collect(Collectors.groupingBy(
UserToUserAlarm::getAlarmActionType,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package corea.alarm.domain;

import corea.alarm.repository.UserToUserAlarmRepository;
import corea.exception.CoreaException;
import corea.exception.ExceptionType;
import corea.global.annotation.Writer;
Expand All @@ -15,7 +16,7 @@ public class UserToUserAlarmWriter {
public UserToUserAlarm create(UserToUserAlarm userToUserAlarm) {
return userToUserAlarmRepository.save(userToUserAlarm);
}

public UserToUserAlarm check(Member member, UserToUserAlarm userToUserAlarm) {
if (userToUserAlarm.isNotReceiver(member)) {
throw new CoreaException(ExceptionType.NOT_RECEIVED_ALARM);
Expand Down
11 changes: 9 additions & 2 deletions backend/src/main/java/corea/alarm/dto/AlarmResponse.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package corea.alarm.dto;

import corea.alarm.domain.AlarmType;
import corea.alarm.domain.ServerToUserAlarm;
import corea.alarm.domain.UserToUserAlarm;
import corea.member.domain.Member;
import corea.room.domain.Room;
Expand Down Expand Up @@ -31,7 +32,13 @@ public record AlarmResponse(
String alarmType
) {

public static AlarmResponse from(UserToUserAlarm alarm, Member member, Room room) {
return new AlarmResponse(alarm.getId(), alarm.getActionType(), MemberResponse.from(member), InteractionResponse.from(room), alarm.isRead(), alarm.getCreateAt(), AlarmType.USER.name());
public static AlarmResponse of(UserToUserAlarm alarm, Member member, Room room) {
return new AlarmResponse(alarm.getId(), alarm.getActionType(), MemberResponse.from(member),
InteractionResponse.from(room), alarm.isRead(), alarm.getCreateAt(), AlarmType.USER.name());
}

public static AlarmResponse of(ServerToUserAlarm alarm, Room room) {
return new AlarmResponse(alarm.getId(), alarm.getActionType(), null,
InteractionResponse.from(room), alarm.isRead(), alarm.getCreateAt(), AlarmType.SERVER.name());
}
}
18 changes: 15 additions & 3 deletions backend/src/main/java/corea/alarm/dto/AlarmResponses.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package corea.alarm.dto;

import corea.alarm.domain.Alarm;
import corea.alarm.domain.ServerToUserAlarm;
import corea.alarm.domain.UserToUserAlarm;
import corea.exception.CoreaException;
import corea.exception.ExceptionType;
import corea.member.domain.Member;
import corea.room.domain.Room;
import io.swagger.v3.oas.annotations.media.Schema;
Expand All @@ -13,10 +17,18 @@ public record AlarmResponses(
@Schema(description = "알림 리스트")
List<AlarmResponse> data) {

public static AlarmResponses from(List<UserToUserAlarm> responses, Map<Long, Member> members, Map<Long, Room> rooms) {
public static AlarmResponses of(List<Alarm> alarms, Map<Long, Member> members, Map<Long, Room> userAlarmRooms, Map<Long, Room> serverAlarmRooms) {
//@formatter:off
return new AlarmResponses(responses.stream()
.map(alarm -> AlarmResponse.from(alarm, members.get(alarm.getActorId()), rooms.get(alarm.getInteractionId())))
return new AlarmResponses(alarms.stream()
.map(alarm -> {
if (alarm instanceof UserToUserAlarm userAlarm) {
return AlarmResponse.of(userAlarm, members.get(userAlarm.getActorId()), userAlarmRooms.get(userAlarm.getInteractionId()));
}
if (alarm instanceof ServerToUserAlarm serverAlarm){
return AlarmResponse.of(serverAlarm, serverAlarmRooms.get(serverAlarm.getInteractionId()));
}
throw new CoreaException(ExceptionType.UNDEFINED_ALARM_TYPE);
})
.sorted(Comparator.comparing(AlarmResponse::createAt).reversed())
.toList());
//@formatter:on
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package corea.alarm.dto;

import corea.alarm.domain.AlarmActionType;
import corea.alarm.domain.ServerToUserAlarm;

public record CreateServerToUserAlarmInput(AlarmActionType alarmType,
long receiverId,
long interactionId) {

public ServerToUserAlarm toEntity() {
return new ServerToUserAlarm(
alarmType,
receiverId,
interactionId,
false
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package corea.alarm.repository;

import corea.alarm.domain.ServerToUserAlarm;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface ServerToUserAlarmRepository extends JpaRepository<ServerToUserAlarm, Long> {

List<ServerToUserAlarm> findAllByReceiverId(long receiverId);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package corea.alarm.domain;
package corea.alarm.repository;

import corea.alarm.domain.UserToUserAlarm;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
Expand Down
Loading
Loading