Skip to content

Commit 217cc13

Browse files
Merge pull request #32 from devpalsPlus/Dev
Dev 브랜치 코드 Main 병합
2 parents f109999 + 578057b commit 217cc13

15 files changed

Lines changed: 327 additions & 126 deletions

File tree

src/main/java/hs/kr/backend/devpals/domain/project/service/ApplyService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import hs.kr.backend.devpals.domain.user.repository.UserRepository;
1212
import hs.kr.backend.devpals.domain.user.service.AlarmService;
1313
import hs.kr.backend.devpals.global.common.ApiResponse;
14-
import hs.kr.backend.devpals.global.common.enums.AlramFilter;
14+
import hs.kr.backend.devpals.global.common.enums.AlarmFilter;
1515
import hs.kr.backend.devpals.global.common.enums.ApplicantStatus;
1616
import hs.kr.backend.devpals.global.exception.CustomException;
1717
import hs.kr.backend.devpals.global.exception.ErrorException;
@@ -52,7 +52,7 @@ public ResponseEntity<ApiResponse<String>> projectApply(Long projectId, ProjectA
5252

5353
ApplicantEntity applicant = ApplicantEntity.createApplicant(user, project, request);
5454
applicantRepository.save(applicant);
55-
alarmService.sendAlarm(project,applicant, AlramFilter.APPLICANT_CHECK);
55+
alarmService.sendAlarm(project,applicant);
5656

5757
return ResponseEntity.ok(new ApiResponse<>(true, "프로젝트 지원 되었습니다." , null));
5858
}

src/main/java/hs/kr/backend/devpals/domain/project/service/ProjectCommentService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import hs.kr.backend.devpals.domain.project.repository.RecommentRepository;
1111
import hs.kr.backend.devpals.domain.user.entity.UserEntity;
1212
import hs.kr.backend.devpals.domain.user.repository.UserRepository;
13+
import hs.kr.backend.devpals.domain.user.service.AlarmService;
1314
import hs.kr.backend.devpals.global.common.ApiResponse;
1415
import hs.kr.backend.devpals.global.exception.CustomException;
1516
import hs.kr.backend.devpals.global.exception.ErrorException;
@@ -28,6 +29,7 @@
2829
@RequiredArgsConstructor
2930
public class ProjectCommentService {
3031
private final JwtTokenValidator jwtTokenValidator;
32+
private final AlarmService alarmService;
3133
private final CommentRepoisitory commentRepoisitory;
3234
private final RecommentRepository recommentRepository;
3335
private final ProjectRepository projectRepository;
@@ -43,6 +45,7 @@ public ResponseEntity<ApiResponse<String>> writeComment(String token, Long proje
4345

4446
CommentEntity comment = CommentEntity.from(dto, project, user);
4547
commentRepoisitory.save(comment);
48+
alarmService.sendAlarm(comment,project,user);
4649

4750
return ResponseEntity.ok(new ApiResponse<>(true, "댓글 작성 성공", null));
4851
}
@@ -124,6 +127,7 @@ public ResponseEntity<ApiResponse<String>> writeRecomment(String token, Long pro
124127
RecommentEntity recomment = RecommentEntity.from(dto, project, user, comment);
125128

126129
recommentRepository.save(recomment);
130+
alarmService.sendAlarm(recomment,comment,project);
127131

128132
return ResponseEntity.ok(new ApiResponse<>(true, "대댓글 작성 성공", null));
129133
}

src/main/java/hs/kr/backend/devpals/domain/project/service/ProjectService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import hs.kr.backend.devpals.domain.user.repository.UserRepository;
1515
import hs.kr.backend.devpals.domain.user.service.AlarmService;
1616
import hs.kr.backend.devpals.global.common.ApiResponse;
17-
import hs.kr.backend.devpals.global.common.enums.AlramFilter;
17+
import hs.kr.backend.devpals.global.common.enums.AlarmFilter;
1818
import hs.kr.backend.devpals.global.common.enums.ApplicantStatus;
1919
import hs.kr.backend.devpals.global.exception.CustomException;
2020
import hs.kr.backend.devpals.global.exception.ErrorException;
@@ -190,7 +190,7 @@ public ResponseEntity<ApiResponse<ProjectCloseResponse>> closeProject(Long proje
190190

191191
MethodTypeResponse methodTypeResponse = projectFacade.getMethodTypeResponse(project.getMethodTypeId());
192192

193-
alarmService.sendAlarm(applicants,AlramFilter.APPLIED_PROJECTS,projectId);
193+
alarmService.sendAlarm(applicants,project);
194194
return ResponseEntity.ok(new ApiResponse<>(true, "프로젝트 모집 종료 성공", ProjectCloseResponse.fromEntity(project, methodTypeResponse)));
195195
}
196196

@@ -217,7 +217,7 @@ public CompletableFuture<Void> closeProject(List<ProjectEntity> projects) {
217217
projects.forEach(project -> {
218218
List<ApplicantEntity> applicants = projectApplicantsMap.get(project);
219219
authEmailService.sendEmailsAsync(applicants, project);
220-
alarmService.sendAlarm(applicants,AlramFilter.APPLIED_PROJECTS, project.getId());
220+
alarmService.sendAlarm(applicants, project);
221221
});
222222
}, emailExecutor));
223223
}

