Skip to content

Commit

Permalink
Merge pull request #112 from Gongjakso/fix/post
Browse files Browse the repository at this point in the history
�fix: 모집연장 및 기존 오류 수정
  • Loading branch information
dl-00-e8 authored Apr 21, 2024
2 parents 5f79f2c + b6fb140 commit b951676
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,14 @@ public Post(String title, Member member, String contents, String contestLink, Lo
this.daysRemaining = finishDate.isBefore(LocalDateTime.now()) ? -1 : ChronoUnit.DAYS.between(LocalDateTime.now(), finishDate);
this.stackNames = stackNames;
this.categories = categories;
this.postView = 0L;
}

public void modify(PostModifyReq req) {
this.title = req.title();
this.contents = req.contents();
this.contestLink = req.contestLink();
this.status = req.status();
this.status = (this.finishDate.isEqual(req.finishDate())) ? req.status() : PostStatus.EXTENSION;
this.startDate = req.startDate();
this.endDate = req.endDate();
this.finishDate = req.finishDate();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
package com.gongjakso.server.domain.post.enumerate;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum PostStatus {
RECRUITING,
CANCEL,
CLOSE,
ACTIVE,
COMPLETE,
EXTENSION

RECRUITING("모집 중"),
CANCEL("모집 취소"),
CLOSE("모집 마감"),
ACTIVE("활동 중"),
COMPLETE("모집 완료"),
EXTENSION("모집 연장");

private final String status;
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.gongjakso.server.global.exception.ApplicationException;
import com.gongjakso.server.global.security.PrincipalDetails;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.Hibernate;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
Expand All @@ -30,23 +31,27 @@
import static com.gongjakso.server.domain.post.enumerate.PostStatus.RECRUITING;
import static com.gongjakso.server.global.exception.ErrorCode.*;


@Slf4j
@Service
@RequiredArgsConstructor
public class PostService {

private final PostRepository postRepository;
private final PostScrapRepository postScrapRepository;
private final ApplyRepository applyRepository;

@Transactional
public PostRes create(Member member, PostReq req) {
// Validation - 공고/프로젝트별 1개의 모집 공고만 활성화되어 있는지 유효성 검사
if (!req.postType() && postRepository.countByMemberAndPostTypeFalseAndDeletedAtIsNullAndFinishDateAfterAndStatus(member, LocalDateTime.now(), RECRUITING) > 0) { //공모전 공고 모집 개수 제한
throw new ApplicationException(NOT_POST_EXCEPTION);
}
if (req.postType() && postRepository.countByMemberAndPostTypeTrueAndDeletedAtIsNullAndFinishDateAfterAndStatus(member, LocalDateTime.now(), RECRUITING) > 0) { //프로젝트 공고 모집 개수 제한
throw new ApplicationException(NOT_POST_EXCEPTION);
}

// Business Logic
// TODO: new 방식으로 서비스에서 생성하는 것이 아닌, DTO 내의 메소드를 활용하도록 변경하는 것은 어떤지 고려할 필요 존재
Post entity = new Post(req.title(), member, req.contents(), req.contestLink(), req.startDate(), req.endDate(),
req.finishDate(), req.maxPerson(), req.meetingMethod(), req.meetingCity(), req.meetingTown(), req.questionMethod(),
req.questionLink(), req.postType(), new ArrayList<>(), new ArrayList<>());
Expand All @@ -60,9 +65,10 @@ public PostRes create(Member member, PostReq req) {
.map(categoryReq -> new Category(entity, categoryReq.getCategoryType().toString(), categoryReq.getSize()))
.toList();
entity.getCategories().addAll(categories);
Post savePost = postRepository.save(entity);

postRepository.save(entity);
return PostRes.of(entity);
// Response
return PostRes.of(savePost);
}

@Transactional
Expand Down Expand Up @@ -90,11 +96,14 @@ public Optional<?> read(PrincipalDetails principalDetails, Long id, String role)

@Transactional
public PostRes modify(Member member, Long id, PostModifyReq req) {
// Validation - 공고 존재 여부 및 공고 게시자 여부 확인
Post entity = postRepository.findByPostIdAndDeletedAtIsNull(id)
.orElseThrow(() -> new ApplicationException(NOT_FOUND_POST_EXCEPTION));
if(!member.getMemberId().equals(entity.getMember().getMemberId())){
throw new ApplicationException(UNAUTHORIZED_EXCEPTION);
}

// Business Logic
entity.modify(req);

entity.getStackNames().clear();
Expand All @@ -109,6 +118,7 @@ public PostRes modify(Member member, Long id, PostModifyReq req) {
.toList();
entity.getCategories().addAll(categories);

// Response
return PostRes.of(entity);
}

Expand Down Expand Up @@ -137,6 +147,7 @@ public Page<GetContestRes> getContests(String sort, Pageable page) throws Applic
} else{ //스크랩순
posts = postRepository.findAllByPostTypeFalseAndDeletedAtIsNullAndFinishDateAfterAndStatusOrderByScrapCountDescCreatedAtDesc(LocalDateTime.now(), RECRUITING, pageable);
}

posts.forEach(post -> post.getCategories().size());
return posts.map(post -> GetContestRes.of(post));
}
Expand All @@ -154,6 +165,7 @@ public Page<GetContestRes> getContestsBySearchWord(String sort, String searchWor
} else{
posts = postRepository.findAllByTitleContainsAndPostTypeFalseAndDeletedAtIsNullAndFinishDateAfterAndStatusOrderByScrapCountDescCreatedAtDesc(searchWord.toLowerCase(), LocalDateTime.now(), RECRUITING, pageable);
}

posts.forEach(post -> post.getCategories().size());
return posts.map(post -> GetContestRes.of(post));
}
Expand Down Expand Up @@ -257,7 +269,7 @@ public Page<GetProjectRes> getProjectsByMeetingAreaAndStackNameAndSearchWord(
posts = postRepository.findAllByTitleContainsAndPostTypeTrueAndDeletedAtIsNullAndFinishDateAfterAndStatusAndMeetingCityContainsAndMeetingTownContainsOrderByScrapCountDescCreatedAtDesc(searchWord.toLowerCase(), LocalDateTime.now(), RECRUITING, meetingCity,meetingTown, pageable);
}
posts.forEach(post -> post.getCategories().size());
return posts.map(post -> GetProjectRes.of(post));
return posts.map(GetProjectRes::of);
}
}

