Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import com.back.catchmate.domain.enroll.dto.EnrollRequest.CreateEnrollRequest;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CancelEnrollInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CreateEnrollInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.NewEnrollCountInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollReceiveInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollRequestInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.UpdateEnrollInfo;
import com.back.catchmate.domain.enroll.service.EnrollService;
import com.back.catchmate.global.jwt.JwtValidation;
import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -17,6 +19,7 @@
import org.springframework.data.web.PageableDefault;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
Expand Down Expand Up @@ -68,4 +71,24 @@ public PagedEnrollReceiveInfo getReceiveEnrollListByBoardId(@JwtValidation Long
@Parameter(hidden = true) Pageable pageable) {
return enrollService.getReceiveEnrollListByBoardId(userId, boardId, pageable);
}

@GetMapping("/new-count")
@Operation(summary = "내가 작성한 게시글에 대한 새로운 직관 신청 갯수 반환 API", description = "내가 작성한 게시글에 대한 새로윤 직관 신청 갯수를 반환하는 API 입니다.")
public NewEnrollCountInfo getNewEnrollmentListCount(@JwtValidation Long userId) {
return enrollService.getNewEnrollListCount(userId);
}

@PatchMapping("/{enrollId}/accept")
@Operation(summary = "받은 직관 신청 수락 API", description = "내가 받은 직관 신청을 수락하는 API 입니다.")
public UpdateEnrollInfo acceptEnroll(@PathVariable Long enrollId,
@JwtValidation Long userId) {
return enrollService.acceptEnroll(enrollId, userId);
}