src/main/java/hs/kr/backend/devpals/domain/user/dto/AlarmDto.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package hs.kr.backend.devpals.domain.user.dto;
22

3-
import hs.kr.backend.devpals.domain.user.entity.AlramEntity;
4-
import hs.kr.backend.devpals.global.common.enums.AlramFilter;
3+
import hs.kr.backend.devpals.domain.user.entity.alarm.AlarmEntity;
4+
import hs.kr.backend.devpals.domain.user.entity.alarm.CommentAlarmEntity;
5+
import hs.kr.backend.devpals.domain.user.dto.CommentAlarmDto;
56
import lombok.AllArgsConstructor;
67
import lombok.Builder;
78
import lombok.Getter;
@@ -21,14 +22,20 @@ public class AlarmDto {
2122
private Integer alarmFilterId;
2223
private LocalDateTime createdAt;
2324

24-
public static AlarmDto fromEntity(AlramEntity entity) {
25+
public static AlarmDto fromEntity(AlarmEntity entity) {
26+
//TODO: 추후 타입에 따라 전달하는 데이터가 다를 수 있으므로 ApplicantAlarmDto, ProjectAlarmDto 작성 가능성여부 검토필요
27+
if (entity instanceof CommentAlarmEntity) {
28+
return new CommentAlarmDto((CommentAlarmEntity) entity);
29+
}
2530
return AlarmDto.builder()
2631
.id(entity.getId())
27-
.routingId(entity.getProject().getId())
32+
.routingId(entity.getRoutingId())
2833
.content(entity.getContent())
2934
.enabled(entity.isEnabled())
30-
.alarmFilterId(entity.getAlramFilter().getValue())
35+
.alarmFilterId(entity.getAlarmFilterIntValue())
3136
.createdAt(entity.getCreatedAt())
3237
.build();
3338
}
39+
40+
3441
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package hs.kr.backend.devpals.domain.user.dto;
2+
3+
import hs.kr.backend.devpals.domain.user.entity.alarm.CommentAlarmEntity;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
8+
@Getter
9+
@NoArgsConstructor
10+
@AllArgsConstructor
11+
public class CommentAlarmDto extends AlarmDto{
12+
13+
private Boolean replier;
14+
private Long reCommentUserId;
15+
16+
public CommentAlarmDto(CommentAlarmEntity entity) {
17+
super(entity.getId(), entity.getRoutingId(), entity.getContent(), entity.isEnabled(), entity.getAlarmFilterIntValue(), entity.getCreatedAt());
18+
this.replier = entity.getReplier();
19+
this.reCommentUserId = getReCommentUserIdIfNotNull(entity);
20+
}
21+
22+
//대댓글이 존재하면 유저id 반환 없으면 0 반환
23+
private Long getReCommentUserIdIfNotNull(CommentAlarmEntity entity) {
24+
if(entity.getRecomment() != null && entity.getRecomment().getUser() != null) return entity.getRecomment().getUser().getId();
25+
else return 0L;
26+
}
27+
}

src/main/java/hs/kr/backend/devpals/domain/user/entity/AlramEntity.java

Lines changed: 0 additions & 61 deletions
This file was deleted.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package hs.kr.backend.devpals.domain.user.entity.alarm;
2+
3+
import hs.kr.backend.devpals.domain.project.entity.ApplicantEntity;
4+
import hs.kr.backend.devpals.domain.project.entity.CommentEntity;
5+
import hs.kr.backend.devpals.domain.project.entity.ProjectEntity;
6+
import hs.kr.backend.devpals.domain.user.entity.UserEntity;
7+
import hs.kr.backend.devpals.global.common.enums.AlarmFilter;
8+
import jakarta.persistence.*;
9+
import lombok.Getter;
10+
import lombok.NoArgsConstructor;
11+
12+
import java.time.LocalDateTime;
13+
14+
@Entity
15+
@Getter
16+
@NoArgsConstructor
17+
@Inheritance(strategy = InheritanceType.JOINED)
18+
@DiscriminatorColumn(name = "ALARM_FILTER",
19+
discriminatorType = DiscriminatorType.STRING)
20+
21+
@Table(name = "Alarm")
22+
public abstract class AlarmEntity {
23+
@Id
24+
@GeneratedValue(strategy = GenerationType.IDENTITY)
25+
private Long id;
26+
27+
28+
@ManyToOne(fetch = FetchType.LAZY)
29+
@JoinColumn(name = "receiver_id", nullable = false)
30+
private UserEntity receiver;
31+
32+
33+
@Column(length = 255)
34+
private String content;
35+
36+
@Column(nullable = false, columnDefinition = "BOOLEAN DEFAULT FALSE")
37+
private boolean enabled = false;
38+
39+
@Column
40+
private Long routingId; //AlarmFilter마다
41+
42+
43+
// @Enumerated(EnumType.STRING)
44+
// private AlarmFilter alarmFilter;
45+
46+
@Column(updatable = false)
47+
private LocalDateTime createdAt = LocalDateTime.now();
48+
49+
public AlarmEntity(UserEntity receiver, String content, Long routingId) {
50+
this.receiver = receiver;
51+
this.content = content;
52+
this.routingId = routingId;
53+
}
54+
55+
public abstract Integer getAlarmFilterIntValue();
56+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package hs.kr.backend.devpals.domain.user.entity.alarm;
2+
3+
import hs.kr.backend.devpals.domain.project.entity.ApplicantEntity;
4+
import hs.kr.backend.devpals.domain.project.entity.ProjectEntity;
5+
import jakarta.persistence.*;
6+
import lombok.NoArgsConstructor;
7+
8+
import static hs.kr.backend.devpals.domain.user.entity.alarm.constants.AlarmFilterConstants.APPLIED_PROJECTS;
9+
import static hs.kr.backend.devpals.domain.user.entity.alarm.constants.AlarmFilterConstants.APPLIED_PROJECT_INT_VALUE;
10+
11+
@Entity
12+
@DiscriminatorValue(APPLIED_PROJECTS)
13+
@NoArgsConstructor
14+
@Table(name = "ApplicantAlarm") // 테이블 이름 지정
15+
public class ApplicantAlarmEntity extends AlarmEntity {
16+
//"지원한 프로젝트" 알람 (지원 결과)
17+
//공고 지원자가 지원한 프로젝트에 합격, 불합격 여부를 전달하는 알람
18+
@ManyToOne(fetch = FetchType.LAZY)
19+
@JoinColumn(name = "project_id", nullable = false)
20+
private ProjectEntity project;
21+
22+
@ManyToOne(fetch = FetchType.LAZY)
23+
@JoinColumn(name = "applicant_id", nullable = false)
24+
private ApplicantEntity applicant;
25+
26+
public ApplicantAlarmEntity(ApplicantEntity applicantEntity, String content, ProjectEntity project) {
27+
super(applicantEntity.getUser(),content,project.getId());
28+
this.project = project;
29+
this.applicant = applicantEntity;
30+
31+
}
32+
33+
public Integer getAlarmFilterIntValue() {
34+
return APPLIED_PROJECT_INT_VALUE;
35+
}
36+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package hs.kr.backend.devpals.domain.user.entity.alarm;
2+
3+
import hs.kr.backend.devpals.domain.project.entity.CommentEntity;
4+
import hs.kr.backend.devpals.domain.project.entity.ProjectEntity;
5+
import hs.kr.backend.devpals.domain.project.entity.RecommentEntity;
6+
import hs.kr.backend.devpals.domain.user.entity.UserEntity;
7+
import jakarta.persistence.*;
8+
import lombok.Getter;
9+
import lombok.NoArgsConstructor;
10+
11+
import static hs.kr.backend.devpals.domain.user.entity.alarm.constants.AlarmFilterConstants.*;
12+
13+
@Entity
14+
@DiscriminatorValue(COMMENT_AND_REPLY)
15+
@NoArgsConstructor
16+
@Getter
17+
@Table(name = "CommentAlarm") // 테이블 이름 지정
18+
public class CommentAlarmEntity extends AlarmEntity {
19+
// 댓글 알람 -> 공고에 댓글을 달았을 시, 댓글에 답변을 달았을 시 전달되는 알람
20+
21+
@ManyToOne(fetch = FetchType.LAZY)
22+
@JoinColumn(name = "project_id", nullable = false)
23+
private ProjectEntity project;
24+
25+
@ManyToOne(fetch = FetchType.LAZY)
26+
@JoinColumn(name = "comment_id", nullable = false)
27+
private CommentEntity comment;
28+
29+
@ManyToOne(fetch = FetchType.LAZY)
30+
@JoinColumn(name = "recomment_id")
31+
private RecommentEntity recomment;
32+
33+
@Column
34+
private Boolean replier;
35+
36+
//공고에 댓글 달았을 시 공고 게시자에게 알람 전송
37+
public CommentAlarmEntity(CommentEntity comment, String content, ProjectEntity project, UserEntity projectAuthor) {
38+
super(projectAuthor,content,project.getId());
39+
this.comment = comment;
40+
this.project = project;
41+
this.replier = false;
42+
}
43+
44+
public CommentAlarmEntity(CommentEntity comment, String content, ProjectEntity project, RecommentEntity recomment,UserEntity receiver) {
45+
super(receiver,content,project.getId());
46+
this.comment = comment;
47+
this.project = project;
48+
this.recomment = recomment;
49+
this.replier = true;
50+
}
51+
52+
public Integer getAlarmFilterIntValue() {
53+
return COMMENT_AND_REPLY_INT_VALUE;
54+
}
55+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package hs.kr.backend.devpals.domain.user.entity.alarm;
2+
3+
import hs.kr.backend.devpals.domain.project.entity.ApplicantEntity;
4+
import hs.kr.backend.devpals.domain.project.entity.ProjectEntity;
5+
import hs.kr.backend.devpals.domain.user.entity.UserEntity;
6+
import jakarta.persistence.*;
7+
import lombok.NoArgsConstructor;
8+
9+
import static hs.kr.backend.devpals.domain.user.entity.alarm.constants.AlarmFilterConstants.*;
10+
11+
@Entity
12+
@DiscriminatorValue(APPLICANT_CHECK)
13+
@NoArgsConstructor
14+
@Table(name = "ProjectAlarm") // 테이블 이름 지정
15+
public class ProjectAlarmEntity extends AlarmEntity{
16+
//공고에 지원자가 지원할 시 공고생성자가 수신받는 알림
17+
18+
@ManyToOne(fetch = FetchType.LAZY)
19+
@JoinColumn(name = "project_id", nullable = false)
20+
private ProjectEntity project;
21+
22+
@ManyToOne(fetch = FetchType.LAZY)
23+
@JoinColumn(name = "applicant_id", nullable = false)
24+
private ApplicantEntity applicant;
25+
26+
27+
public ProjectAlarmEntity(ProjectEntity project, UserEntity author, String content,ApplicantEntity applicant) {
28+
super(author,content, project.getId());
29+
this.project = project;
30+
this.applicant = applicant;
31+
}
32+
33+
public Integer getAlarmFilterIntValue() {
34+
return APPLICANT_CHECK_INT_VALUE;
35+
}
36+
}

0 commit comments

Comments
 (0)