From 517b98fdabf6d8b3555efe8f76a674476dce885b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9C=ED=98=84?= Date: Thu, 31 Aug 2023 18:52:50 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=20:=20Board=20=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20Redisson=20=EB=B6=84=EC=82=B0?= =?UTF-8?q?=EB=9D=BD=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 5909789 -> 5909789 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/7.6.1/fileHashes/fileHashes.bin | Bin 146183 -> 146333 bytes .../.gradle/7.6.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../7.6.1/fileHashes/resourceHashesCache.bin | Bin 190103 -> 190919 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../controller/ApplicantController.java | 15 +++++ .../card/controller/BoardRestController.java | 21 +------ .../api/card/service/BoardService.java | 52 +++++++----------- .../ApplicantRegisterEventHandler.java | 3 +- .../recruitcommon/consts/RecruitStatic.java | 1 + .../domains/board/adaptor/BoardAdaptor.java | 6 +- .../board/exception/BoardErrorCode.java | 1 + .../exception/BoardSameLocationException.java | 11 ++++ .../recruitdomain/out/BoardLoadPort.java | 3 +- 15 files changed, 56 insertions(+), 57 deletions(-) create mode 100644 server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/board/exception/BoardSameLocationException.java diff --git a/server/.gradle/7.6.1/executionHistory/executionHistory.bin b/server/.gradle/7.6.1/executionHistory/executionHistory.bin index 4025ff8981a271686019e50412190f0e97a937d2..8068a8e13001f6b18a70d6e690472d12879ae89f 100644 GIT binary patch delta 5283 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 delta 4097 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 YvqUtC>}`va9?{&i(O)1|cSF(t0G3-48UO$Q diff --git a/server/.gradle/7.6.1/executionHistory/executionHistory.lock b/server/.gradle/7.6.1/executionHistory/executionHistory.lock index efab3980b9284603c69907d263dc6d93ea58c4ec..8bd408a69baeb55523d51b5f338c5f03360b9735 100644 GIT binary patch literal 17 VcmZSnnEFb{yE#yV0Sq{|0{}3=1W5n@ literal 17 UcmZSnnEFb{yE#yV0Sq|105FsU8~^|S diff --git a/server/.gradle/7.6.1/fileHashes/fileHashes.bin b/server/.gradle/7.6.1/fileHashes/fileHashes.bin index 0aea823981d13bde203e8eb37591ba2026965398..f4dcf7455b1b68bed982778f9e4f253ee12fd86e 100644 GIT binary patch delta 2418 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 W-@VzjdeS=@`$L#Op)G_7g?|A!vGvpd diff --git a/server/.gradle/7.6.1/fileHashes/fileHashes.lock b/server/.gradle/7.6.1/fileHashes/fileHashes.lock index 88737f5b5b40558a9b78b16f1ed5874dfd9d6154..074b0927e5b2dee70205dcf16b639fcb5add5f33 100644 GIT binary patch literal 17 UcmZQh3Jcd*uE#0H00w@p03HVd!T-deiG)Ta zy5UAez1x`>8olZSL7GTnD^V+|QuV4WHUyiHj@o3qX76OCvv=m)IrIB|-~apWCGQ*D zePD3a-4bvp56eJ3#1H%U_jc7ooy`Z%r%-7&(=6ouoy9vnXG&?foeCDP2*k2u3)go% z*1)-~RIulu*23 z5deYY*+3XhS&c+S0c)J<0umW0b9vsNX(@mnyMc$@fiDAzV%9!a&ImPBehPCufqF%s ztbm}WGh;M;8_WEFfj*GnY71yc;DEiL-vltRaU3YoLjx14(riB|?Ka@@1i&=`?b!M% zJOZ&(HYmRYOmVL%tkFfGLkX5Ozh==pJj5|pu!f25_ej`d8`&B<_dQBp-0&%?%iXc$5@NLcU;4T@}4+Un+d(G=XmyL479b3{{L5MK{r<1*$7R4p7jD>>1RbrQu<5E%u zo5v_-T(r;0=QvxgN=aJ?Du~iHc2rNe^r!5~I=bj+_Q?r_p?Erpi^4JvGmG>5En=O= zgGUL1G?YPiqe}lhH^*w3BZapOJHs3G#Tsgr^7^qq=APS~zLHmv-xb$mC-Xpdb{;m}tue#GgwiFa_jQAD~1KyL2oDw$1WYHVlO%l_%Da)HPJR|v8e6d zOG9k+f{n^rIrULCjBnY-K15$&3CV8+T-WqsY2p}4G8ar1_7<;v{jx)S(fsGj!WY#Y zXMb#MxW_Ij`15j6%xQjZ>rLb{rit3N}3yMU=Nqv z|3sZXRjN>OCeqiXZAQ5_d869-Z+Q6o#1PUwY>Enaj?eF&1I!9P+8vg;7w!7T` delta 348 zcmXYsJxBs!7{_^@^DgyLN+b1#LUE96I7-24EI}b7f~*Vzm!eIgz$k+w3>q3*dW$GH zYziXf9UhPt`(A{g58RsDYbX+W!L~pAzxX{otE{e;BVMras5hzbgPw-1v=fr}X}Bh% z_k;8;j3S>H9M}bw8&{@U8h&i&Q!gt3J~orYBG=yLGN93_4$Bt$ia^Xl@gZo~C^`yg z1%qZi=#Z$H0=F9!>deBvLe(X(yTBy5j0L2=O*lFPC*5|TDKn8w(4B^pZ7ek{dA3+R&sTnwmgh(EqC(vZlpht@WJA74lGLB-$UX_Xc)P(uM=T;jK#uD2nt YP@sl6r1KlBTEMLMbN|ufcl=fU0D4q&KL7v# diff --git a/server/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/server/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 9eb1527e0e7f9ad685297d96e818a78ff9e62129..8067f55434d9955de97054762f6960cea336cc11 100644 GIT binary patch literal 17 VcmZSnb8WUx;gm=T1~3p*0RT6I1V{h? literal 17 VcmZSnb8WUx;gm=T1~3pf4gfeM1nK|) diff --git a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/controller/ApplicantController.java b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/controller/ApplicantController.java index ce233b2d..7ad29534 100644 --- a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/controller/ApplicantController.java +++ b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/controller/ApplicantController.java @@ -3,6 +3,7 @@ import static com.econovation.recruitcommon.consts.RecruitStatic.APPLICANT_SUCCESS_REGISTER_MESSAGE; import com.econovation.recruit.api.applicant.docs.CreateApplicantExceptionDocs; +import com.econovation.recruit.api.applicant.usecase.AnswerLoadUseCase; import com.econovation.recruit.api.applicant.usecase.ApplicantRegisterUseCase; import com.econovation.recruit.api.applicant.usecase.QuestionRegisterUseCase; import com.econovation.recruit.api.applicant.usecase.TimeTableLoadUseCase; @@ -36,6 +37,7 @@ public class ApplicantController { private final TimeTableRegisterUseCase timeTableRegisterUseCase; private final TimeTableLoadUseCase timeTableLoadUseCase; private final QuestionRegisterUseCase questionRegisterUseCase; + private final AnswerLoadUseCase answerLoadUseCase; @Operation(summary = "지원자가 지원서를 작성합니다.", description = "반환 값은 생성된 지원자의 ID입니다.") @ApiErrorExceptionsExample(CreateApplicantExceptionDocs.class) @@ -45,6 +47,19 @@ public ResponseEntity registerApplicant(@RequestBody List block return new ResponseEntity<>(applicantId, HttpStatus.OK); } + @Operation(summary = "지원자 id로 지원서를 조회합니다.") + @GetMapping("/applicants/{applicant-id}") + public ResponseEntity> getApplicantById( + @PathVariable(value = "applicant-id") String applicantId) { + return new ResponseEntity<>(answerLoadUseCase.execute(applicantId), HttpStatus.OK); + } + + @Operation(summary = "모든 지원자의 지원서를 조회합니다.") + @GetMapping("/applicants") + public ResponseEntity>> getApplicants() { + return new ResponseEntity<>(answerLoadUseCase.execute(), HttpStatus.OK); + } + @Operation(summary = "지원자가 면접 가능 시간을 작성합니다.") @ApiErrorExceptionsExample(CreateApplicantExceptionDocs.class) @PostMapping("/applicants/{applicant-id}/timetables") diff --git a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/card/controller/BoardRestController.java b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/card/controller/BoardRestController.java index 1d0b8ef3..15976ed2 100644 --- a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/card/controller/BoardRestController.java +++ b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/card/controller/BoardRestController.java @@ -23,7 +23,6 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import java.util.List; -import java.util.Map; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; @@ -128,20 +127,7 @@ public ResponseEntity createWorkBoard( public ResponseEntity updateLocationBoard( @RequestBody UpdateLocationBoardDto updateLocationBoardDto) { boardRecordUseCase.relocateCard(updateLocationBoardDto); - return new ResponseEntity(HttpStatus.OK); - } - - @Operation(summary = "지원자 id로 지원서를 조회합니다.") - @GetMapping("/applicants/{applicant-id}") - public ResponseEntity> getApplicantById( - @PathVariable(value = "applicant-id") String applicantId) { - return new ResponseEntity<>(answerLoadUseCase.execute(applicantId), HttpStatus.OK); - } - - @Operation(summary = "모든 지원자의 지원서를 조회합니다.") - @GetMapping("/applicants") - public ResponseEntity>> getApplicants() { - return new ResponseEntity<>(answerLoadUseCase.execute(), HttpStatus.OK); + return new ResponseEntity(BOARD_SUCCESS_LOCATION_CHANGE_MESSAGE, HttpStatus.OK); } @Operation( @@ -153,11 +139,6 @@ public ResponseEntity> getBoardByNavigationId( return new ResponseEntity<>(cardLoadUseCase.getByNavigationId(navigationId), HttpStatus.OK); } - // @GetMapping("/boards/cards") - // public List getCardAll() { - // return new ArrayList<>(cardLoadUseCase.findAll()); - // } - @Operation(summary = "카드 삭제", description = "카드를 삭제합니다") @PostMapping("/boards/cards/{card-id}/delete") public ResponseEntity deleteCard(Long cardId) { diff --git a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/card/service/BoardService.java b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/card/service/BoardService.java index f168eba4..9e878cba 100644 --- a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/card/service/BoardService.java +++ b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/card/service/BoardService.java @@ -5,12 +5,14 @@ import com.econovation.recruit.api.applicant.usecase.AnswerLoadUseCase; import com.econovation.recruit.api.card.usecase.BoardLoadUseCase; import com.econovation.recruit.api.card.usecase.BoardRegisterUseCase; +import com.econovation.recruitdomain.common.aop.redissonLock.RedissonLock; import com.econovation.recruitdomain.domains.board.domain.Board; import com.econovation.recruitdomain.domains.board.domain.BoardRepository; import com.econovation.recruitdomain.domains.board.domain.CardType; import com.econovation.recruitdomain.domains.board.domain.Columns; import com.econovation.recruitdomain.domains.board.domain.Navigation; import com.econovation.recruitdomain.domains.board.dto.ColumnsResponseDto; +import com.econovation.recruitdomain.domains.board.exception.BoardSameLocationException; import com.econovation.recruitdomain.domains.board.exception.InvalidHopeFieldException; import com.econovation.recruitdomain.domains.dto.UpdateLocationBoardDto; import com.econovation.recruitdomain.out.BoardLoadPort; @@ -19,6 +21,7 @@ import com.econovation.recruitdomain.out.ColumnRecordPort; import com.econovation.recruitdomain.out.NavigationLoadPort; import java.util.List; +import java.util.Optional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.messaging.simp.SimpMessagingTemplate; @@ -289,15 +292,18 @@ public List getColumnsByNavigationId(Integer navigationId) { @Override @Transactional - // @RedissonLock(LockName = "지원서", - // paramClassType = UpdateLocationBoardDto.class, - // identifier = "boardId", - // needSameTransaction = true) + @RedissonLock( + LockName = "보드 위치 변경", + identifier = "boardId", + paramClassType = UpdateLocationBoardDto.class) public void relocateCard(UpdateLocationBoardDto updateLocationBoardDto) { Board currentBoard = boardLoadPort.getBoardById(updateLocationBoardDto.getBoardId()); Board targetBoard = boardLoadPort.getBoardById(updateLocationBoardDto.getTargetBoardId()); - // Update nextBoardId + // 같은 board 끼리는 위치 변경이 불가하다. + if (currentBoard.getId().equals(targetBoard.getId())) + throw BoardSameLocationException.EXCEPTION; + updateNextBoardIds(currentBoard, targetBoard); // TODO: Send data to the socket server @@ -305,35 +311,19 @@ public void relocateCard(UpdateLocationBoardDto updateLocationBoardDto) { } private void updateNextBoardIds(Board board1, Board board2) { - Board board1Next = boardLoadPort.getByNextBoardId(board1.getId()); - Board board2Next = boardLoadPort.getByNextBoardId(board2.getId()); + Optional board1Prev = boardLoadPort.getByNextBoardId(board1.getId()); + Optional board2Prev = boardLoadPort.getByNextBoardId(board2.getId()); // Update nextBoardId references - if (board2.getNextBoardId() != null) { - board2.updateNextBoardID(board1.getNextBoardId()); + if (board1Prev.isPresent()) { + board1Prev.get().updateNextBoardID(board2.getId()); } - - if (board1.getNextBoardId() != null) { - board1.updateNextBoardID(board2.getId()); + if (board2Prev.isPresent()) { + board2Prev.get().updateNextBoardID(board1.getId()); } - - if (board1Next != null && board2.getNextBoardId() != null) { - board1Next.updateNextBoardID(board2.getId()); - } - - if (board2Next != null && board1.getNextBoardId() != null) { - board2Next.updateNextBoardID(board1.getId()); - } - } - - /* - @Override - public boolean isDuplicateLocation(Integer navLoc, Integer columnId, Integer boardId) { - Map location = new HashMap<>(); - location.put("columnId", columnId); - location.put("boardId", boardId); - Board boardByLocation = boardLoadPort.getBoardByLocation(navLoc, colLoc, boardId); - return false; + Integer board2NextBoardId = board2.getNextBoardId(); + Integer board1NextBoardId = board1.getNextBoardId(); + board1.updateNextBoardID(board2NextBoardId); + board2.updateNextBoardID(board1NextBoardId); } - */ } diff --git a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/slack/handler/ApplicantRegisterEventHandler.java b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/slack/handler/ApplicantRegisterEventHandler.java index 5bdf465e..371fb1ec 100644 --- a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/slack/handler/ApplicantRegisterEventHandler.java +++ b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/slack/handler/ApplicantRegisterEventHandler.java @@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionalEventListener; @@ -28,7 +29,7 @@ public class ApplicantRegisterEventHandler { @TransactionalEventListener( classes = ApplicantRegisterEvent.class, phase = TransactionPhase.AFTER_COMMIT) - @Transactional + @Transactional(propagation = Propagation.REQUIRES_NEW) public void handle(ApplicantRegisterEvent applicantRegistEvent) { String message = generateApplicantRegisterMessage(applicantRegistEvent); diff --git a/server/Recruit-Common/src/main/java/com/econovation/recruitcommon/consts/RecruitStatic.java b/server/Recruit-Common/src/main/java/com/econovation/recruitcommon/consts/RecruitStatic.java index 78c99afe..1733cf3d 100644 --- a/server/Recruit-Common/src/main/java/com/econovation/recruitcommon/consts/RecruitStatic.java +++ b/server/Recruit-Common/src/main/java/com/econovation/recruitcommon/consts/RecruitStatic.java @@ -50,6 +50,7 @@ public class RecruitStatic { public static final String NO_MATCH_RECORD = "해당하는 RECORD가 존재하지 않습니다"; public static final String RECORD_SUCCESS_CREATE_MESSAGE = "성공적으로 지원자의 면접 기록이 생성됐습니다"; public static final String COLUMN_SUCCESS_REGISTER_MESSAGE = "성공적으로 Column이 등록됐습니다"; + public static final String BOARD_SUCCESS_LOCATION_CHANGE_MESSAGE = "성공적으로 카드의 위치가 변경되었습니다."; public static final List> SUBMIT_APPLICANT_EVENT_SEPERATOR_LIST = new ArrayList>( List.of( diff --git a/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/board/adaptor/BoardAdaptor.java b/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/board/adaptor/BoardAdaptor.java index 0e0d903d..ffb11a4e 100644 --- a/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/board/adaptor/BoardAdaptor.java +++ b/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/board/adaptor/BoardAdaptor.java @@ -42,10 +42,8 @@ public List getBoardByNavLoc(Integer navigationId) { } @Override - public Board getByNextBoardId(Integer nextBoardId) { - return boardRepository - .findByNextBoardId(nextBoardId) - .orElseThrow(() -> BoardNotFoundException.EXCEPTION); + public Optional getByNextBoardId(Integer nextBoardId) { + return boardRepository.findByNextBoardId(nextBoardId); } @Override diff --git a/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/board/exception/BoardErrorCode.java b/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/board/exception/BoardErrorCode.java index a51f6076..408c9b03 100644 --- a/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/board/exception/BoardErrorCode.java +++ b/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/board/exception/BoardErrorCode.java @@ -17,6 +17,7 @@ public enum BoardErrorCode implements BaseErrorCode { BOARD_INVALID_LOCATION(BAD_REQUEST, "BOARD_400_1", "유효하지 않은 위치입니다."), INVALID_HOPE_FIELD(BAD_REQUEST, "BOARD_400_2", "유효하지 않은 희망 분야입니다."), BOARD_NOT_FOUND(NOT_FOUND, "BOARD_400_3", "보드를 찾을 수 없습니다."), + BOARD_SAME_LOCATION(BAD_REQUEST, "BOARD_400_4", "같은 위치에 보드 사이는 수정이 불가합니다"), ; private Integer status; diff --git a/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/board/exception/BoardSameLocationException.java b/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/board/exception/BoardSameLocationException.java new file mode 100644 index 00000000..5d8c59d3 --- /dev/null +++ b/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/board/exception/BoardSameLocationException.java @@ -0,0 +1,11 @@ +package com.econovation.recruitdomain.domains.board.exception; + +import com.econovation.recruitcommon.exception.RecruitCodeException; + +public class BoardSameLocationException extends RecruitCodeException { + public static final BoardSameLocationException EXCEPTION = new BoardSameLocationException(); + + private BoardSameLocationException() { + super(BoardErrorCode.BOARD_SAME_LOCATION); + } +} diff --git a/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/out/BoardLoadPort.java b/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/out/BoardLoadPort.java index 41990f22..b0e03a18 100644 --- a/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/out/BoardLoadPort.java +++ b/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/out/BoardLoadPort.java @@ -2,6 +2,7 @@ import com.econovation.recruitdomain.domains.board.domain.Board; import java.util.List; +import java.util.Optional; public interface BoardLoadPort { Board getBoardById(Integer id); @@ -12,7 +13,7 @@ public interface BoardLoadPort { List getBoardByNavLoc(Integer navLoc); - Board getByNextBoardId(Integer id); + Optional getByNextBoardId(Integer id); List getBoardByColumnsIds(List columnsIds); }