Skip to content

Commit 14f445c

Browse files
authored
Merge pull request Clubber2024#818 from Clubber2024/refactor/Clubber2024#817-refactor-recruit-implement-분리
refactor : recruit Service 로직 implement 분리
2 parents fbc72a5 + b0797a1 commit 14f445c

11 files changed

Lines changed: 167 additions & 109 deletions

File tree

src/main/java/com/clubber/ClubberServer/domain/recruit/controller/adminRecruitController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public PageResponse<GetOneRecruitInListResponse> getAllAdminRecruits(@PageableDe
2929

3030
@PostMapping("/admins/recruits")
3131
@Operation(summary = "동아리 계정 모집글 작성")
32-
public PostRecruitResponse postRecruitsPage(@RequestBody @Valid PostRecruitRequest request){
33-
return recruitService.postRecruitsPage(request);
32+
public PostRecruitResponse createRecruit(@RequestBody @Valid PostRecruitRequest request){
33+
return recruitService.createRecruit(request);
3434
}
3535

3636
//관리자 권한으로 모집글 삭제

src/main/java/com/clubber/ClubberServer/domain/recruit/domain/Recruit.java

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,19 @@
22

33
import com.clubber.ClubberServer.domain.club.domain.Club;
44
import com.clubber.ClubberServer.domain.common.BaseEntity;
5-
import com.clubber.ClubberServer.domain.recruit.dto.PostRecruitRequest;
65
import jakarta.persistence.*;
76
import jakarta.validation.constraints.NotNull;
8-
9-
import java.time.LocalDateTime;
10-
import java.util.ArrayList;
11-
import java.util.List;
12-
137
import lombok.AccessLevel;
148
import lombok.Builder;
159
import lombok.Getter;
1610
import lombok.NoArgsConstructor;
1711
import org.hibernate.annotations.JdbcTypeCode;
1812
import org.hibernate.type.SqlTypes;
1913

14+
import java.time.LocalDateTime;
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
2018
@Getter
2119
@Entity
2220
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@@ -53,7 +51,7 @@ public class Recruit extends BaseEntity {
5351

5452
private String everytimeUrl;
5553

56-
private Long totalView;
54+
private Long totalView = 0L;
5755

5856
private boolean isDeleted = false;
5957

@@ -97,14 +95,4 @@ private Recruit(Long id, LocalDateTime startAt, LocalDateTime endAt, Semester se
9795
this.club = club;
9896
this.recruitImages = recruitImages;
9997
}
100-
101-
public static Recruit of(Club club, PostRecruitRequest request) {
102-
return Recruit.builder()
103-
.title(request.getTitle())
104-
.content(request.getContent())
105-
.everytimeUrl(request.getEverytimeUrl())
106-
.totalView(0L)
107-
.club(club)
108-
.build();
109-
}
11098
}

src/main/java/com/clubber/ClubberServer/domain/recruit/domain/RecruitImage.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class RecruitImage extends BaseEntity {
2929
private boolean isDeleted=false;
3030

3131
@Builder
32-
private RecruitImage(Long id, ImageVO imageUrl,Recruit recruit){
32+
private RecruitImage(Long id, ImageVO imageUrl,Recruit recruit, Long orderNum) {
3333
this.id=id;
3434
this.imageUrl=imageUrl;
3535
this.recruit=recruit;
@@ -42,7 +42,15 @@ public static RecruitImage of(ImageVO imageUrl,Recruit recruit){
4242
.build();
4343
}
4444

45-
public void updateStatus(){this.isDeleted=true;}
45+
public static RecruitImage of(ImageVO imageUrl,Recruit recruit, Long orderNum){
46+
return RecruitImage.builder()
47+
.imageUrl(imageUrl)
48+
.recruit(recruit)
49+
.orderNum(orderNum)
50+
.build();
51+
}
52+
53+
public void delete(){this.isDeleted=true;}
4654

4755
public void updateOrderNum(Long orderNum){this.orderNum=orderNum;}
4856

src/main/java/com/clubber/ClubberServer/domain/recruit/dto/PostRecruitRequest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.clubber.ClubberServer.domain.recruit.dto;
22

3+
import com.clubber.ClubberServer.domain.club.domain.Club;
4+
import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
35
import io.swagger.v3.oas.annotations.media.Schema;
46
import jakarta.validation.constraints.NotBlank;
57
import java.util.List;
@@ -27,4 +29,12 @@ public class PostRecruitRequest {
2729
@Schema(description = "모집글 이미지 목록", example = "[\"image1\",\"image2\"]")
2830
private List<String> imageKey;
2931

32+
public Recruit toEntity(Club club) {
33+
return Recruit.builder()
34+
.title(title)
35+
.content(content)
36+
.everytimeUrl(everytimeUrl)
37+
.club(club)
38+
.build();
39+
}
3040
}

src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/PostRecruitCommentRequest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.clubber.ClubberServer.domain.recruit.dto.recruitComment;
22

3+
import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
4+
import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
5+
import com.clubber.ClubberServer.domain.user.domain.User;
36
import io.swagger.v3.oas.annotations.media.Schema;
47
import jakarta.validation.constraints.NotBlank;
58
import jakarta.validation.constraints.Size;
@@ -20,4 +23,12 @@ public class PostRecruitCommentRequest {
2023
@Schema(description = "부모 댓글 id", example = "1")
2124
private Long parentId;
2225

26+
public RecruitComment toEntity(Recruit recruit, User user, RecruitComment parentComment) {
27+
return RecruitComment.builder()
28+
.content(content)
29+
.recruit(recruit)
30+
.user(user)
31+
.parentComment(parentComment)
32+
.build();
33+
}
2334
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.clubber.ClubberServer.domain.recruit.implement;
2+
3+
import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
4+
import com.clubber.ClubberServer.domain.recruit.repository.RecruitRepository;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.stereotype.Component;
7+
8+
@Component
9+
@RequiredArgsConstructor
10+
public class RecruitAppender {
11+
private final RecruitRepository recruitRepository;
12+
public void delete(Recruit recruit) {
13+
recruit.delete();
14+
}
15+
16+
public void increaseTotalView(Recruit recruit) {
17+
recruit.increaseTotalview();
18+
}
19+
20+
public Recruit append(Recruit recruit) {
21+
return recruitRepository.save(recruit);
22+
}
23+
}

src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitCommentAppender.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class RecruitCommentAppender {
1818

1919
public RecruitComment append(PostRecruitCommentRequest request, Recruit recruit, User user) {
2020
RecruitComment parentComment = recruitCommentReader.findParentComment(request.getParentId());
21-
RecruitComment newComment = RecruitComment.of(recruit, user, request.getContent(), parentComment);
21+
RecruitComment newComment = request.toEntity(recruit, user, parentComment);
2222
return recruitCommentRepository.save(newComment);
2323
}
2424

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.clubber.ClubberServer.domain.recruit.implement;
2+
3+
import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
4+
import com.clubber.ClubberServer.domain.recruit.domain.RecruitImage;
5+
import com.clubber.ClubberServer.domain.recruit.repository.RecruitImageRepository;
6+
import com.clubber.ClubberServer.global.vo.image.ImageVO;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.stereotype.Component;
9+
10+
import java.util.List;
11+
import java.util.concurrent.atomic.AtomicLong;
12+
13+
@Component
14+
@RequiredArgsConstructor
15+
public class RecruitImageAppender {
16+
17+
private final RecruitImageRepository recruitImageRepository;
18+
19+
public void deleteRecruitImages(List<RecruitImage> recruitImages) {
20+
recruitImages.stream()
21+
.filter(recruitImage -> !recruitImage.isDeleted())
22+
.forEach(RecruitImage::delete);
23+
}
24+
25+
public List<RecruitImage> appendRecruitImages(List<String> imageKeys, Recruit recruit) {
26+
AtomicLong order = new AtomicLong(1L);
27+
28+
return imageKeys.stream()
29+
.map(imageUrl -> {
30+
ImageVO imageVO = ImageVO.valueOf(imageUrl);
31+
RecruitImage recruitImage = RecruitImage.of(imageVO, recruit, order.getAndIncrement());
32+
return recruitImageRepository.save(recruitImage);
33+
})
34+
.toList();
35+
}
36+
}

src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitReader.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package com.clubber.ClubberServer.domain.recruit.implement;
22

3+
import com.clubber.ClubberServer.domain.club.domain.Club;
34
import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
45
import com.clubber.ClubberServer.domain.recruit.exception.RecruitNotFoundException;
56
import com.clubber.ClubberServer.domain.recruit.repository.RecruitRepository;
67
import lombok.RequiredArgsConstructor;
8+
import org.springframework.data.domain.Page;
9+
import org.springframework.data.domain.Pageable;
710
import org.springframework.stereotype.Component;
811
import org.springframework.transaction.annotation.Transactional;
912

13+
import java.util.List;
14+
1015
@Component
1116
@Transactional(readOnly = true)
1217
@RequiredArgsConstructor
@@ -18,4 +23,21 @@ public Recruit findRecruitById(Long id) {
1823
return recruitRepository.queryRecruitsById(id)
1924
.orElseThrow(() -> RecruitNotFoundException.EXCEPTION);
2025
}
26+
27+
public Page<Recruit> findRecruitPagesByClub(Club club, Pageable pageable) {
28+
return recruitRepository.queryRecruitsByClub(club, pageable);
29+
}
30+
31+
public List<Recruit> findTop5Recruits() {
32+
List<Recruit> recruits = recruitRepository.queryTop5Recruits();
33+
34+
if (recruits.isEmpty()) {
35+
throw RecruitNotFoundException.EXCEPTION;
36+
}
37+
return recruits;
38+
}
39+
40+
public Page<Recruit> findAllRecruits(Pageable pageable) {
41+
return recruitRepository.queryAllRecruits(pageable);
42+
}
2143
}

src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitValidator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.clubber.ClubberServer.domain.recruit.implement;
22

3+
import com.clubber.ClubberServer.domain.admin.domain.Admin;
4+
import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
35
import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
46
import com.clubber.ClubberServer.domain.recruit.exception.RecruitCommentUserUnauthorizedException;
7+
import com.clubber.ClubberServer.domain.recruit.exception.RecruitDeleteUnauthorizedException;
58
import com.clubber.ClubberServer.domain.user.domain.User;
69
import org.springframework.stereotype.Component;
710

@@ -13,4 +16,10 @@ public void validateCommentUser(RecruitComment recruitComment, User currentUser)
1316
throw RecruitCommentUserUnauthorizedException.EXCEPTION;
1417
}
1518
}
19+
20+
public void validateRecruitClub(Recruit recruit, Admin admin) {
21+
if (recruit.getClub() != admin.getClub()) {
22+
throw RecruitDeleteUnauthorizedException.EXCEPTION;
23+
}
24+
}
1625
}

0 commit comments

Comments
 (0)