From f7cb8b910e13a2b1c71c26cca09fccd205dfc8ba Mon Sep 17 00:00:00 2001 From: Kyuu Date: Mon, 6 Feb 2023 21:30:20 +0900 Subject: [PATCH 01/21] =?UTF-8?q?[FIX]=20=EC=86=90=EB=8B=98=ED=98=B8?= =?UTF-8?q?=EC=B6=9C/=EC=9E=85=EC=9E=A5=EC=B2=98=EB=A6=AC=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/js/admin.js | 36 +++++++++++++-------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/main/resources/static/js/admin.js b/src/main/resources/static/js/admin.js index 4f96005..c2a53b0 100644 --- a/src/main/resources/static/js/admin.js +++ b/src/main/resources/static/js/admin.js @@ -1,5 +1,5 @@ -const baseUrl = "https://pintable.co.kr"; -// const baseUrl = "http://localhost:8080"; +// const baseUrl = "https://pintable.co.kr"; +const baseUrl = "http://localhost:8080"; window.onload = function () { EnterStatus(); @@ -52,7 +52,7 @@ function EnterStatus() { const statusData = JSON.stringify(response.data); var status = JSON.parse(statusData); - if(Object.keys(status).length != 0){ + if (Object.keys(status).length != 0) { let rows = status; @@ -66,15 +66,15 @@ function EnterStatus() { ${waitingNum} ${waitingUserName} ${waitingStatus} - - - - - - - - - + + + + + + + + + ` $('#waitingList').append(temp_html) } @@ -97,7 +97,7 @@ function LimitSetup() { method: "put", url: baseUrl + api + id, data: JSON.stringify( - {limitWaitingCnt : limit_number } + {limitWaitingCnt: limit_number} ), headers: { "Content-Type": "application/json; charset=utf-8" @@ -112,18 +112,16 @@ function LimitSetup() { } // 입장 확인 -function EnterConfirm() { +function EnterConfirm(waitingUserName) { var getId = localStorage.getItem("storeId"); //데이터를 key로 꺼냄 const id = JSON.parse(getId); //문자열을 객체(json)으로 변환 - let username = document.querySelector('#username').innerHTML; - const api = '/api/storeStatus/confirmEnter/' + id; axios({ method: "put", url: baseUrl + api, data: JSON.stringify( - {username : username, waitingStatus : 1} + {username: waitingUserName, waitingStatus: 1} ), headers: { "Content-Type": "application/json; charset=utf-8" @@ -138,7 +136,7 @@ function EnterConfirm() { } // 퇴장확인 API 연동 -function ExitConfirm(){ +function ExitConfirm() { var getId = localStorage.getItem("storeId"); //데이터를 key로 꺼냄 const id = JSON.parse(getId); //문자열을 객체(json)으로 변환 const api = '/api/storeStatus/leave/' + id; @@ -179,7 +177,7 @@ function getStoreAdminInfo() { const storeAdmin = JSON.parse(transferStoreAdmin); document.getElementById("storeName").innerHTML = storeAdmin.storeName; document.getElementById("totalWaiting").innerHTML = "총 대기팀 수 : " + storeAdmin.numberOfTeamsWaiting + "팀"; - document.getElementById("useCustomer").innerHTML = "이용중인 고객수 : " + storeAdmin.numberOfCustomersInUse +"팀"; + document.getElementById("useCustomer").innerHTML = "이용중인 고객수 : " + storeAdmin.numberOfCustomersInUse + "팀"; }) .catch(function (error) { From cfe62ed58c9db09835cbabe547cf104f5fb94b0f Mon Sep 17 00:00:00 2001 From: Kyuu Date: Mon, 6 Feb 2023 21:37:07 +0900 Subject: [PATCH 02/21] =?UTF-8?q?[FIX]=20=EC=86=90=EB=8B=98=ED=98=B8?= =?UTF-8?q?=EC=B6=9C/=EC=9E=85=EC=9E=A5=EC=B2=98=EB=A6=AC=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/js/admin.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/static/js/admin.js b/src/main/resources/static/js/admin.js index c2a53b0..2efd4e2 100644 --- a/src/main/resources/static/js/admin.js +++ b/src/main/resources/static/js/admin.js @@ -1,5 +1,5 @@ -// const baseUrl = "https://pintable.co.kr"; -const baseUrl = "http://localhost:8080"; +const baseUrl = "https://pintable.co.kr"; +// const baseUrl = "http://localhost:8080"; window.onload = function () { EnterStatus(); From 8e8add6b1a8e19d8e2ed08680d8a4baeaa29b0d5 Mon Sep 17 00:00:00 2001 From: Kyuu Date: Mon, 6 Feb 2023 21:37:45 +0900 Subject: [PATCH 03/21] =?UTF-8?q?[FIX]=20=EC=86=90=EB=8B=98=ED=98=B8?= =?UTF-8?q?=EC=B6=9C/=EC=9E=85=EC=9E=A5=EC=B2=98=EB=A6=AC=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/js/admin.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/resources/static/js/admin.js b/src/main/resources/static/js/admin.js index 2efd4e2..eb1479a 100644 --- a/src/main/resources/static/js/admin.js +++ b/src/main/resources/static/js/admin.js @@ -24,12 +24,10 @@ function callpeople() { }, }) .then(function (response) { - // console.log("RESPONSE : " + JSON.stringify(response.data)); alert("고객 호출 !") location.reload(); }) .catch(function (error) { - // console.log("ERROR : " + JSON.stringify(error)); }); } From c42b9b1cb40e074d4fc56b21c1d52dcef5fe6e37 Mon Sep 17 00:00:00 2001 From: hongdangmoo49 Date: Tue, 7 Feb 2023 00:02:26 +0900 Subject: [PATCH 04/21] =?UTF-8?q?REFACTOR:=20WaitingService=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC=20=EB=B0=8F=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/exception/CustomException.java | 4 + .../store/service/StoreService.java | 13 ++- .../waiting/controller/WaitingController.java | 12 +-- .../waiting/dto/MyTurnResponseDto.java | 11 ++- .../waiting/dto/WaitingMsgResponseDto.java | 11 +++ .../waiting/repository/WaitingRepository.java | 2 +- .../waiting/service/WaitingService.java | 83 +++++++++---------- 7 files changed, 76 insertions(+), 60 deletions(-) create mode 100644 src/main/java/com/example/pirate99_final/waiting/dto/WaitingMsgResponseDto.java diff --git a/src/main/java/com/example/pirate99_final/global/exception/CustomException.java b/src/main/java/com/example/pirate99_final/global/exception/CustomException.java index aa75ae4..4041cdf 100644 --- a/src/main/java/com/example/pirate99_final/global/exception/CustomException.java +++ b/src/main/java/com/example/pirate99_final/global/exception/CustomException.java @@ -19,5 +19,9 @@ public CustomException(int statusCode, String msg) { this.msg = msg; // 안내 문구 this.statusCode = statusCode; // 상태 코드 } + public CustomException(int statusCode, ErrorCode errorCode) { + this.msg = msg; // 안내 문구 + this.statusCode = statusCode; // 상태 코드 + } } \ No newline at end of file diff --git a/src/main/java/com/example/pirate99_final/store/service/StoreService.java b/src/main/java/com/example/pirate99_final/store/service/StoreService.java index cadb07a..d651f12 100644 --- a/src/main/java/com/example/pirate99_final/store/service/StoreService.java +++ b/src/main/java/com/example/pirate99_final/store/service/StoreService.java @@ -275,8 +275,7 @@ private String setContext(String mailform) { @Transactional public MsgResponseDto limitWaitingCnt(Long storeId, LimitWaitingCntRequestDto requestDto) throws MessagingException { - int totalWaitingCnt, limitWaitingCnt = 0; - + int limitWaitingCnt = 0; // 1. find store Store store = storeRepository.findById(storeId).orElseThrow(() -> @@ -295,7 +294,7 @@ public MsgResponseDto limitWaitingCnt(Long storeId, LimitWaitingCntRequestDto re limitWaitingCnt = storeStatus.getLimitWaitingCnt(); - + int waitingCnt = storeStatus.getWaitingCnt(); // 대기인원 제한이 '0'인 경우 'default' 값인 무한으로 설정 if (limitWaitingCnt == 1000) { @@ -318,18 +317,18 @@ public MsgResponseDto limitWaitingCnt(Long storeId, LimitWaitingCntRequestDto re // 대기취소 상태로 변경 waiting_person.update(3); + waitingCnt = storeStatus.getWaitingCnt() - 1; MimeMessage emailForm = createEmailForm(toEmail, title, mailForm); emailSender.send(emailForm); - return new MsgResponseDto(CONFIRM_ENTER); - - } + storeStatus.update_waitingCnt(waitingCnt, storeStatus.getAvailableTableCnt()); return new MsgResponseDto(ErrorCode.WRONG_LIMIT_WAITING_ERROR); } + return null; } @@ -572,7 +571,7 @@ public StoreResponseDto getStoreAdminInfo(Long storeId) { StoreStatus storeStatus = storeStatusRepository.findByStore(store); - List waitingTeams = waitingRepository.findAllByStoreStatusAndWaitingStatusOrWaitingStatusOrderByWaitingIdAsc(storeStatus, 0, 1); + List waitingTeams = waitingRepository.waitingList(0, 1, storeStatus.getStoreStatusId()); int numberOfTeamsWaiting = waitingTeams.size(); diff --git a/src/main/java/com/example/pirate99_final/waiting/controller/WaitingController.java b/src/main/java/com/example/pirate99_final/waiting/controller/WaitingController.java index 4d79361..2cb5962 100644 --- a/src/main/java/com/example/pirate99_final/waiting/controller/WaitingController.java +++ b/src/main/java/com/example/pirate99_final/waiting/controller/WaitingController.java @@ -28,15 +28,15 @@ public MyTurnResponseDto getMyTurn(@PathVariable Long storeId, @RequestBody Wait return waitingService.getMyTurn(storeId, requestDto); } - @GetMapping("/waitingList/{storeId}/{waitingId}") - public WaitingResponseDto getWaiter(@PathVariable Long storeId, @PathVariable Long waitingId) { + @GetMapping("/waitingList/{waitingId}") + public WaitingResponseDto getWaiter(@PathVariable Long waitingId) { - return waitingService.getWaiter(storeId, waitingId); + return waitingService.getWaiter(waitingId); } - @PutMapping("/waitingList/{storeId}/{waitingId}") - public MsgResponseDto deleteWaiter(@PathVariable Long storeId, @PathVariable Long waitingId) { - return waitingService.deleteWaiter(storeId, waitingId); + @PutMapping("/waitingList/{waitingId}") + public MsgResponseDto deleteWaiter(@PathVariable Long waitingId) { + return waitingService.deleteWaiter(waitingId); } // DB select all (User Info) diff --git a/src/main/java/com/example/pirate99_final/waiting/dto/MyTurnResponseDto.java b/src/main/java/com/example/pirate99_final/waiting/dto/MyTurnResponseDto.java index e5a9404..1e1ece5 100644 --- a/src/main/java/com/example/pirate99_final/waiting/dto/MyTurnResponseDto.java +++ b/src/main/java/com/example/pirate99_final/waiting/dto/MyTurnResponseDto.java @@ -1,16 +1,25 @@ package com.example.pirate99_final.waiting.dto; +import com.example.pirate99_final.global.MsgResponseDto; +import com.example.pirate99_final.global.exception.ErrorCode; import lombok.Getter; @Getter -public class MyTurnResponseDto { +public class MyTurnResponseDto extends MsgResponseDto { private int totalWaitingCnt; private int myTurn; + private int statusCode; + private String msg; + public MyTurnResponseDto(int totalWaitingCnt, int myTurn) { this.totalWaitingCnt = totalWaitingCnt; this.myTurn = myTurn; } + public MyTurnResponseDto(ErrorCode errorCode) { + this.msg = errorCode.getMessage(); + this.statusCode = errorCode.getHttpStatus().value(); + } } diff --git a/src/main/java/com/example/pirate99_final/waiting/dto/WaitingMsgResponseDto.java b/src/main/java/com/example/pirate99_final/waiting/dto/WaitingMsgResponseDto.java new file mode 100644 index 0000000..16f64e6 --- /dev/null +++ b/src/main/java/com/example/pirate99_final/waiting/dto/WaitingMsgResponseDto.java @@ -0,0 +1,11 @@ +package com.example.pirate99_final.waiting.dto; + +public class WaitingMsgResponseDto extends MyTurnResponseDto{ + + private int statusCode; + private String msg; + + public WaitingMsgResponseDto(int totalWaitingCnt, int myTurn) { + super(totalWaitingCnt, myTurn); + } +} diff --git a/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java b/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java index cd87795..5453a5c 100644 --- a/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java +++ b/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java @@ -13,7 +13,7 @@ public interface WaitingRepository extends JpaRepository { Waiting findByWaitingId(Long waitingId); List findAllByStoreStatusAndWaitingStatusOrWaitingStatusOrderByWaitingIdAsc(StoreStatus storeStatus, int waitingStatus, int waitingStatus2 ); - @Query(value = "select * from waiting as a where (waiting_status = :waitingStatus1 or waiting_status = :waitingStatus2) and store_status_id = :storeStatusId", nativeQuery = true) + @Query(value = "select * from waiting where (waiting_status = :waitingStatus1 or waiting_status = :waitingStatus2) and store_status_id = :storeStatusId", nativeQuery = true) List waitingList(int waitingStatus1, int waitingStatus2, Long storeStatusId); Waiting findByStoreStatusAndUser(StoreStatus storestatus, User user); diff --git a/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java b/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java index 7befc84..034cbaa 100644 --- a/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java +++ b/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java @@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; @@ -49,33 +50,34 @@ public MsgResponseDto createWaiter(Long storeId, WaitingRequestDto requestDto) { if (isLocked) { try { - // 스토어 찾기 (storeId) - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); + // 스토어 스테이터스 찾기 StoreStatus storeStatus = storeStatusRepository.findByStoreId(storeId); // 유저 찾기 User user = userRepository.findByUsername(requestDto.getUsername()).orElseThrow( - () -> new IllegalArgumentException("유저를 찾을 수 없습니다.") + () -> new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) ); + // 대기열 중 상태값이 '대기중', '입장가능'인 사람들만 카운팅하기위해 구별해서 리스트에 담음 + Optional alreadyQueue = waitingRepository.alreadyQueue(0, 1, user.getUserId(), storeStatus.getStoreStatusId()); // 잔여 좌석이 있을 때는, waitingRepository에 쌓기 if(storeStatus.getAvailableTableCnt() > 0 ){ - waitingRepository.save(new Waiting(user, storeStatus, 1)); - storeStatus.update_waitingCnt(storeStatus.getWaitingCnt() + 1, storeStatus.getAvailableTableCnt() - 1); - } - else{ - // 대기열 중 상태값이 '대기중', '입장가능'인 사람들만 카운팅하기위해 구별해서 리스트에 담음 - Optional alreadyQueue = waitingRepository.alreadyQueue(0, 1, user.getUserId(), storeStatus.getStoreStatusId()); - + // 대기자 명단에 자신의 이름이 없다면 + if (alreadyQueue.isEmpty()){ + // 웨이팅(입장가능) 등록 + waitingRepository.save(new Waiting(user, storeStatus, 2)); + storeStatus.update(storeStatus.getAvailableTableCnt() - 1); + }else{ + return new MsgResponseDto(ErrorCode.ALREADY_IN_QUEUE); + } + }else{ // 종업원이 설정한 대기인원 제한설정 값 보다 현재 대기인원이 적은 경우만 대기자 등록이 가능하게끔 설정 if (storeStatus.getWaitingCnt() < storeStatus.getLimitWaitingCnt()) { if (alreadyQueue.isEmpty()) { // 웨이팅(대기자) 등록 - Waiting waiting = waitingRepository.save(new Waiting(user, storeStatus, 0)); + waitingRepository.save(new Waiting(user, storeStatus, 0)); } else { return new MsgResponseDto(ErrorCode.ALREADY_IN_QUEUE); } @@ -88,13 +90,13 @@ public MsgResponseDto createWaiter(Long storeId, WaitingRequestDto requestDto) { // 해당 점포 웨이팅 현황 수에 업데이트 storeStatusRepository.save(storeStatus); - + lock.unlock(); return new MsgResponseDto(SuccessCode.CREATE_WAITING); } catch (Exception e) { - - } finally { - lock.unlock(); + lock.unlock(); + return new MsgResponseDto(ErrorCode.NOT_FOUND_USER_ERROR); } + } } catch (Exception e) { Thread.currentThread().interrupt(); @@ -107,57 +109,48 @@ public MyTurnResponseDto getMyTurn(Long storeId, WaitingRequestDto requestDto) { // 이용자가 자신의 차례를 조회할 때 쓰는 'myTurn'과 해당 점포 총 대기인원 수 'totalWaitingCnt' 를 선언한다. int myTurn = 0; int totalWaitingCnt = 0; - // 스토어 찾기 (storeId) - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); + // 스토어 스테이터스 찾기 StoreStatus storeStatus = storeStatusRepository.findByStoreId(storeId); // 대기열 중 상태값이 '대기중', '입장가능'인 사람들만 카운팅하기위해 구별해서 리스트에 담음 -// List waitingList = waitingRepository.findAllByStoreStatusAndWaitingStatusOrWaitingStatusOrderByWaitingIdAsc(storeStatus, 0, 1); List waitingList = waitingRepository.waitingList(0, 1, storeStatus.getStoreStatusId()); - // 유저 찾기 - User getUser = userRepository.findByUsername(requestDto.getUsername()).orElseThrow( - () -> new IllegalArgumentException("유저를 찾을 수 없습니다.")); - // 총대기 인원수 = 위에서 담은 웨이팅 리스트의 사이즈 - totalWaitingCnt = waitingList.size(); + try { + // 유저 찾기 + User getUser = userRepository.findByUsername(requestDto.getUsername()).orElseThrow( + () -> new CustomException(HttpStatus.OK.value(), ErrorCode.NOT_FOUND_USER_ERROR)); + // 총대기 인원수 = 위에서 담은 웨이팅 리스트의 사이즈 + totalWaitingCnt = waitingList.size(); - for (int i = 0; i < waitingList.size(); i++) { - // 총 대기인원 수 중에 자신의 차례를 찾는 로직 'waitingList' 중 I번째 순서가 자신의 차례임을 나타냄 - if (waitingList.get(i).getUser().equals(getUser)) { - myTurn = i + 1; + + for (int i = 0; i < waitingList.size(); i++) { + // 총 대기인원 수 중에 자신의 차례를 찾는 로직 'waitingList' 중 I번째 순서가 자신의 차례임을 나타냄 + if (waitingList.get(i).getUser().equals(getUser)) { + myTurn = i + 1; + } } + }catch (Exception e) { + return new MyTurnResponseDto(ErrorCode.NOT_FOUND_USER_ERROR); } return new MyTurnResponseDto(totalWaitingCnt, myTurn); } @Transactional - public WaitingResponseDto getWaiter(Long storeId, Long waitingId) { // 대기인원 중 특정 사용자의 정보 불러오기 - - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); - - StoreStatus storeStatus = storeStatusRepository.findByStoreId(storeId); + public WaitingResponseDto getWaiter(Long waitingId) { // 대기인원 중 특정 사용자의 정보 불러오기 Waiting waiting = waitingRepository.findByWaitingId(waitingId); return new WaitingResponseDto(waiting); } @Transactional - public MsgResponseDto deleteWaiter(Long storeId, Long waitingId) { // 대기인원 중 대기취소 등의 사유로 상태값을 변경하는 작업 - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); - - StoreStatus storeStatus = storeStatusRepository.findByStoreId(storeId); + public MsgResponseDto deleteWaiter(Long waitingId) { // 대기인원 중 대기취소 등의 사유로 상태값을 변경하는 작업 Waiting waiting = waitingRepository.findByWaitingId(waitingId); - +// int waitingCnt = store // 대기자 명단에서 상태값을 '3' (대기 취소)으로 변경함 waiting.update(3); + return new MsgResponseDto(SuccessCode.DELETE_WAITING); } From 59fa0b043b4d7d227b9c677de63b75ef893adc3e Mon Sep 17 00:00:00 2001 From: Kyuu <117708164+kyuung09@users.noreply.github.com> Date: Tue, 7 Feb 2023 00:27:04 +0900 Subject: [PATCH 05/21] Update gradle.yml --- .github/workflows/gradle.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 98f5e81..7090567 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -7,7 +7,8 @@ name: Java CI with Gradle -pull_request: +on: + pull_request: branches: [ "develop" ] From 0dca45872f2d2d8a5dd7f18e27be9d7cac778b3d Mon Sep 17 00:00:00 2001 From: Kyuu Date: Tue, 7 Feb 2023 00:30:02 +0900 Subject: [PATCH 06/21] =?UTF-8?q?[FIX]=20console=20log=20=EC=9D=BC?= =?UTF-8?q?=EB=B6=80=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/js/index.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/resources/static/js/index.js b/src/main/resources/static/js/index.js index b469fbd..e38b786 100644 --- a/src/main/resources/static/js/index.js +++ b/src/main/resources/static/js/index.js @@ -109,7 +109,6 @@ function signIn() { }, }) .then(function (response) { - console.log(""); console.log("RESPONSE : " + JSON.stringify(response.data)); alert("로그인 성공, 요청 버튼을 눌러서 이메일 인증을 해주세요!") }) @@ -136,8 +135,6 @@ function callWaiting() { }, }) .then(function (response) { - console.log(""); - console.log("RESPONSE : " + JSON.stringify(response.data)); const requestWaiting = document.getElementById('signin'); // 입력받은 회원정보로 회원가입을 하고, requestWaiting.style.display = 'none'; // 해당 Form을 숨김처리한다. alert("웨이팅 등록 성공!") @@ -145,9 +142,6 @@ function callWaiting() { location.reload(); }) .catch(function (error) { - console.log(""); - console.log("ERROR : " + JSON.stringify(error)); - console.log(""); }); } else { alert("사용자 이메일 인증이 되지 않았습니다. 인증확인을 눌러주세요!") From 09d34591b34cca846040de0693668096e666e6e4 Mon Sep 17 00:00:00 2001 From: hongdangmoo49 Date: Tue, 7 Feb 2023 01:26:12 +0900 Subject: [PATCH 07/21] =?UTF-8?q?REFACTOR:=20StoreService.leaveStore=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/service/StoreService.java | 33 ------------------- .../waiting/service/WaitingService.java | 1 - 2 files changed, 34 deletions(-) diff --git a/src/main/java/com/example/pirate99_final/store/service/StoreService.java b/src/main/java/com/example/pirate99_final/store/service/StoreService.java index d651f12..1f138ae 100644 --- a/src/main/java/com/example/pirate99_final/store/service/StoreService.java +++ b/src/main/java/com/example/pirate99_final/store/service/StoreService.java @@ -148,39 +148,6 @@ public MsgResponseDto leaveStore(Long storeId) { // Leaving people check storeStatus.update(availableCnt); - Waiting waiting = waitingRepository.findFirstByStoreStatusAndWaitingStatusOrderByWaitingIdAsc(storeStatus, 0); - - if(waiting != null){ - // 1. find store - store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); - - // 2. storeStatus check - storeStatus = storeStatusRepository.findByStore(store); - - // 3. User find - User user = userRepository.findByUsername(waiting.getUser().getUsername()).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) - ); - - Waiting waiting2 = waitingRepository.findByStoreStatusAndUser(storeStatus, user); - waiting.update(2); - - int waitingCnt = 0; - - if(storeStatus.getWaitingCnt() > 0){ - waitingCnt = storeStatus.getWaitingCnt() - 1; - } - - availableCnt = storeStatus.getAvailableTableCnt(); - - if (availableCnt > 0) { - availableCnt = availableCnt - 1; - } - - storeStatus.update_waitingCnt(waitingCnt, availableCnt); - } return new MsgResponseDto(SuccessCode.CONFIRM_LEAVE); } diff --git a/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java b/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java index 034cbaa..af7295b 100644 --- a/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java +++ b/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java @@ -50,7 +50,6 @@ public MsgResponseDto createWaiter(Long storeId, WaitingRequestDto requestDto) { if (isLocked) { try { - // 스토어 스테이터스 찾기 StoreStatus storeStatus = storeStatusRepository.findByStoreId(storeId); From 74fbc63fd0e95d07f1d8326a832a2760432075c3 Mon Sep 17 00:00:00 2001 From: hongdangmoo49 Date: Tue, 7 Feb 2023 02:14:51 +0900 Subject: [PATCH 08/21] =?UTF-8?q?REFACTOR:=20StoreService.leaveStore=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/exception/ErrorCode.java | 2 ++ .../store/controller/StoreController.java | 4 ++-- .../store/dto/LeaveRequestDto.java | 11 +++++++++++ .../store/entity/StoreStatus.java | 3 ++- .../store/service/StoreService.java | 18 ++++++++++++++---- .../waiting/entity/WaitingStatus.java | 3 ++- .../waiting/repository/WaitingRepository.java | 1 - .../waiting/service/WaitingService.java | 2 +- 8 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/example/pirate99_final/store/dto/LeaveRequestDto.java diff --git a/src/main/java/com/example/pirate99_final/global/exception/ErrorCode.java b/src/main/java/com/example/pirate99_final/global/exception/ErrorCode.java index 9bcf8e0..702b7ec 100644 --- a/src/main/java/com/example/pirate99_final/global/exception/ErrorCode.java +++ b/src/main/java/com/example/pirate99_final/global/exception/ErrorCode.java @@ -33,6 +33,8 @@ public enum ErrorCode { NOT_FOUND_REVIEW_ERROR(HttpStatus.OK, "해당하는 리뷰가 없습니다."), ALREADY_IN_QUEUE(HttpStatus.OK, "이미 대기열에 존재합니다."), + + ALREADY_LEAVING(HttpStatus.OK, "이미 퇴장한 손님입니다."), LIMIT_QUEUE_EXCEEDED(HttpStatus.OK, "제한 대기열 초과"); diff --git a/src/main/java/com/example/pirate99_final/store/controller/StoreController.java b/src/main/java/com/example/pirate99_final/store/controller/StoreController.java index f81762b..232a40a 100644 --- a/src/main/java/com/example/pirate99_final/store/controller/StoreController.java +++ b/src/main/java/com/example/pirate99_final/store/controller/StoreController.java @@ -42,8 +42,8 @@ public MsgResponseDto enterStore(@PathVariable Long storeId){ @PutMapping("/storeStatus/leave/{storeId}") - public MsgResponseDto leaveStore(@PathVariable Long storeId){ - return storeService.leaveStore(storeId); + public MsgResponseDto leaveStore(@PathVariable Long storeId, @RequestBody LeaveRequestDto requestDto){ + return storeService.leaveStore(storeId, requestDto); } @PutMapping("/storeStatus/call/{storeId}") diff --git a/src/main/java/com/example/pirate99_final/store/dto/LeaveRequestDto.java b/src/main/java/com/example/pirate99_final/store/dto/LeaveRequestDto.java new file mode 100644 index 0000000..8229d68 --- /dev/null +++ b/src/main/java/com/example/pirate99_final/store/dto/LeaveRequestDto.java @@ -0,0 +1,11 @@ +package com.example.pirate99_final.store.dto; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class LeaveRequestDto { + + private String username; +} diff --git a/src/main/java/com/example/pirate99_final/store/entity/StoreStatus.java b/src/main/java/com/example/pirate99_final/store/entity/StoreStatus.java index 9c3c9c8..4b664ab 100644 --- a/src/main/java/com/example/pirate99_final/store/entity/StoreStatus.java +++ b/src/main/java/com/example/pirate99_final/store/entity/StoreStatus.java @@ -54,4 +54,5 @@ public void update_waitingCnt(int waitingCnt, int availableTableCnt){ public void update_limitWaitingCnt(int limitWaitingCnt) { this.limitWaitingCnt = limitWaitingCnt; } -} \ No newline at end of file + + } \ No newline at end of file diff --git a/src/main/java/com/example/pirate99_final/store/service/StoreService.java b/src/main/java/com/example/pirate99_final/store/service/StoreService.java index 1f138ae..1b348cb 100644 --- a/src/main/java/com/example/pirate99_final/store/service/StoreService.java +++ b/src/main/java/com/example/pirate99_final/store/service/StoreService.java @@ -132,7 +132,7 @@ else if(storeStatus.getAvailableTableCnt() == 0){ // Leave people from store @Transactional - public MsgResponseDto leaveStore(Long storeId) { + public MsgResponseDto leaveStore(Long storeId, LeaveRequestDto requestDto) { int availableCnt = 0; // 이용 가능 좌석 // 1. find store @@ -143,10 +143,20 @@ public MsgResponseDto leaveStore(Long storeId) { // 2. storeStatus check StoreStatus storeStatus = storeStatusRepository.findByStore(store); - availableCnt = storeStatus.getAvailableTableCnt() + 1; + // 3. User find + User user = userRepository.findByUsername(requestDto.getUsername()).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) + ); + Waiting waiting = waitingRepository.findByStoreStatusAndUser(storeStatus, user); - // Leaving people check - storeStatus.update(availableCnt); + if (waiting.getWaitingStatus() == 2) { + waiting.update(4); + + availableCnt = storeStatus.getAvailableTableCnt() + 1; + storeStatus.update(availableCnt); + } else { + return new MsgResponseDto(ErrorCode.ALREADY_LEAVING); + } return new MsgResponseDto(SuccessCode.CONFIRM_LEAVE); } diff --git a/src/main/java/com/example/pirate99_final/waiting/entity/WaitingStatus.java b/src/main/java/com/example/pirate99_final/waiting/entity/WaitingStatus.java index be7183e..1293797 100644 --- a/src/main/java/com/example/pirate99_final/waiting/entity/WaitingStatus.java +++ b/src/main/java/com/example/pirate99_final/waiting/entity/WaitingStatus.java @@ -10,7 +10,8 @@ public enum WaitingStatus { WAITING(0), // 대기 중 ADMISSION_ALLOWED(1), // 입장 가능 ADMISSION_COMPLETE(2), // 입장 완료 - CANCELLATIONS(3); // 대기 취소 + CANCELLATIONS(3), // 대기 취소 + LEAVING(4); // 손님 퇴장 private final int waitingStatus; } diff --git a/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java b/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java index 5453a5c..b3bcd87 100644 --- a/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java +++ b/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java @@ -23,5 +23,4 @@ public interface WaitingRepository extends JpaRepository { List findAllByStoreStatusOrderByWaitingIdAsc(StoreStatus storeStatus); - Waiting findFirstByStoreStatusAndWaitingStatusOrderByWaitingIdAsc(StoreStatus storeStatus, int waitingStatus); } diff --git a/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java b/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java index af7295b..0f70a93 100644 --- a/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java +++ b/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java @@ -62,7 +62,7 @@ public MsgResponseDto createWaiter(Long storeId, WaitingRequestDto requestDto) { Optional alreadyQueue = waitingRepository.alreadyQueue(0, 1, user.getUserId(), storeStatus.getStoreStatusId()); // 잔여 좌석이 있을 때는, waitingRepository에 쌓기 - if(storeStatus.getAvailableTableCnt() > 0 ){ + if(storeStatus.getAvailableTableCnt() > 0 && storeStatus.getWaitingCnt() == 0){ // 대기자 명단에 자신의 이름이 없다면 if (alreadyQueue.isEmpty()){ // 웨이팅(입장가능) 등록 From 767c68fd61bb7dfb469d85de6c01d366e903eae4 Mon Sep 17 00:00:00 2001 From: hongdangmoo49 Date: Tue, 7 Feb 2023 02:23:59 +0900 Subject: [PATCH 09/21] =?UTF-8?q?FIX:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/js/admin.js | 29 +++++++++++++-------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/main/resources/static/js/admin.js b/src/main/resources/static/js/admin.js index 4f96005..24aceca 100644 --- a/src/main/resources/static/js/admin.js +++ b/src/main/resources/static/js/admin.js @@ -52,7 +52,7 @@ function EnterStatus() { const statusData = JSON.stringify(response.data); var status = JSON.parse(statusData); - if(Object.keys(status).length != 0){ + if (Object.keys(status).length != 0) { let rows = status; @@ -66,15 +66,15 @@ function EnterStatus() { ${waitingNum} ${waitingUserName} ${waitingStatus} - - - - - - - - - + + + + + + + + + ` $('#waitingList').append(temp_html) } @@ -112,18 +112,16 @@ function LimitSetup() { } // 입장 확인 -function EnterConfirm() { +function EnterConfirm(waitingUserName) { var getId = localStorage.getItem("storeId"); //데이터를 key로 꺼냄 const id = JSON.parse(getId); //문자열을 객체(json)으로 변환 - let username = document.querySelector('#username').innerHTML; - const api = '/api/storeStatus/confirmEnter/' + id; axios({ method: "put", url: baseUrl + api, data: JSON.stringify( - {username : username, waitingStatus : 1} + {username: waitingUserName, waitingStatus: 1} ), headers: { "Content-Type": "application/json; charset=utf-8" @@ -138,7 +136,7 @@ function EnterConfirm() { } // 퇴장확인 API 연동 -function ExitConfirm(){ +function ExitConfirm(username) { var getId = localStorage.getItem("storeId"); //데이터를 key로 꺼냄 const id = JSON.parse(getId); //문자열을 객체(json)으로 변환 const api = '/api/storeStatus/leave/' + id; @@ -147,6 +145,7 @@ function ExitConfirm(){ method: "put", url: baseUrl + api, data: JSON.stringify( + {username: username} ), headers: { "Content-Type": "application/json; charset=utf-8" From c8f294642f1cbb05c0c9fc0690604b24b2c99d8d Mon Sep 17 00:00:00 2001 From: hongdangmoo49 Date: Tue, 7 Feb 2023 04:07:27 +0900 Subject: [PATCH 10/21] =?UTF-8?q?FIX:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/pirate99_final/store/service/StoreService.java | 2 +- .../waiting/repository/WaitingRepository.java | 3 +++ src/main/resources/static/js/admin.js | 6 +----- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/pirate99_final/store/service/StoreService.java b/src/main/java/com/example/pirate99_final/store/service/StoreService.java index 1b348cb..f5c2cc3 100644 --- a/src/main/java/com/example/pirate99_final/store/service/StoreService.java +++ b/src/main/java/com/example/pirate99_final/store/service/StoreService.java @@ -215,7 +215,7 @@ public MsgResponseDto callpeople(Long storeId, ConfirmRequestDto requestDto) thr new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) ); - Waiting waiting = waitingRepository.findByStoreStatusAndUser(storeStatus, user); + Waiting waiting = waitingRepository.queueing(storeStatus.getStoreStatusId(), user.getUserId()); waiting.update(1); String toEmail = user.getAddress(); diff --git a/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java b/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java index b3bcd87..75a984d 100644 --- a/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java +++ b/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java @@ -16,6 +16,9 @@ public interface WaitingRepository extends JpaRepository { @Query(value = "select * from waiting where (waiting_status = :waitingStatus1 or waiting_status = :waitingStatus2) and store_status_id = :storeStatusId", nativeQuery = true) List waitingList(int waitingStatus1, int waitingStatus2, Long storeStatusId); + @Query(value = "select * from waiting where store_status_id = :storeStatusId and user_id = :userId", nativeQuery = true) + Waiting queueing(Long storeStatusId, Long userId); + Waiting findByStoreStatusAndUser(StoreStatus storestatus, User user); @Query(value = "select *from waiting where (waiting_status = :waitingStatus1 or waiting_status = :waitingStatus2) and store_status_id = :storeStatusId and user_id = :userId", nativeQuery = true) diff --git a/src/main/resources/static/js/admin.js b/src/main/resources/static/js/admin.js index 24aceca..214e67b 100644 --- a/src/main/resources/static/js/admin.js +++ b/src/main/resources/static/js/admin.js @@ -7,10 +7,9 @@ window.onload = function () { } // 대기자 호출 기능 -function callpeople() { +function callpeople(username) { var getId = localStorage.getItem("storeId"); //데이터를 key로 꺼냄 const id = JSON.parse(getId); //문자열을 객체(json)으로 변환 - let username = document.querySelector('#username').innerHTML; const api = '/api/storeStatus/call/'; axios({ @@ -24,15 +23,12 @@ function callpeople() { }, }) .then(function (response) { - // console.log("RESPONSE : " + JSON.stringify(response.data)); alert("고객 호출 !") location.reload(); }) .catch(function (error) { - // console.log("ERROR : " + JSON.stringify(error)); }); } - // 입장 완료 여부 조회 API 연동 (음식점 대기자 리스트 전체) function EnterStatus() { var getId = localStorage.getItem("storeId"); //데이터를 key로 꺼냄 From 7ae5aeab5e0c18b88d44f5364cb2689d0b168780 Mon Sep 17 00:00:00 2001 From: hongdangmoo49 Date: Tue, 7 Feb 2023 05:10:01 +0900 Subject: [PATCH 11/21] =?UTF-8?q?FIX:=20=EB=8C=80=EA=B8=B0=EC=9E=90=20?= =?UTF-8?q?=EC=9D=B8=EC=9B=90=20=EC=A0=9C=ED=95=9C=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=BF=BC=EB=A6=AC=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/pirate99_final/store/service/StoreService.java | 2 +- .../pirate99_final/waiting/repository/WaitingRepository.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/example/pirate99_final/store/service/StoreService.java b/src/main/java/com/example/pirate99_final/store/service/StoreService.java index f5c2cc3..4683bc2 100644 --- a/src/main/java/com/example/pirate99_final/store/service/StoreService.java +++ b/src/main/java/com/example/pirate99_final/store/service/StoreService.java @@ -264,7 +264,7 @@ public MsgResponseDto limitWaitingCnt(Long storeId, LimitWaitingCntRequestDto re // 대기열 중 상태값이 '대기중', '입장가능'인 사람들만 카운팅하기위해 구별해서 리스트에 담음 List waitingList = waitingRepository. - findAllByStoreStatusAndWaitingStatusOrWaitingStatusOrderByWaitingIdAsc(storeStatus, 0, 1); + waitingList(0, 1, storeStatus.getStoreStatusId()); // 점포에서 설정한 대기 인원 제한한 값을 점포 상태에 업데이트 함 storeStatus.update_limitWaitingCnt(requestDto.getLimitWaitingCnt()); diff --git a/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java b/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java index 75a984d..bee6397 100644 --- a/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java +++ b/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java @@ -11,7 +11,6 @@ public interface WaitingRepository extends JpaRepository { Waiting findByWaitingId(Long waitingId); - List findAllByStoreStatusAndWaitingStatusOrWaitingStatusOrderByWaitingIdAsc(StoreStatus storeStatus, int waitingStatus, int waitingStatus2 ); @Query(value = "select * from waiting where (waiting_status = :waitingStatus1 or waiting_status = :waitingStatus2) and store_status_id = :storeStatusId", nativeQuery = true) List waitingList(int waitingStatus1, int waitingStatus2, Long storeStatusId); From d313a68b6adf730372ee7326df80ba4145e90505 Mon Sep 17 00:00:00 2001 From: developjisung Date: Tue, 7 Feb 2023 11:19:07 +0900 Subject: [PATCH 12/21] Refactoring: Waiting Service Refeactoring (Transactional delete from getMyturn) --- .../example/pirate99_final/waiting/service/WaitingService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java b/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java index 0e35917..3ca9e42 100644 --- a/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java +++ b/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java @@ -105,7 +105,6 @@ public MsgResponseDto createWaiter(Long storeId, WaitingRequestDto requestDto) { return null; } - @Transactional public MyTurnResponseDto getMyTurn(Long storeId, WaitingRequestDto requestDto) { // 대기 인원 중 자신의 차례 조회 // 이용자가 자신의 차례를 조회할 때 쓰는 'myTurn'과 해당 점포 총 대기인원 수 'totalWaitingCnt' 를 선언한다. int myTurn = 0; From 14f4cb27fe665c928e0370a5ac561c6a623d4eab Mon Sep 17 00:00:00 2001 From: hongdangmoo49 Date: Tue, 7 Feb 2023 12:22:48 +0900 Subject: [PATCH 13/21] =?UTF-8?q?REFACTOR:=20WaitingStatus=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=EA=B0=92=20(=ED=87=B4=EC=9E=A5)=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=20=EB=B0=8F=20leaveStore=EC=97=90=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pirate99_final/waiting/service/WaitingService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java b/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java index 0f70a93..2e1bba5 100644 --- a/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java +++ b/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java @@ -103,7 +103,7 @@ public MsgResponseDto createWaiter(Long storeId, WaitingRequestDto requestDto) { return null; } - @Transactional + public MyTurnResponseDto getMyTurn(Long storeId, WaitingRequestDto requestDto) { // 대기 인원 중 자신의 차례 조회 // 이용자가 자신의 차례를 조회할 때 쓰는 'myTurn'과 해당 점포 총 대기인원 수 'totalWaitingCnt' 를 선언한다. int myTurn = 0; @@ -178,8 +178,10 @@ else if(waiting.getWaitingStatus() == 1){ else if(waiting.getWaitingStatus() == 2){ waitingStatus = "입장 완료"; } - else{ + else if(waiting.getWaitingStatus() == 3){ waitingStatus = "대기 취소"; + }else { + waitingStatus = "퇴장"; } waitingResponseDto.add(new EnterStatusResponseDto(waiting,waitingStatus)); } From b2327901df7453a6fa36f58fde4893b9f0f9e90a Mon Sep 17 00:00:00 2001 From: Kyuu <117708164+kyuung09@users.noreply.github.com> Date: Tue, 7 Feb 2023 22:13:51 +0900 Subject: [PATCH 14/21] Update README.md --- README.md | 70 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index c57b603..689fcbd 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,4 @@ -![image](https://user-images.githubusercontent.com/117708164/216932548-af5766aa-a9a5-4d02-ba3f-49467c3fb956.png) - -# PIN Table 🍽 -### Pin-Table은, 대용량 위치 데이터를 활용한 위치 검색과 스토어 웨이팅 신청을 제공하는 서비스 입니다. - -- 위치 데이터를 활용한 장소 위치 검색을 할 수 있어요 🙆🏻 -- 가고싶은 식당을 검색하고, 현재 웨이팅 현황 및 웨이팅 신청을 할 수 있어요 ❗️ - - ## 📍 Index 1. [프로젝트 소개](#1-프로젝트-소개-) @@ -19,14 +10,34 @@ 7. [API](#7-api-) # +![image](https://user-images.githubusercontent.com/117708164/216932548-af5766aa-a9a5-4d02-ba3f-49467c3fb956.png) + +# PIN Table 🍽 +### Pin-Table은, 대용량 위치 데이터를 활용한 위치 검색과 스토어 웨이팅 신청을 제공하는 서비스 입니다. + +- 위치 데이터를 활용한 장소 위치 검색을 할 수 있어요 🙆🏻 +- 가고싶은 식당을 검색하고, 현재 웨이팅 현황 및 웨이팅 신청을 할 수 있어요 ❗️ + +# + ## 1. 프로젝트 소개 📢 -- 설명 : Challenge Team3 | Pin-Table 프로젝트 -- 기간 : 2022.12.30 ~ 2022.02.09 +- 설명 : +- 프로젝트 목표 : + - 대용량 장소 데이터를 활용한 검색 및 예약 서비스 플랫폼 +- 프로젝트 이름 : + - Pin-Table +- 서비스의 필요성 : + - 지도 검색 시 내가 원하는 장소의 웨이팅 현황과 예약을 할 수 있어 편의성이 증대됨 +- 구현 기능 및 핵심 목표 : + - 검색 시스템과 UI 간소화 + 낮은 진입 장벽(사용자 편리성) + - 약 1000만건의 데이터 조회 목표 1초~3초 +- 기간 : + - 2022.12.30 ~ 2022.02.09 - 팀원 :
-| - | NAME | GITHUB | +| - | 이름 | GITHUB | |--|--|--| -| BE | 김규리 | https://github.com/kyuung09 | +| BE | 김규리🔰 | https://github.com/kyuung09 | | BE | 이상훈 | https://github.com/leemeo3 | | BE | 신승호 | https://github.com/hongdangmoo49 | | BE | 황지성 | https://github.com/developjisung | @@ -35,21 +46,24 @@ ## 2. 기술 스택 🔨
- - - - - - - -
- - - - - - -
+ + + + +
+ + + + + + +
+ + + + + +
# From 55925bff6e88da98ef3d4d2cdf61a431be49adce Mon Sep 17 00:00:00 2001 From: Kyuu <117708164+kyuung09@users.noreply.github.com> Date: Tue, 7 Feb 2023 22:48:48 +0900 Subject: [PATCH 15/21] Update README.md --- README.md | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 86 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 689fcbd..a4d6c59 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@
+
@@ -61,9 +62,18 @@ - - + + + + + +
+ + + + +
# @@ -73,8 +83,11 @@  주요 기능 🖋
+ (1) 장소 검색 - +
+![검색빠르게](https://user-images.githubusercontent.com/117708164/217257406-1717d3d7-5384-49d6-9fe5-67e3087a5ce4.gif) +
- 장소 검색 기능 - 카테고리 필터 검색 기능 - 검색어 지정 검색 (가게 이름 / 도로명 주소 / 업종) @@ -82,16 +95,29 @@ - Elastic Search + Nori 형태소 분석기를 이용한 빠르고 정확한 검색 기능 제공 (2) 예약(웨이팅) 시스템 - +
+![웨이팅등록2배속](https://user-images.githubusercontent.com/117708164/217257762-10912785-2722-4dd9-938d-10a768b9d117.gif) +
+ - 스토어 웨이팅 신청 기능 - 스토어 현황 조회 기능 - 사용자 유효성(메일) 인증 및 메일 호출 기능 (3) 장소 리뷰 기능 - +
+![리뷰빠르게](https://user-images.githubusercontent.com/117708164/217258004-0e90f7d1-751f-480c-be8d-5cb66902d211.gif) +
- 장소 리뷰 작성 및 조회 기능 - 리뷰 등록 시 스토어 정보 갱신(별점, 리뷰 갯수) 기능 +(4) 관리자페이지(사장님 메뉴) 기능 +
+![](https://s3.us-west-2.amazonaws.com/secure.notion-static.com/ace974d9-7b6f-4fd0-9433-82f2ed524571/ezgif.com-gif-maker_%284%29.gif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20230207%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20230207T133119Z&X-Amz-Expires=86400&X-Amz-Signature=6f7007409b140efa46b329d72a035f2c2122c118029733af550f0f3dae4078ad&X-Amz-SignedHeaders=host&response-content-disposition=filename%3D%22ezgif.com-gif-maker%2520%284%29.gif%22&x-id=GetObject) +
+- 웨이팅 현황 확인 기능 제공 +- 손님 입장/퇴장 기능 제공 +- 웨이팅 호출(이메일) 기능 제공 +
@@ -102,11 +128,64 @@ ![image](https://user-images.githubusercontent.com/117708164/216933029-f5c882eb-daec-4216-a27c-56822226726f.png) ## 6. ERD 👨🏻‍💻 +
+ 펼쳐보기 +
+ ![image](https://user-images.githubusercontent.com/117708164/216933200-78984f6c-6653-46ea-bf1f-ee8900e5c2bf.png) + +
+
## 7. API 💬 -[API명세서 바로가기](https://www.notion.so/2c418627d047416fb8b21c59b49b83d9?v=f17213f3433e45328148b004b36e81e6) -[Swagger](https://pintable.co.kr/swagger-ui/index.html?urls.primaryName=store#/store-controller/createStoreUsingPOST) +[Swagger API 바로가기](https://pintable.co.kr/swagger-ui/index.html?urls.primaryName=store#/store-controller/createStoreUsingPOST) ## 8. 트러블슈팅 🐞 +
+ 데이터 수집 +
+
+ (1) 공공 API를 이용한 대용량 장소 데이터 수집
+ - 공공 데이터 포털에서 제공하는 전국 음식점/카페의 파일 데이터 수집 (약 650만건)
+ +
+(2) 장소 데이터 1차 가공
+ - 공공 데이터 포털에서 수집한 데이터 중 불필요 컬럼 및 폐업 장소 데이터 제거 (약 200만건)
+ +
+(3) 네이버 플레이스 웹 크롤링을 통한 추가 데이터 수집
+ - 웹크롤링(Python + 셀레니움)을 이용하여 리뷰 갯수/ 블로그 리뷰 / 별점 정보 등 추가 데이터 수집
+ - 네이버 플레이스 크롤링 시 특정 횟수 이상 반복 시도시 차단되는 경우가 발생하였고, 아래 과정을 통해 해결
+ 👉 https://www.notion.so/404-Not-Found-9ec37cc4600545e7972663f4d9d06364
+
+(4) Faker 라이브러리를 이용한 리뷰/사용자 데이터 생성
+ - Faker 라이브러리를 이용하여 약 600만건의 리뷰/사용자 데이터 생성
+
+
+
+ +
+ 검색 성능 향상 +
+ 🔻 검색 성능 개선 자세히 보기 : https://www.notion.so/PIN-TABLE-98c3a7dbb1324630a3a300575b2f7782 +
+
+ + +
+ 대용량 트래픽 부하분산 +
+ 🔻 대용량 트래픽 부하분산 자세히 보기 : https://www.notion.so/PIN-TABLE-641ad77ad45247c2801ae079db805389 +) +
+
+ + +
+ 동시성 제어 +
+ 🔻 동시성 제어 자세히 보기 : https://www.notion.so/PIN-TABLE-721fb45b91454dda8255e0de4ac757ca +) +
+
From bbf876b36402747d2cdb4380dd7f68d640e9c328 Mon Sep 17 00:00:00 2001 From: Kyuu <117708164+kyuung09@users.noreply.github.com> Date: Tue, 7 Feb 2023 22:52:33 +0900 Subject: [PATCH 16/21] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a4d6c59..b054a04 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ - 지도 검색 시 내가 원하는 장소의 웨이팅 현황과 예약을 할 수 있어 편의성이 증대됨 - 구현 기능 및 핵심 목표 : - 검색 시스템과 UI 간소화 + 낮은 진입 장벽(사용자 편리성) - - 약 1000만건의 데이터 조회 목표 1초~3초 + - **약 1000만건의** 데이터 조회 목표 1초~3초 - 기간 : - 2022.12.30 ~ 2022.02.09 - 팀원 :
From cd13de5694d89a1c9aec24d4c3b37b2d3b291b26 Mon Sep 17 00:00:00 2001 From: Kyuu <117708164+kyuung09@users.noreply.github.com> Date: Tue, 7 Feb 2023 22:53:18 +0900 Subject: [PATCH 17/21] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b054a04..49cab08 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ 5. [서비스 아키텍처](#5-서비스-아키텍처-) 6. [ERD](#6-erd-) 7. [API](#7-api-) +8. [트러블슈팅](#8-트러블슈팅-) # ![image](https://user-images.githubusercontent.com/117708164/216932548-af5766aa-a9a5-4d02-ba3f-49467c3fb956.png) From 225a88a608792112793db2e8fed8bdfeb1ff5e2a Mon Sep 17 00:00:00 2001 From: hongdangmoo49 Date: Wed, 8 Feb 2023 23:58:02 +0900 Subject: [PATCH 18/21] =?UTF-8?q?REFACTOR:=20WaitingService,=20StoreServic?= =?UTF-8?q?e,=20UserService,=20ReviewService=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pirate99_final/global/MsgResponseDto.java | 13 +- .../global/exception/CustomException.java | 6 + .../global/exception/ErrorCode.java | 16 +- .../review/controller/ReviewController.java | 2 +- .../review/dto/ReviewResponseDto.java | 3 +- .../review/service/ReviewService.java | 95 +++-- .../store/controller/StoreController.java | 4 +- .../store/dto/StoreResponseDto.java | 3 +- .../store/dto/StoreStatusResponseDto.java | 3 +- .../store/service/StoreService.java | 338 ++++++++++-------- .../user/controller/UserController.java | 4 +- .../user/service/UserService.java | 59 +-- .../waiting/controller/WaitingController.java | 2 +- .../waiting/dto/MyTurnResponseDto.java | 7 - .../waiting/dto/WaitingMsgResponseDto.java | 11 - .../waiting/repository/WaitingRepository.java | 3 + .../waiting/service/WaitingService.java | 50 +-- 17 files changed, 315 insertions(+), 304 deletions(-) delete mode 100644 src/main/java/com/example/pirate99_final/waiting/dto/WaitingMsgResponseDto.java diff --git a/src/main/java/com/example/pirate99_final/global/MsgResponseDto.java b/src/main/java/com/example/pirate99_final/global/MsgResponseDto.java index 37e9842..b9205ea 100644 --- a/src/main/java/com/example/pirate99_final/global/MsgResponseDto.java +++ b/src/main/java/com/example/pirate99_final/global/MsgResponseDto.java @@ -11,8 +11,8 @@ @Getter @NoArgsConstructor public class MsgResponseDto { - private int statusCode; - private String msg; + protected int statusCode; + protected String msg; public MsgResponseDto(SuccessCode successCode) { this.msg = successCode.getMessage(); @@ -23,15 +23,6 @@ public MsgResponseDto(int statusCode, String msg) { this.msg = msg; this.statusCode = statusCode; } - - public MsgResponseDto(CustomException customException) { - this.msg = customException.getMsg(); - this.statusCode = customException.getStatusCode(); - } - public MsgResponseDto(MethodArgumentNotValidException ex) { - this.msg = ex.getBindingResult().getAllErrors().get(0).getDefaultMessage(); - this.statusCode = HttpStatus.BAD_REQUEST.value(); - } public MsgResponseDto(ErrorCode errorCode) { this.msg = errorCode.getMessage(); this.statusCode = errorCode.getHttpStatus().value(); diff --git a/src/main/java/com/example/pirate99_final/global/exception/CustomException.java b/src/main/java/com/example/pirate99_final/global/exception/CustomException.java index 4041cdf..0ecafd4 100644 --- a/src/main/java/com/example/pirate99_final/global/exception/CustomException.java +++ b/src/main/java/com/example/pirate99_final/global/exception/CustomException.java @@ -1,6 +1,8 @@ package com.example.pirate99_final.global.exception; import lombok.Getter; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.MethodArgumentNotValidException; @Getter public class CustomException extends RuntimeException{ @@ -23,5 +25,9 @@ public CustomException(int statusCode, ErrorCode errorCode) { this.msg = msg; // 안내 문구 this.statusCode = statusCode; // 상태 코드 } + public CustomException(MethodArgumentNotValidException ex) { + this.msg = ex.getBindingResult().getAllErrors().get(0).getDefaultMessage(); + this.statusCode = HttpStatus.BAD_REQUEST.value(); + } } \ No newline at end of file diff --git a/src/main/java/com/example/pirate99_final/global/exception/ErrorCode.java b/src/main/java/com/example/pirate99_final/global/exception/ErrorCode.java index 702b7ec..8081236 100644 --- a/src/main/java/com/example/pirate99_final/global/exception/ErrorCode.java +++ b/src/main/java/com/example/pirate99_final/global/exception/ErrorCode.java @@ -8,33 +8,21 @@ @RequiredArgsConstructor public enum ErrorCode { - LOGIN_ERROR(HttpStatus.BAD_REQUEST, "로그인에 실패했습니다."), - SIGN_UP_ERROR(HttpStatus.BAD_REQUEST, "회원가입에 실패했습니다."), NOT_FOUND_ID_ERROR(HttpStatus.OK, "해당하는 ID가 없습니다."), NOT_FOUND_USER_ERROR(HttpStatus.OK, "해당하는 사용자를 찾을 수 없습니다."), DUPLICATE_USER_ERROR(HttpStatus.OK, "이미 존재하는 회원입니다."), - WAITING_POST_ERROR(HttpStatus.BAD_REQUEST, "대기자 명단 등록에 실패했습니다."), WRONG_PASSWORD_ERROR(HttpStatus.OK, "잘못된 비밀번호입니다."), - WAITING_DELETE_ERROR(HttpStatus.BAD_REQUEST, "대기자 명단 삭제에 실패했습니다."), // error code 대신 status code 200과 error message 를 함께 보낸다. - - - NOT_ENOUGH_TABLE(HttpStatus.OK, "빈 자리가 없습니다. 예약 등록 부탁드립니다."), - WRONG_LIMIT_WAITING_ERROR(HttpStatus.OK, "인원 제한 설정 값은 현재 대기자 인원보다 적을 수 없습니다."), - - STORE_POST_ERROR(HttpStatus.BAD_REQUEST, "점포 등록에 실패했습니다."), - STORE_DELETE_ERROR(HttpStatus.BAD_REQUEST, "점포 삭제에 실패했습니다."), - NOT_FOUND_STORE_STATUS_ERROR(HttpStatus.BAD_REQUEST, "해당하는 상호 상태가 없습니다."), NOT_FOUND_STORE_ERROR(HttpStatus.OK, "해당하는 상호명이 없습니다."), - REVIEW_POST_ERROR(HttpStatus.BAD_REQUEST, "리뷰 등록에 실패했습니다."), - REVIEW_DELETE_ERROR(HttpStatus.OK, "리뷰 삭제에 실패했습니다."), NOT_FOUND_REVIEW_ERROR(HttpStatus.OK, "해당하는 리뷰가 없습니다."), ALREADY_IN_QUEUE(HttpStatus.OK, "이미 대기열에 존재합니다."), ALREADY_LEAVING(HttpStatus.OK, "이미 퇴장한 손님입니다."), + + ALREADY_EATING(HttpStatus.OK, "이미 식사 중인 손님입니다."), LIMIT_QUEUE_EXCEEDED(HttpStatus.OK, "제한 대기열 초과"); diff --git a/src/main/java/com/example/pirate99_final/review/controller/ReviewController.java b/src/main/java/com/example/pirate99_final/review/controller/ReviewController.java index 0f871b8..65c7368 100644 --- a/src/main/java/com/example/pirate99_final/review/controller/ReviewController.java +++ b/src/main/java/com/example/pirate99_final/review/controller/ReviewController.java @@ -28,7 +28,7 @@ public MsgResponseDto createReview(@PathVariable Long storeId, @RequestBody Revi // DB select one @GetMapping("/review/{storeId}/{reviewId}") - public ReviewResponseDto getReview(@PathVariable Long storeId, @PathVariable Long reviewId){return reviewService.getReview(storeId, reviewId);} + public MsgResponseDto getReview(@PathVariable Long storeId, @PathVariable Long reviewId){return reviewService.getReview(storeId, reviewId);} // DB delete @DeleteMapping("/review/{storeId}/{reviewId}") diff --git a/src/main/java/com/example/pirate99_final/review/dto/ReviewResponseDto.java b/src/main/java/com/example/pirate99_final/review/dto/ReviewResponseDto.java index 50002f0..5c98f9a 100644 --- a/src/main/java/com/example/pirate99_final/review/dto/ReviewResponseDto.java +++ b/src/main/java/com/example/pirate99_final/review/dto/ReviewResponseDto.java @@ -1,10 +1,11 @@ package com.example.pirate99_final.review.dto; +import com.example.pirate99_final.global.MsgResponseDto; import com.example.pirate99_final.review.entity.Review; import lombok.Getter; @Getter -public class ReviewResponseDto { +public class ReviewResponseDto extends MsgResponseDto { private Long reviewId; private String username; private String content; diff --git a/src/main/java/com/example/pirate99_final/review/service/ReviewService.java b/src/main/java/com/example/pirate99_final/review/service/ReviewService.java index e69a9e5..35b8656 100644 --- a/src/main/java/com/example/pirate99_final/review/service/ReviewService.java +++ b/src/main/java/com/example/pirate99_final/review/service/ReviewService.java @@ -34,78 +34,77 @@ public class ReviewService { // Review Insert (Insert to Redis) public MsgResponseDto createReview(long id, ReviewRequestDto requestDto) { - SetOperations setOperations = redisTemplate.opsForSet(); - Store store = storeRepository.findById(id).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); + try { + SetOperations setOperations = redisTemplate.opsForSet(); - User user = userRepository.findByUsername(requestDto.getUsername()).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) - ); + Store store = storeRepository.findById(id).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) + ); - Review review = new Review(requestDto, store, user); - reviewRepository.save(review); + User user = userRepository.findByUsername(requestDto.getUsername()).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) + ); - RedisRequestDto saveId = new RedisRequestDto(store.getStoreId()); - setOperations.add("reviewIdx", saveId); + Review review = new Review(requestDto, store, user); + reviewRepository.save(review); - return new MsgResponseDto(CREATE_REVIEW); + RedisRequestDto saveId = new RedisRequestDto(store.getStoreId()); + setOperations.add("reviewIdx", saveId); + + return new MsgResponseDto(CREATE_REVIEW); + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); + } } // Get memos from DB (all) public List getReviews(long id) { - Store store = storeRepository.findById(id).orElseThrow(() - -> new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); - - // 1. Select All Memo - List ListReview = reviewRepository.findTop10ByStoreOrderByIdDesc(store); - List ListResponseDto = new ArrayList<>(); + Store store = storeRepository.findById(id).orElseThrow(() + -> new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) + ); - for (Review review : ListReview) { - ListResponseDto.add(new ReviewResponseDto(review)); - } - return ListResponseDto; - } + // 1. Select All Memo + List ListReview = reviewRepository.findTop10ByStoreOrderByIdDesc(store); - // Get store from DB (one) - public ReviewResponseDto getReview(long storeId, long reviewId) { - Review review = reviewRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_REVIEW_ERROR) - ); + List ListResponseDto = new ArrayList<>(); - ReviewResponseDto responseDto = new ReviewResponseDto(review); - return responseDto; + for (Review review : ListReview) { + ListResponseDto.add(new ReviewResponseDto(review)); + } + return ListResponseDto; } - // DB update function - @Transactional - public ReviewResponseDto update(Long storeId, Long reviewid, ReviewRequestDto requestDto) { - - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); + // Get store from DB (one) + public MsgResponseDto getReview(long storeId, long reviewId) { - Review review = reviewRepository.findByStoreAndId(store, reviewid).orElseThrow( // find memo - () -> new CustomException(ErrorCode.NOT_FOUND_REVIEW_ERROR) - ); + try { + Review review = reviewRepository.findById(storeId).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_REVIEW_ERROR) + ); - review.update(requestDto); - return new ReviewResponseDto(review); + ReviewResponseDto responseDto = new ReviewResponseDto(review); + return responseDto; + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); + } } // DB delete function (data delete) public MsgResponseDto deleteReview(Long storeId, Long reviewid) { - Review review = reviewRepository.findById(storeId).orElseThrow( // find memo - () -> new CustomException(ErrorCode.NOT_FOUND_ID_ERROR) - ); - reviewRepository.deleteById(storeId); // 해당 게시물 삭제 + try { + Review review = reviewRepository.findById(storeId).orElseThrow( // find memo + () -> new CustomException(ErrorCode.NOT_FOUND_ID_ERROR) + ); + reviewRepository.deleteById(storeId); // 해당 게시물 삭제 - return new MsgResponseDto(DELETE_REVIEW); + return new MsgResponseDto(DELETE_REVIEW); + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); + } } } diff --git a/src/main/java/com/example/pirate99_final/store/controller/StoreController.java b/src/main/java/com/example/pirate99_final/store/controller/StoreController.java index 232a40a..6c5baf3 100644 --- a/src/main/java/com/example/pirate99_final/store/controller/StoreController.java +++ b/src/main/java/com/example/pirate99_final/store/controller/StoreController.java @@ -27,7 +27,7 @@ public MsgResponseDto createStore(@RequestBody StoreRequestDto requestDto){ // DB select one @GetMapping("/storeStatus/{storeId}") - public StoreStatusResponseDto getStore(@PathVariable long storeId){return storeService.getStore(storeId);} + public MsgResponseDto getStore(@PathVariable long storeId){return storeService.getStore(storeId);} // DB delete @DeleteMapping("/storeStatus/{storeId}") @@ -62,7 +62,7 @@ public MsgResponseDto limitWaitingCnt(@PathVariable Long storeId, @RequestBody L } @GetMapping("/storeAdmin/{storeId}") - public StoreResponseDto getStoreAdminInfo(@PathVariable Long storeId) { + public MsgResponseDto getStoreAdminInfo(@PathVariable Long storeId) { return storeService.getStoreAdminInfo(storeId); } } diff --git a/src/main/java/com/example/pirate99_final/store/dto/StoreResponseDto.java b/src/main/java/com/example/pirate99_final/store/dto/StoreResponseDto.java index a9d51d3..78d6625 100644 --- a/src/main/java/com/example/pirate99_final/store/dto/StoreResponseDto.java +++ b/src/main/java/com/example/pirate99_final/store/dto/StoreResponseDto.java @@ -1,10 +1,11 @@ package com.example.pirate99_final.store.dto; +import com.example.pirate99_final.global.MsgResponseDto; import com.example.pirate99_final.store.entity.Store; import lombok.Getter; @Getter -public class StoreResponseDto { +public class StoreResponseDto extends MsgResponseDto { private String storeName; diff --git a/src/main/java/com/example/pirate99_final/store/dto/StoreStatusResponseDto.java b/src/main/java/com/example/pirate99_final/store/dto/StoreStatusResponseDto.java index 75f41e1..4236c87 100644 --- a/src/main/java/com/example/pirate99_final/store/dto/StoreStatusResponseDto.java +++ b/src/main/java/com/example/pirate99_final/store/dto/StoreStatusResponseDto.java @@ -1,10 +1,11 @@ package com.example.pirate99_final.store.dto; +import com.example.pirate99_final.global.MsgResponseDto; import com.example.pirate99_final.store.entity.StoreStatus; import lombok.Getter; @Getter -public class StoreStatusResponseDto { +public class StoreStatusResponseDto extends MsgResponseDto { private Long storeStatusId; // storeStatusId private int totalTableCnt; // 총 테이블 수 private int availableTableCnt; // 현재 사용 중인 테이블 수 diff --git a/src/main/java/com/example/pirate99_final/store/service/StoreService.java b/src/main/java/com/example/pirate99_final/store/service/StoreService.java index 4683bc2..2d79e14 100644 --- a/src/main/java/com/example/pirate99_final/store/service/StoreService.java +++ b/src/main/java/com/example/pirate99_final/store/service/StoreService.java @@ -78,154 +78,178 @@ public List getStores() { } // Get store from DB (one) - public StoreStatusResponseDto getStore(long storeId) { - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); + public MsgResponseDto getStore(long storeId) { + try { + Store store = storeRepository.findById(storeId).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) + ); - StoreStatus storeStatus = storeStatusRepository.findByStore(store); + StoreStatus storeStatus = storeStatusRepository.findByStore(store); - StoreStatusResponseDto responseDto = new StoreStatusResponseDto(storeStatus); + StoreStatusResponseDto responseDto = new StoreStatusResponseDto(storeStatus); + + return responseDto; + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); + } - return responseDto; } // DB delete function (data delete) public MsgResponseDto deleteStore(Long storeId) { + try { + Store store = storeRepository.findById(storeId).orElseThrow( // find store + () -> new CustomException(ErrorCode.NOT_FOUND_ID_ERROR) + ); - Store store = storeRepository.findById(storeId).orElseThrow( // find store - () -> new CustomException(ErrorCode.NOT_FOUND_ID_ERROR) - ); + storeStatusRepository.deleteByStore(store); // 상점 상태 테이블 삭제 + storeRepository.deleteById(storeId); // 해당 상점 삭제 - storeStatusRepository.deleteByStore(store); // 상점 상태 테이블 삭제 - storeRepository.deleteById(storeId); // 해당 상점 삭제 + return new MsgResponseDto(DELETE_STORE); + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); + } - return new MsgResponseDto(DELETE_STORE); } public MsgResponseDto enterStore(Long storeId) { // need to update int availableCnt = 0; // 이용 가능 좌석 + try { + // 1. find store + Store store = storeRepository.findById(storeId).orElseThrow(()-> + new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) + ); + + // 2. storeStatus check + StoreStatus storeStatus = storeStatusRepository.findByStore(store); + + // 3. counting availableCnt + if((storeStatus.getAvailableTableCnt() - 1) > 0){ + availableCnt = storeStatus.getAvailableTableCnt() - 1; + } + else if(storeStatus.getAvailableTableCnt() == 0){ + return new MsgResponseDto(SuccessCode.NOT_ENOUGH_TABLE); // 해당 부분 수정 필요 + } - // 1. find store - Store store = storeRepository.findById(storeId).orElseThrow(()-> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); - - // 2. storeStatus check - StoreStatus storeStatus = storeStatusRepository.findByStore(store); + // 4. update storeStatus + storeStatus.update(availableCnt); + storeStatusRepository.save(storeStatus); - // 3. counting availableCnt - if((storeStatus.getAvailableTableCnt() - 1) > 0){ - availableCnt = storeStatus.getAvailableTableCnt() - 1; + return new MsgResponseDto(SuccessCode.CONFIRM_ENTER); + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); } - else if(storeStatus.getAvailableTableCnt() == 0){ - return new MsgResponseDto(SuccessCode.NOT_ENOUGH_TABLE); // 해당 부분 수정 필요 - } - - // 4. update storeStatus - storeStatus.update(availableCnt); - storeStatusRepository.save(storeStatus); - - return new MsgResponseDto(SuccessCode.CONFIRM_ENTER); } // Leave people from store @Transactional public MsgResponseDto leaveStore(Long storeId, LeaveRequestDto requestDto) { int availableCnt = 0; // 이용 가능 좌석 + try { + // 1. find store + Store store = storeRepository.findById(storeId).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) + ); + + // 2. storeStatus check + StoreStatus storeStatus = storeStatusRepository.findByStore(store); + + // 3. User find + User user = userRepository.findByUsername(requestDto.getUsername()).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) + ); + Waiting waiting = waitingRepository.findByStoreStatusAndUser(storeStatus, user); + + if (waiting.getWaitingStatus() == 2) { + waiting.update(4); + + availableCnt = storeStatus.getAvailableTableCnt() + 1; + storeStatus.update(availableCnt); + } else { + return new MsgResponseDto(ErrorCode.ALREADY_LEAVING); + } - // 1. find store - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); - - // 2. storeStatus check - StoreStatus storeStatus = storeStatusRepository.findByStore(store); - - // 3. User find - User user = userRepository.findByUsername(requestDto.getUsername()).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) - ); - Waiting waiting = waitingRepository.findByStoreStatusAndUser(storeStatus, user); - - if (waiting.getWaitingStatus() == 2) { - waiting.update(4); - - availableCnt = storeStatus.getAvailableTableCnt() + 1; - storeStatus.update(availableCnt); - } else { - return new MsgResponseDto(ErrorCode.ALREADY_LEAVING); + return new MsgResponseDto(SuccessCode.CONFIRM_LEAVE); + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); } - - return new MsgResponseDto(SuccessCode.CONFIRM_LEAVE); } @Transactional public MsgResponseDto confirmStore(Long storeId, ConfirmRequestDto requestDto) { - // 1. find store - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); - - // 2. storeStatus check - StoreStatus storeStatus = storeStatusRepository.findByStore(store); - - // 3. User find - User user = userRepository.findByUsername(requestDto.getUsername()).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) - ); - - Waiting waiting = waitingRepository.findByStoreStatusAndUser(storeStatus, user); - - if (requestDto.getWaitingStatus() == 1) { - waiting.update(2); - int waitingCnt = storeStatus.getWaitingCnt() - 1; - int availableCnt = storeStatus.getAvailableTableCnt(); - - if (availableCnt > 0) { - availableCnt = availableCnt - 1; + try { + // 1. find store + Store store = storeRepository.findById(storeId).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) + ); + + // 2. storeStatus check + StoreStatus storeStatus = storeStatusRepository.findByStore(store); + + // 3. User find + User user = userRepository.findByUsername(requestDto.getUsername()).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) + ); + + Waiting waiting = waitingRepository.findByStoreStatusAndUser(storeStatus, user); + + if (requestDto.getWaitingStatus() == 1) { + waiting.update(2); + int waitingCnt = storeStatus.getWaitingCnt() - 1; + int availableCnt = storeStatus.getAvailableTableCnt(); + + if (availableCnt > 0) { + availableCnt = availableCnt - 1; + } + + storeStatus.update_waitingCnt(waitingCnt, availableCnt); + } else if (requestDto.getWaitingStatus() == 3) { + waiting.update(3); + int waitingCnt = storeStatus.getWaitingCnt() - 1; + int availableCnt = storeStatus.getAvailableTableCnt(); + + storeStatus.update_waitingCnt(waitingCnt, availableCnt); } - storeStatus.update_waitingCnt(waitingCnt, availableCnt); - } else if (requestDto.getWaitingStatus() == 3) { - waiting.update(3); - int waitingCnt = storeStatus.getWaitingCnt() - 1; - int availableCnt = storeStatus.getAvailableTableCnt(); - - storeStatus.update_waitingCnt(waitingCnt, availableCnt); + return new MsgResponseDto(SuccessCode.CONFIRM_ENTER); + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); } - return new MsgResponseDto(SuccessCode.CONFIRM_ENTER); } // call people @Transactional public MsgResponseDto callpeople(Long storeId, ConfirmRequestDto requestDto) throws MessagingException { - // 1. find store - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); - - // 2. storeStatus check - StoreStatus storeStatus = storeStatusRepository.findByStore(store); - - // 3. User find - User user = userRepository.findByUsername(requestDto.getUsername()).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) - ); - - Waiting waiting = waitingRepository.queueing(storeStatus.getStoreStatusId(), user.getUserId()); - waiting.update(1); - - String toEmail = user.getAddress(); - String storeName = store.getStoreName(); - String title = "Pin Table 입장안내 [" + storeName + "] 대기 호출"; - String mailForm = "mailForm_call"; - - MimeMessage emailForm = createEmailForm(toEmail, title, mailForm); - emailSender.send(emailForm); - return new MsgResponseDto(SuccessCode.CALL_PEOPLE); + try { + // 1. find store + Store store = storeRepository.findById(storeId).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) + ); + + // 2. storeStatus check + StoreStatus storeStatus = storeStatusRepository.findByStore(store); + + // 3. User find + User user = userRepository.findByUsername(requestDto.getUsername()).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) + ); + + Waiting waiting = waitingRepository.queueing(storeStatus.getStoreStatusId(), user.getUserId()); + waiting.update(1); + + String toEmail = user.getAddress(); + String storeName = store.getStoreName(); + String title = "Pin Table 입장안내 [" + storeName + "] 대기 호출"; + String mailForm = "mailForm_call"; + + MimeMessage emailForm = createEmailForm(toEmail, title, mailForm); + emailSender.send(emailForm); + return new MsgResponseDto(SuccessCode.CALL_PEOPLE); + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); + } } private MimeMessage createEmailForm(String sendmail, String mailTitle, String mailForm) throws MessagingException { @@ -253,60 +277,60 @@ private String setContext(String mailform) { public MsgResponseDto limitWaitingCnt(Long storeId, LimitWaitingCntRequestDto requestDto) throws MessagingException { int limitWaitingCnt = 0; + try { + // 1. find store + Store store = storeRepository.findById(storeId).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) + ); - // 1. find store - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); - - // 2. storeStatus check - StoreStatus storeStatus = storeStatusRepository.findByStore(store); + // 2. storeStatus check + StoreStatus storeStatus = storeStatusRepository.findByStore(store); - // 대기열 중 상태값이 '대기중', '입장가능'인 사람들만 카운팅하기위해 구별해서 리스트에 담음 - List waitingList = waitingRepository. - waitingList(0, 1, storeStatus.getStoreStatusId()); + // 대기열 중 상태값이 '대기중', '입장가능'인 사람들만 카운팅하기위해 구별해서 리스트에 담음 + List waitingList = waitingRepository. + waitingList(0, 1, storeStatus.getStoreStatusId()); - // 점포에서 설정한 대기 인원 제한한 값을 점포 상태에 업데이트 함 - storeStatus.update_limitWaitingCnt(requestDto.getLimitWaitingCnt()); + // 점포에서 설정한 대기 인원 제한한 값을 점포 상태에 업데이트 함 + storeStatus.update_limitWaitingCnt(requestDto.getLimitWaitingCnt()); - limitWaitingCnt = storeStatus.getLimitWaitingCnt(); + limitWaitingCnt = storeStatus.getLimitWaitingCnt(); - int waitingCnt = storeStatus.getWaitingCnt(); - // 대기인원 제한이 '0'인 경우 'default' 값인 무한으로 설정 - if (limitWaitingCnt == 1000) { + int waitingCnt = storeStatus.getWaitingCnt(); + // 대기인원 제한이 '0'인 경우 'default' 값인 무한으로 설정 + if (limitWaitingCnt == 1000) { - return new MsgResponseDto(LIMIT_DEFAULT); - // 대기인원 제한이 총 대기인원 수 보다 큰 경우, 설정이 완료되었다는 메세지 반환 - } else if (limitWaitingCnt >= storeStatus.getWaitingCnt()) { + return new MsgResponseDto(LIMIT_DEFAULT); + // 대기인원 제한이 총 대기인원 수 보다 큰 경우, 설정이 완료되었다는 메세지 반환 + } else if (limitWaitingCnt >= storeStatus.getWaitingCnt()) { - return new MsgResponseDto(SuccessCode.LIMIT_SETTING); - // 대기인원 제한이 총 대기인원 수 보다 적은 경우, 제한을 초과한 현재 대기인원들에게 이메일을 보내고 대기취소 처리한다. - } else if (limitWaitingCnt < storeStatus.getWaitingCnt()) { + return new MsgResponseDto(SuccessCode.LIMIT_SETTING); + // 대기인원 제한이 총 대기인원 수 보다 적은 경우, 제한을 초과한 현재 대기인원들에게 이메일을 보내고 대기취소 처리한다. + } else if (limitWaitingCnt < storeStatus.getWaitingCnt()) { - for (int i = limitWaitingCnt; i < storeStatus.getWaitingCnt(); i++) { + for (int i = limitWaitingCnt; i < storeStatus.getWaitingCnt(); i++) { - Waiting waiting_person = waitingList.get(i); + Waiting waiting_person = waitingList.get(i); - String toEmail = waiting_person.getUser().getAddress(); - String storeName = store.getStoreName(); - String title = "Pin Table [" + storeName + "] 웨이팅 취소 안내"; - String mailForm = "mailForm_cancle"; + String toEmail = waiting_person.getUser().getAddress(); + String storeName = store.getStoreName(); + String title = "Pin Table [" + storeName + "] 웨이팅 취소 안내"; + String mailForm = "mailForm_cancle"; - // 대기취소 상태로 변경 - waiting_person.update(3); - waitingCnt = storeStatus.getWaitingCnt() - 1; + // 대기취소 상태로 변경 + waiting_person.update(3); + waitingCnt = waitingCnt - 1; - MimeMessage emailForm = createEmailForm(toEmail, title, mailForm); - emailSender.send(emailForm); + MimeMessage emailForm = createEmailForm(toEmail, title, mailForm); + emailSender.send(emailForm); + } + storeStatus.update_waitingCnt(waitingCnt, storeStatus.getAvailableTableCnt()); } - storeStatus.update_waitingCnt(waitingCnt, storeStatus.getAvailableTableCnt()); - - return new MsgResponseDto(ErrorCode.WRONG_LIMIT_WAITING_ERROR); + return null; + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); } - - return null; } public void searchCurrentMap(Model model, String latitude, String longitude, String storeName) { @@ -541,19 +565,23 @@ public void elasticSearchReviewDESC(Model model, SearchCondition condition) { } - public StoreResponseDto getStoreAdminInfo(Long storeId) { + public MsgResponseDto getStoreAdminInfo(Long storeId) { - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR)); + try { + Store store = storeRepository.findById(storeId).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR)); - StoreStatus storeStatus = storeStatusRepository.findByStore(store); + StoreStatus storeStatus = storeStatusRepository.findByStore(store); - List waitingTeams = waitingRepository.waitingList(0, 1, storeStatus.getStoreStatusId()); + List waitingTeams = waitingRepository.waitingList(0, 1, storeStatus.getStoreStatusId()); - int numberOfTeamsWaiting = waitingTeams.size(); + int numberOfTeamsWaiting = waitingTeams.size(); - int numberOfCustomersInUse = storeStatus.getTotalTableCnt() - storeStatus.getAvailableTableCnt(); + int numberOfCustomersInUse = storeStatus.getTotalTableCnt() - storeStatus.getAvailableTableCnt(); - return new StoreResponseDto(store, numberOfTeamsWaiting, numberOfCustomersInUse); + return new StoreResponseDto(store, numberOfTeamsWaiting, numberOfCustomersInUse); + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); + } } } diff --git a/src/main/java/com/example/pirate99_final/user/controller/UserController.java b/src/main/java/com/example/pirate99_final/user/controller/UserController.java index dbdbaa6..ce37e10 100644 --- a/src/main/java/com/example/pirate99_final/user/controller/UserController.java +++ b/src/main/java/com/example/pirate99_final/user/controller/UserController.java @@ -22,7 +22,7 @@ public class UserController { public MsgResponseDto signup(@RequestBody SignupRequestDto signupRequestDto) { userService.signup(signupRequestDto); - return new MsgResponseDto(SuccessCode.SIGN_UP); + return userService.signup(signupRequestDto); } @PostMapping("/login") @@ -30,7 +30,7 @@ public MsgResponseDto login(@RequestBody LoginRequestDto loginRequestDto) { //클라이언트에 반환하기 위해 response 객체 userService.login(loginRequestDto); - return new MsgResponseDto(SuccessCode.LOG_IN); + return userService.login(loginRequestDto); } // 사용자 메일 유효성 체크 기능 diff --git a/src/main/java/com/example/pirate99_final/user/service/UserService.java b/src/main/java/com/example/pirate99_final/user/service/UserService.java index 1cb7c39..d38d050 100644 --- a/src/main/java/com/example/pirate99_final/user/service/UserService.java +++ b/src/main/java/com/example/pirate99_final/user/service/UserService.java @@ -32,42 +32,49 @@ public class UserService { // 회원가입 @Transactional public MsgResponseDto signup(SignupRequestDto signupRequestDto) { + try { + // 1. USERNAME, PASSWORD SETTING + String username = signupRequestDto.getUsername(); // username setting (DTO -> val) + String password = signupRequestDto.getPassword(); // password setting (DTO -> val) + String address = signupRequestDto.getEmail(); + + // 2. find user (duplicate user) + Optional found = userRepository.findByUsername(username); // 회원 중복 확인 + if (found.isPresent()) { // isPresent - > found가 null이 아니라면 true 반환 + throw new CustomException(ErrorCode.DUPLICATE_USER_ERROR); + } - // 1. USERNAME, PASSWORD SETTING - String username = signupRequestDto.getUsername(); // username setting (DTO -> val) - String password = signupRequestDto.getPassword(); // password setting (DTO -> val) - String address = signupRequestDto.getEmail(); - - // 2. find user (duplicate user) - Optional found = userRepository.findByUsername(username); // 회원 중복 확인 - if (found.isPresent()) { // isPresent - > found가 null이 아니라면 true 반환 - throw new CustomException(ErrorCode.DUPLICATE_USER_ERROR); + // 5. DB insert + User user = new User(username, password, address); // DTO -> Entity + userRepository.save(user); + return new MsgResponseDto(SIGN_UP); + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); } - // 5. DB insert - User user = new User(username, password, address); // DTO -> Entity - userRepository.save(user); - return new MsgResponseDto(SIGN_UP); } // 로그인 @Transactional(readOnly = true) public MsgResponseDto login(LoginRequestDto loginRequestDto) { + try { + // 1. USERNAME, PASSWORD SETTING + String username = loginRequestDto.getUsername(); + String password = loginRequestDto.getPassword(); + + // 2. Check USERNAME, PASSWORD + User user = userRepository.findByUsername(username).orElseThrow( // 사용자 확인 + () -> new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) + ); + + if (!password.equals(user.getPassword())) { // 비밀번호 비교 + throw new CustomException(ErrorCode.WRONG_PASSWORD_ERROR); + } - // 1. USERNAME, PASSWORD SETTING - String username = loginRequestDto.getUsername(); - String password = loginRequestDto.getPassword(); - - // 2. Check USERNAME, PASSWORD - User user = userRepository.findByUsername(username).orElseThrow( // 사용자 확인 - () -> new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) - ); - - if (!password.equals(user.getPassword())) { // 비밀번호 비교 - throw new CustomException(ErrorCode.WRONG_PASSWORD_ERROR); + return new MsgResponseDto(LOG_IN); + } catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); } - - return new MsgResponseDto(LOG_IN); } diff --git a/src/main/java/com/example/pirate99_final/waiting/controller/WaitingController.java b/src/main/java/com/example/pirate99_final/waiting/controller/WaitingController.java index 2cb5962..a3f8767 100644 --- a/src/main/java/com/example/pirate99_final/waiting/controller/WaitingController.java +++ b/src/main/java/com/example/pirate99_final/waiting/controller/WaitingController.java @@ -23,7 +23,7 @@ public MsgResponseDto createWaiter(@PathVariable Long storeId, @RequestBody Wait } @PostMapping("/waitingList/myTurn/{storeId}") - public MyTurnResponseDto getMyTurn(@PathVariable Long storeId, @RequestBody WaitingRequestDto requestDto) { + public MsgResponseDto getMyTurn(@PathVariable Long storeId, @RequestBody WaitingRequestDto requestDto) { return waitingService.getMyTurn(storeId, requestDto); } diff --git a/src/main/java/com/example/pirate99_final/waiting/dto/MyTurnResponseDto.java b/src/main/java/com/example/pirate99_final/waiting/dto/MyTurnResponseDto.java index 1e1ece5..df500a9 100644 --- a/src/main/java/com/example/pirate99_final/waiting/dto/MyTurnResponseDto.java +++ b/src/main/java/com/example/pirate99_final/waiting/dto/MyTurnResponseDto.java @@ -1,7 +1,6 @@ package com.example.pirate99_final.waiting.dto; import com.example.pirate99_final.global.MsgResponseDto; -import com.example.pirate99_final.global.exception.ErrorCode; import lombok.Getter; @Getter @@ -11,15 +10,9 @@ public class MyTurnResponseDto extends MsgResponseDto { private int myTurn; - private int statusCode; - private String msg; public MyTurnResponseDto(int totalWaitingCnt, int myTurn) { this.totalWaitingCnt = totalWaitingCnt; this.myTurn = myTurn; } - public MyTurnResponseDto(ErrorCode errorCode) { - this.msg = errorCode.getMessage(); - this.statusCode = errorCode.getHttpStatus().value(); - } } diff --git a/src/main/java/com/example/pirate99_final/waiting/dto/WaitingMsgResponseDto.java b/src/main/java/com/example/pirate99_final/waiting/dto/WaitingMsgResponseDto.java deleted file mode 100644 index 16f64e6..0000000 --- a/src/main/java/com/example/pirate99_final/waiting/dto/WaitingMsgResponseDto.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.pirate99_final.waiting.dto; - -public class WaitingMsgResponseDto extends MyTurnResponseDto{ - - private int statusCode; - private String msg; - - public WaitingMsgResponseDto(int totalWaitingCnt, int myTurn) { - super(totalWaitingCnt, myTurn); - } -} diff --git a/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java b/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java index bee6397..3a02f1c 100644 --- a/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java +++ b/src/main/java/com/example/pirate99_final/waiting/repository/WaitingRepository.java @@ -23,6 +23,9 @@ public interface WaitingRepository extends JpaRepository { @Query(value = "select *from waiting where (waiting_status = :waitingStatus1 or waiting_status = :waitingStatus2) and store_status_id = :storeStatusId and user_id = :userId", nativeQuery = true) Optional alreadyQueue(int waitingStatus1, int waitingStatus2, Long userId, Long storeStatusId); + @Query(value = "select *from waiting where waiting_status = :waitingStatus1 and store_status_id = :storeStatusId and user_id = :userId", nativeQuery = true) + Optional alreadyEating(int waitingStatus1, Long userId, Long storeStatusId); + List findAllByStoreStatusOrderByWaitingIdAsc(StoreStatus storeStatus); } diff --git a/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java b/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java index 2e1bba5..2771bb7 100644 --- a/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java +++ b/src/main/java/com/example/pirate99_final/waiting/service/WaitingService.java @@ -60,42 +60,47 @@ public MsgResponseDto createWaiter(Long storeId, WaitingRequestDto requestDto) { ); // 대기열 중 상태값이 '대기중', '입장가능'인 사람들만 카운팅하기위해 구별해서 리스트에 담음 Optional alreadyQueue = waitingRepository.alreadyQueue(0, 1, user.getUserId(), storeStatus.getStoreStatusId()); - - // 잔여 좌석이 있을 때는, waitingRepository에 쌓기 - if(storeStatus.getAvailableTableCnt() > 0 && storeStatus.getWaitingCnt() == 0){ + Optional alreadyEating = waitingRepository.alreadyEating(2, user.getUserId(), storeStatus.getStoreStatusId()); + // 대기열 등록 요청한 고객이 이미 식사 중이 아니라면 입장완료 처리 + if (alreadyEating.isEmpty()){ + // 잔여 좌석이 있을 때는, waitingRepository에 쌓기 + if (storeStatus.getAvailableTableCnt() > 0 && storeStatus.getWaitingCnt() == 0){ // 대기자 명단에 자신의 이름이 없다면 if (alreadyQueue.isEmpty()){ - // 웨이팅(입장가능) 등록 + // 입장완료 등록 waitingRepository.save(new Waiting(user, storeStatus, 2)); storeStatus.update(storeStatus.getAvailableTableCnt() - 1); }else{ return new MsgResponseDto(ErrorCode.ALREADY_IN_QUEUE); } - }else{ - // 종업원이 설정한 대기인원 제한설정 값 보다 현재 대기인원이 적은 경우만 대기자 등록이 가능하게끔 설정 - if (storeStatus.getWaitingCnt() < storeStatus.getLimitWaitingCnt()) { - if (alreadyQueue.isEmpty()) { - // 웨이팅(대기자) 등록 - waitingRepository.save(new Waiting(user, storeStatus, 0)); + }else{ + // 종업원이 설정한 대기인원 제한설정 값 보다 현재 대기인원이 적은 경우만 대기자 등록이 가능하게끔 설정 + if (storeStatus.getWaitingCnt() < storeStatus.getLimitWaitingCnt()) { + if (alreadyQueue.isEmpty()) { + // 웨이팅(대기자) 등록 + waitingRepository.save(new Waiting(user, storeStatus, 0)); + } else { + return new MsgResponseDto(ErrorCode.ALREADY_IN_QUEUE); + } } else { - return new MsgResponseDto(ErrorCode.ALREADY_IN_QUEUE); + return new MsgResponseDto(ErrorCode.LIMIT_QUEUE_EXCEEDED); } - } else { - return new MsgResponseDto(ErrorCode.LIMIT_QUEUE_EXCEEDED); - } - storeStatus.update_waitingCnt(storeStatus.getWaitingCnt() + 1, storeStatus.getAvailableTableCnt()); + storeStatus.update_waitingCnt(storeStatus.getWaitingCnt() + 1, storeStatus.getAvailableTableCnt()); + } + }else { + return new MsgResponseDto(ErrorCode.ALREADY_EATING); } + // 해당 점포 웨이팅 현황 수에 업데이트 storeStatusRepository.save(storeStatus); lock.unlock(); return new MsgResponseDto(SuccessCode.CREATE_WAITING); - } catch (Exception e) { - lock.unlock(); - return new MsgResponseDto(ErrorCode.NOT_FOUND_USER_ERROR); + } catch (CustomException e) { + lock.unlock(); + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); } - } } catch (Exception e) { Thread.currentThread().interrupt(); @@ -104,7 +109,7 @@ public MsgResponseDto createWaiter(Long storeId, WaitingRequestDto requestDto) { } - public MyTurnResponseDto getMyTurn(Long storeId, WaitingRequestDto requestDto) { // 대기 인원 중 자신의 차례 조회 + public MsgResponseDto getMyTurn(Long storeId, WaitingRequestDto requestDto) { // 대기 인원 중 자신의 차례 조회 // 이용자가 자신의 차례를 조회할 때 쓰는 'myTurn'과 해당 점포 총 대기인원 수 'totalWaitingCnt' 를 선언한다. int myTurn = 0; int totalWaitingCnt = 0; @@ -128,8 +133,8 @@ public MyTurnResponseDto getMyTurn(Long storeId, WaitingRequestDto requestDto) { myTurn = i + 1; } } - }catch (Exception e) { - return new MyTurnResponseDto(ErrorCode.NOT_FOUND_USER_ERROR); + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); } return new MyTurnResponseDto(totalWaitingCnt, myTurn); } @@ -146,7 +151,6 @@ public WaitingResponseDto getWaiter(Long waitingId) { public MsgResponseDto deleteWaiter(Long waitingId) { // 대기인원 중 대기취소 등의 사유로 상태값을 변경하는 작업 Waiting waiting = waitingRepository.findByWaitingId(waitingId); -// int waitingCnt = store // 대기자 명단에서 상태값을 '3' (대기 취소)으로 변경함 waiting.update(3); From d22ccec900f59c9badb61ef13d8f43cf4337e9af Mon Sep 17 00:00:00 2001 From: Kyuu Date: Thu, 9 Feb 2023 22:56:13 +0900 Subject: [PATCH 19/21] =?UTF-8?q?[FIX]=20console=20log=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/js/index.js | 26 ++++--------------------- src/main/resources/templates/index.html | 9 --------- 2 files changed, 4 insertions(+), 31 deletions(-) diff --git a/src/main/resources/static/js/index.js b/src/main/resources/static/js/index.js index e38b786..aa492e3 100644 --- a/src/main/resources/static/js/index.js +++ b/src/main/resources/static/js/index.js @@ -109,7 +109,6 @@ function signIn() { }, }) .then(function (response) { - console.log("RESPONSE : " + JSON.stringify(response.data)); alert("로그인 성공, 요청 버튼을 눌러서 이메일 인증을 해주세요!") }) .catch(function (error) { @@ -176,9 +175,7 @@ function mystatus() { document.querySelector('.userId1').value = ''; }) .catch(function (error) { - console.log(""); - console.log("ERROR : " + JSON.stringify(error)); - console.log(""); + alert("상태 조회 오류!") }); } @@ -201,8 +198,6 @@ function postReview() { }, }) .then(function (response) { - console.log(""); - console.log("RESPONSE : " + JSON.stringify(response.data)); alert("리뷰 등록 성공!") document.querySelector('.postReviewUserId').value = ''; document.querySelector('.reviewComment').value = ''; @@ -212,9 +207,7 @@ function postReview() { postReview.style.display = 'none'; }) .catch(function (error) { - console.log(""); - console.log("ERROR : " + JSON.stringify(error)); - console.log(""); + alert("리뷰 등록 실패!") }); } @@ -233,8 +226,6 @@ function storeStatus() { }, }) .then(function (response) { - console.log(""); - console.log("RESPONSE : " + JSON.stringify(response.data)); const transferStatus = JSON.stringify(response.data); var status = JSON.parse(transferStatus); alert("내 상태 조회 완료!") @@ -242,9 +233,7 @@ function storeStatus() { }) .catch(function (error) { - console.log(""); - console.log("ERROR : " + JSON.stringify(error)); - console.log(""); + alert("내 상태 조회 오류!") }); } @@ -278,7 +267,7 @@ function sendMail() { code = JSON.stringify(response.data); // 이메일로 전송한 코드 저장 }) .catch(function (error) { - console.log("ERROR : " + JSON.stringify(error)); + alert("인증 전송 오류!") }); } } @@ -317,8 +306,6 @@ function storeReview(storeId) { }, }) .then(function (response) { - console.log(""); - console.log("RESPONSE : " + JSON.stringify(response.data)); const transeBlog = JSON.stringify(response.data); var blogList = JSON.parse(transeBlog); const blogNum = blogList.length; @@ -347,7 +334,6 @@ function storeReview(storeId) { } }) .catch(function (error) { - console.log(""); console.log("ERROR : " + JSON.stringify(error)); }); } @@ -372,16 +358,12 @@ function getStoreName() { }, }) .then(function (response) { - console.log(""); - console.log("RESPONSE : " + JSON.stringify(response.data)); const transferStoreName = JSON.stringify(response.data); var storeName = JSON.parse(transferStoreName); document.getElementById("myStoreName").innerHTML = storeName.storeName; }) .catch(function (error) { - console.log(""); console.log("ERROR : " + JSON.stringify(error)); - console.log(""); }); } diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index a6815ee..c14de0a 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -86,14 +86,6 @@ - -
@@ -296,7 +288,6 @@