Expand All @@ -282,7 +294,7 @@ public PostScrapRes scrapPost(Member member, Long postId) {
.build();
post.setScrapCount(post.getScrapCount() + 1);
} else { // 스크랩 한 적 있는 경우
if (postScrap.getScrapStatus() == true) { //스크랩한 상태면 취소
if (postScrap.getScrapStatus()) { //스크랩한 상태면 취소
postScrap.setScrapStatus(false);
if (post.getScrapCount() > 0) post.setScrapCount(post.getScrapCount() - 1);
else throw new ApplicationException(INVALID_VALUE_EXCEPTION);
Expand Down Expand Up @@ -315,18 +327,16 @@ public List<MyPageRes> getMyPostList(Member member) {
// Business Logic
List<Post> postList = postRepository.findAllByMemberAndStatusAndDeletedAtIsNull(member, RECRUITING);

List<MyPageRes> myPageResList = postList.stream()
// Return
return postList.stream()
.map(post -> {
List<String> categoryList = post.getCategories().stream()
.map(category -> category.getCategoryType().toString())
.toList();
List<String> categoryList = post.getCategories().stream()
.map(category -> category.getCategoryType().toString())
.toList();

return MyPageRes.of(post, member, categoryList);
})
return MyPageRes.of(post, member, categoryList);
})
.collect(Collectors.toList());

// Return
return myPageResList;
}

public GetPostRelation checkPostRelation(Member member, Long postId) {
Expand Down

0 comments on commit b951676

Please sign in to comment.