@PatchMapping("/{enrollId}/reject")
@Operation(summary = "받은 직관 신청 거절 API", description = "내가 받은 직관 신청을 거절하는 API 입니다.")
public UpdateEnrollInfo rejectEnroll(@PathVariable Long enrollId,
@JwtValidation Long userId) {
return enrollService.rejectEnroll(enrollId, userId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@
import com.back.catchmate.domain.board.dto.BoardResponse.BoardInfo;
import com.back.catchmate.domain.board.entity.Board;
import com.back.catchmate.domain.enroll.dto.EnrollRequest.CreateEnrollRequest;
import com.back.catchmate.domain.enroll.dto.EnrollResponse;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CancelEnrollInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CreateEnrollInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.EnrollReceiveInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.EnrollRequestInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.NewEnrollCountInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollReceiveInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollRequestInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.UpdateEnrollInfo;
import com.back.catchmate.domain.enroll.entity.AcceptStatus;
import com.back.catchmate.domain.enroll.entity.Enroll;
import com.back.catchmate.domain.user.converter.UserConverter;
Expand Down Expand Up @@ -106,4 +109,17 @@ public EnrollReceiveInfo toEnrollReceiveInfo(Enroll enroll, UserInfo userInfo, B
.boardInfo(boardInfo)
.build();
}

public NewEnrollCountInfo toNewEnrollCountResponse(int enrollListCount) {
return NewEnrollCountInfo.builder()
.newEnrollCount(enrollListCount)
.build();
}

public UpdateEnrollInfo toUpdateEnrollInfo(Enroll enroll, AcceptStatus acceptStatus) {
return UpdateEnrollInfo.builder()
.enrollId(enroll.getId())
.acceptStatus(acceptStatus)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,7 @@ public interface EnrollRepository extends JpaRepository<Enroll, Long> {
Page<Enroll> findEnrollListByBoardWriter(@Param("userId") Long userId, Pageable pageable);

Page<Enroll> findByBoardId(Long boardId, Pageable pageable);

@Query("SELECT COUNT(e) FROM Enroll e JOIN e.board b WHERE e.isNew = true AND b.user.id = :userId")
int countNewEnrollListByUserId(@Param("userId") Long userId);
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package com.back.catchmate.domain.enroll.service;

import com.back.catchmate.domain.enroll.dto.EnrollRequest.CreateEnrollRequest;
import com.back.catchmate.domain.enroll.dto.EnrollResponse;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CancelEnrollInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CreateEnrollInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.NewEnrollCountInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollReceiveInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollRequestInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.UpdateEnrollInfo;
import org.springframework.data.domain.Pageable;

import java.io.IOException;

public interface EnrollService {
CreateEnrollInfo requestEnroll(CreateEnrollRequest request, Long boardId, Long userId);

Expand All @@ -18,4 +23,9 @@ public interface EnrollService {

PagedEnrollReceiveInfo getReceiveEnrollListByBoardId(Long userId, Long boardId, Pageable pageable);

NewEnrollCountInfo getNewEnrollListCount(Long userId);

UpdateEnrollInfo acceptEnroll(Long enrollId, Long userId);

UpdateEnrollInfo rejectEnroll(Long enrollId, Long userId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,12 @@
import com.back.catchmate.domain.enroll.converter.EnrollConverter;
import com.back.catchmate.domain.enroll.dto.EnrollRequest.CreateEnrollRequest;
import com.back.catchmate.domain.enroll.dto.EnrollResponse;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CancelEnrollInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CreateEnrollInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollReceiveInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollRequestInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.UpdateEnrollInfo;
import com.back.catchmate.domain.enroll.entity.AcceptStatus;
import com.back.catchmate.domain.enroll.entity.Enroll;
import com.back.catchmate.domain.enroll.repository.EnrollRepository;
import com.back.catchmate.domain.user.entity.User;
Expand All @@ -16,6 +21,7 @@
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
Expand All @@ -26,6 +32,7 @@ public class EnrollServiceImpl implements EnrollService {
private final EnrollConverter enrollConverter;

@Override
@Transactional
public CreateEnrollInfo requestEnroll(CreateEnrollRequest request, Long boardId, Long userId) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new BaseException(ErrorCode.USER_NOT_FOUND));
Expand All @@ -48,7 +55,8 @@ public CreateEnrollInfo requestEnroll(CreateEnrollRequest request, Long boardId,
}

@Override
public EnrollResponse.CancelEnrollInfo cancelEnroll(Long enrollId, Long userId) {
@Transactional
public CancelEnrollInfo cancelEnroll(Long enrollId, Long userId) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new BaseException(ErrorCode.USER_NOT_FOUND));

Expand All @@ -65,7 +73,8 @@ public EnrollResponse.CancelEnrollInfo cancelEnroll(Long enrollId, Long userId)
}

@Override
public EnrollResponse.PagedEnrollRequestInfo getRequestEnrollList(Long userId, Pageable pageable) {
@Transactional(readOnly = true)
public PagedEnrollRequestInfo getRequestEnrollList(Long userId, Pageable pageable) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new BaseException(ErrorCode.USER_NOT_FOUND));

Expand All @@ -74,7 +83,8 @@ public EnrollResponse.PagedEnrollRequestInfo getRequestEnrollList(Long userId, P
}

@Override
public EnrollResponse.PagedEnrollReceiveInfo getReceiveEnrollList(Long userId, Pageable pageable) {
@Transactional(readOnly = true)
public PagedEnrollReceiveInfo getReceiveEnrollList(Long userId, Pageable pageable) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new BaseException(ErrorCode.USER_NOT_FOUND));

Expand All @@ -83,7 +93,8 @@ public EnrollResponse.PagedEnrollReceiveInfo getReceiveEnrollList(Long userId, P
}

@Override
public EnrollResponse.PagedEnrollReceiveInfo getReceiveEnrollListByBoardId(Long userId, Long boardId, Pageable pageable) {
@Transactional(readOnly = true)
public PagedEnrollReceiveInfo getReceiveEnrollListByBoardId(Long userId, Long boardId, Pageable pageable) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new BaseException(ErrorCode.USER_NOT_FOUND));

Expand All @@ -99,4 +110,55 @@ public EnrollResponse.PagedEnrollReceiveInfo getReceiveEnrollListByBoardId(Long
Page<Enroll> enrollList = enrollRepository.findByBoardId(boardId, pageable);
return enrollConverter.toPagedEnrollReceiveInfo(enrollList);
}

@Override
@Transactional(readOnly = true)
public EnrollResponse.NewEnrollCountInfo getNewEnrollListCount(Long userId) {
int enrollListCount = enrollRepository.countNewEnrollListByUserId(userId);
return enrollConverter.toNewEnrollCountResponse(enrollListCount);
}

@Override
@Transactional
public UpdateEnrollInfo acceptEnroll(Long enrollId, Long userId) {
User loginUser = userRepository.findById(userId)
.orElseThrow(() -> new BaseException(ErrorCode.USER_NOT_FOUND));

Enroll enroll = enrollRepository.findById(enrollId)
.orElseThrow(() -> new BaseException(ErrorCode.ENROLL_NOT_FOUND));

User boardWriter = enroll.getBoard().getUser();
User enrollApplicant = userRepository.findById(enroll.getUser().getId())
.orElseThrow(() -> new BaseException(ErrorCode.USER_NOT_FOUND));

// 게시글 작성자와 로그인한 사용자가 다를 경우 예외 발생
if (loginUser.isDifferentUserFrom(boardWriter)) {
throw new BaseException(ErrorCode.ENROLL_ACCEPT_INVALID);
}

enroll.setAcceptStatus(AcceptStatus.ACCEPTED);
return enrollConverter.toUpdateEnrollInfo(enroll, AcceptStatus.ACCEPTED);
}

@Override
@Transactional
public UpdateEnrollInfo rejectEnroll(Long enrollId, Long userId) {
User loginUser = userRepository.findById(userId)
.orElseThrow(() -> new BaseException(ErrorCode.USER_NOT_FOUND));

Enroll enroll = enrollRepository.findById(enrollId)
.orElseThrow(() -> new BaseException(ErrorCode.ENROLL_NOT_FOUND));

User boardWriter = enroll.getBoard().getUser();
User enrollApplicant = userRepository.findById(enroll.getUser().getId())
.orElseThrow(() -> new BaseException(ErrorCode.USER_NOT_FOUND));

// 게시글 작성자와 로그인한 사용자가 다를 경우 예외 발생
if (loginUser.isDifferentUserFrom(boardWriter)) {
throw new BaseException(ErrorCode.ENROLL_REJECT_INVALID);
}

enroll.setAcceptStatus(AcceptStatus.REJECTED);
return enrollConverter.toUpdateEnrollInfo(enroll, AcceptStatus.REJECTED);
}
}
4 changes: 4 additions & 0 deletions src/main/java/com/back/catchmate/domain/user/entity/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -141,4 +141,8 @@ public void updateFcmToken(String fcmToken) {
public void deleteFcmToken() {
this.fcmToken = null;
}

public boolean isDifferentUserFrom(User boardWriter) {
return !this.equals(boardWriter);
}
}
Loading