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" ] diff --git a/README.md b/README.md index 5a842fd..a87b158 100644 --- a/README.md +++ b/README.md @@ -2,96 +2,155 @@ ![image](https://user-images.githubusercontent.com/117708164/216932548-af5766aa-a9a5-4d02-ba3f-49467c3fb956.png) # PIN Table 🍽 -### Pin-Table은, λŒ€μš©λŸ‰ μœ„μΉ˜ 데이터λ₯Ό ν™œμš©ν•œ μœ„μΉ˜ 검색과 μŠ€ν† μ–΄ μ›¨μ΄νŒ… 신청을 μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€ μž…λ‹ˆλ‹€. +### λŒ€μš©λŸ‰ μœ„μΉ˜ 데이터λ₯Ό ν™œμš©ν•œ μœ„μΉ˜ 검색과 μŠ€ν† μ–΄ μ›¨μ΄νŒ… 신청을 μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€ μž…λ‹ˆλ‹€. - μœ„μΉ˜ 데이터λ₯Ό ν™œμš©ν•œ μž₯μ†Œ μœ„μΉ˜ 검색을 ν•  수 μžˆμ–΄μš” πŸ™†πŸ» - 가고싢은 식당을 κ²€μƒ‰ν•˜κ³ , ν˜„μž¬ μ›¨μ΄νŒ… ν˜„ν™© 및 μ›¨μ΄νŒ… 신청을 ν•  수 μžˆμ–΄μš” ❗️ +# -## πŸ“ Index +## Pin-Table 기둝지 -1. [ν”„λ‘œμ νŠΈ μ†Œκ°œ](#1-ν”„λ‘œμ νŠΈ-μ†Œκ°œ-) -2. [기술 μŠ€νƒ](#2-기술-μŠ€νƒ-) -3. [κΈ°λŠ₯ λͺ…μ„Έ](#3-κΈ°λŠ₯-λͺ…μ„Έ-) -4. [μ‹œμ—° μ˜μƒ](#4-μ‹œμ—°μ˜μƒ-) -5. [μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜](#5-μ„œλΉ„μŠ€-μ•„ν‚€ν…μ²˜-) -6. [ERD](#6-erd-) -7. [API](#7-api-) -# +[πŸ“˜ ν•€ν…Œμ΄λΈ” λΈŒλ‘œμŠˆμ–΄](https://www.notion.so/PIN-TABLE-3985986345c640969a8a8a5c3cabb3e1)
+[πŸ“— ν•€ν…Œμ΄λΈ” Notion](https://speckle-apple-b3b.notion.site/Pin-Table-d4c37b30fd804199b3392045c0080129) -## 1. ν”„λ‘œμ νŠΈ μ†Œκ°œ πŸ“’ -- μ„€λͺ… : Challenge Team3 | Pin-Table ν”„λ‘œμ νŠΈ -- κΈ°κ°„ : 2022.12.30 ~ 2022.02.09 +# +## ν”„λ‘œμ νŠΈ μ†Œκ°œ πŸ“’ +- μ„€λͺ… : +- ν”„λ‘œμ νŠΈ λͺ©ν‘œ : + - λŒ€μš©λŸ‰ μž₯μ†Œ 데이터λ₯Ό ν™œμš©ν•œ 검색 및 μ˜ˆμ•½ μ„œλΉ„μŠ€ ν”Œλž«νΌ +- ν”„λ‘œμ νŠΈ 이름 : + - Pin-Table +- κ΅¬ν˜„ κΈ°λŠ₯ 및 핡심 λͺ©ν‘œ : + - 검색 μ‹œμŠ€ν…œ + μ›¨μ΄νŒ… μ„œλΉ„μŠ€λ₯Ό μ ‘λͺ©ν•˜μ—¬ 검색뢀터 μ˜ˆμ•½κΉŒμ§€ κ°€λŠ₯ν•˜λ„λ‘ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€. + - **μ•½ 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 | # -## 2. 기술 μŠ€νƒ πŸ”¨ +## 기술 μŠ€νƒ πŸ”¨
- - - - - - - -
- - - - - - -
+ + + + + +
+ + + + + + +
+ + + + + + + + + +
+ + + + +
# -## 3. κΈ°λŠ₯ λͺ…μ„Έ πŸ—‚ -
-Β μ£Όμš” κΈ°λŠ₯ πŸ–‹ -
+## μ£Όμš” κΈ°λŠ₯ μ†Œκ°œ πŸ—‚ -(1) μž₯μ†Œ 검색 +| μž₯μ†Œ 검색 | μ˜ˆμ•½(μ›¨μ΄νŒ…) μ‹œμŠ€ν…œ | +|:------:|:------:| +| ![α„€α…₯α†·α„‰α…’α†¨α„ˆα…‘α„…α…³α„€α…¦](https://user-images.githubusercontent.com/117708164/217257406-1717d3d7-5384-49d6-9fe5-67e3087a5ce4.gif) | ![웨아탕등록2ᄇᅒ속](https://user-images.githubusercontent.com/117708164/217257762-10912785-2722-4dd9-938d-10a768b9d117.gif) | +|- μž₯μ†Œ 검색
- μΉ΄ν…Œκ³ λ¦¬ ν•„ν„° 검색
- λž­ν‚Ή 쑰회
|- μŠ€ν† μ–΄ μ›¨μ΄νŒ… μ‹ μ²­
- μŠ€ν† μ–΄ ν˜„ν™© 쑰회
- μ‚¬μš©μž μœ νš¨μ„±(메일) 인증 및 메일 호좜| -- μž₯μ†Œ 검색 κΈ°λŠ₯ -- μΉ΄ν…Œκ³ λ¦¬ ν•„ν„° 검색 κΈ°λŠ₯ -- 검색어 μ§€μ • 검색 (κ°€κ²Œ 이름 / λ„λ‘œλͺ… μ£Όμ†Œ / μ—…μ’…) -- λž­ν‚Ή 쑰회(평점 4점 이상 / 평점 높은 순 / 리뷰 1000개 이상 / 리뷰 높은 순) -- Elastic Search + Nori ν˜•νƒœμ†Œ 뢄석기λ₯Ό μ΄μš©ν•œ λΉ λ₯΄κ³  μ •ν™•ν•œ 검색 κΈ°λŠ₯ 제곡 + +| μž₯μ†Œ 리뷰 κΈ°λŠ₯ | κ΄€λ¦¬μžνŽ˜μ΄μ§€ | +|:------:|:------:| +| ![α„…α…΅α„‡α…²α„ˆα…‘α„…α…³α„€α…¦](https://user-images.githubusercontent.com/117708164/217258004-0e90f7d1-751f-480c-be8d-5cb66902d211.gif) |![](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)| +|- μž₯μ†Œ 리뷰 μž‘μ„± 및 쑰회 κΈ°λŠ₯
- 리뷰 등둝 μ‹œ μŠ€ν† μ–΄ 정보 κ°±μ‹ (별점, 리뷰 갯수)
|- μ›¨μ΄νŒ… ν˜„ν™© 확인
- μ›¨μ΄νŒ… 호좜(이메일)
| + +# +## μ‹œμ—°μ˜μƒ πŸŽ₯ +[μ‹œμ—°μ˜μƒ λ°”λ‘œκ°€κΈ°](https://www.youtube.com/watch?v=HmiIVvJn6I8&t=21s) + +# +## μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜ 🎨 +![image](https://user-images.githubusercontent.com/117708164/216933029-f5c882eb-daec-4216-a27c-56822226726f.png) + +# +## ERD πŸ‘¨πŸ»β€πŸ’» +
+ 펼쳐보기 +
+ +![image](https://user-images.githubusercontent.com/117708164/216933200-78984f6c-6653-46ea-bf1f-ee8900e5c2bf.png) + +
+
-(2) μ˜ˆμ•½(μ›¨μ΄νŒ…) μ‹œμŠ€ν…œ +# +## API πŸ’¬ +[Swagger API λ°”λ‘œκ°€κΈ°](https://pintable.co.kr/swagger-ui/index.html?urls.primaryName=store#/store-controller/createStoreUsingPOST) -- μŠ€ν† μ–΄ μ›¨μ΄νŒ… μ‹ μ²­ κΈ°λŠ₯ -- μŠ€ν† μ–΄ ν˜„ν™© 쑰회 κΈ°λŠ₯ -- μ‚¬μš©μž μœ νš¨μ„±(메일) 인증 및 메일 호좜 κΈ°λŠ₯ +# +## νŠΈλŸ¬λΈ”μŠˆνŒ… 🐞 -(3) μž₯μ†Œ 리뷰 κΈ°λŠ₯ +
+ 데이터 μˆ˜μ§‘ +
+
+ (1) 곡곡 APIλ₯Ό μ΄μš©ν•œ λŒ€μš©λŸ‰ μž₯μ†Œ 데이터 μˆ˜μ§‘
+ - 곡곡 데이터 ν¬ν„Έμ—μ„œ μ œκ³΅ν•˜λŠ” μ „κ΅­ μŒμ‹μ /카페의 파일 데이터 μˆ˜μ§‘ (μ•½ 650만건)
-- μž₯μ†Œ 리뷰 μž‘μ„± 및 쑰회 κΈ°λŠ₯ -- 리뷰 등둝 μ‹œ μŠ€ν† μ–΄ 정보 κ°±μ‹ (별점, 리뷰 갯수) κΈ°λŠ₯ +
+(2) μž₯μ†Œ 데이터 1μ°¨ 가곡
+ - 곡곡 데이터 ν¬ν„Έμ—μ„œ μˆ˜μ§‘ν•œ 데이터 쀑 λΆˆν•„μš” 컬럼 및 폐업 μž₯μ†Œ 데이터 제거 (μ•½ 200만건)
+
+(3) 넀이버 ν”Œλ ˆμ΄μŠ€ μ›Ή 크둀링을 ν†΅ν•œ μΆ”κ°€ 데이터 μˆ˜μ§‘
+ - 웹크둀링(Python + μ…€λ ˆλ‹ˆμ›€)을 μ΄μš©ν•˜μ—¬ 리뷰 갯수/ λΈ”λ‘œκ·Έ 리뷰 / 별점 정보 λ“± μΆ”κ°€ 데이터 μˆ˜μ§‘
+ - 넀이버 ν”Œλ ˆμ΄μŠ€ 크둀링 μ‹œ νŠΉμ • 횟수 이상 반볡 μ‹œλ„μ‹œ μ°¨λ‹¨λ˜λŠ” κ²½μš°κ°€ λ°œμƒν•˜μ˜€κ³ , μ•„λž˜ 과정을 톡해 ν•΄κ²°
+ πŸ‘‰ https://www.notion.so/404-Not-Found-9ec37cc4600545e7972663f4d9d06364
+
+(4) Faker 라이브러리λ₯Ό μ΄μš©ν•œ 리뷰/μ‚¬μš©μž 데이터 생성
+ - Faker 라이브러리λ₯Ό μ΄μš©ν•˜μ—¬ μ•½ 600만건의 리뷰/μ‚¬μš©μž 데이터 생성
+
-## 4. μ‹œμ—°μ˜μƒ πŸŽ₯ -[μ‹œμ—°μ˜μƒ λ°”λ‘œκ°€κΈ°](https://www.youtube.com/watch?v=iY3YxFOawYs) +
+ 검색 μ„±λŠ₯ ν–₯상 +
+ πŸ”Ž 검색 μ„±λŠ₯ κ°œμ„  μžμ„Ένžˆ 보기 : https://www.notion.so/PIN-TABLE-98c3a7dbb1324630a3a300575b2f7782
+ γ„΄( πŸ₯Ή μ—΄μ‹¬νžˆν–ˆλŠ”λ° 봐주싀꺼죠? πŸ₯Ή) -## 5. μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜ 🎨 -![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λͺ…μ„Έμ„œ λ°”λ‘œκ°€κΈ° Swagger](https://pintable.co.kr/swagger-ui/index.html?urls.primaryName=store#/store-controller/createStoreUsingPOST) -## 8. νŠΈλŸ¬λΈ”μŠˆνŒ… 🐞 +
+ λ™μ‹œμ„± μ œμ–΄ +
+ 🧲 λ™μ‹œμ„± μ œμ–΄ μžμ„Ένžˆ 보기 : https://www.notion.so/PIN-TABLE-721fb45b91454dda8255e0de4ac757ca +) +
+
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 aa75ae4..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{ @@ -19,5 +21,13 @@ public CustomException(int statusCode, String msg) { this.msg = msg; // μ•ˆλ‚΄ 문ꡬ this.statusCode = statusCode; // μƒνƒœ μ½”λ“œ } + 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 9bcf8e0..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,31 +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 f81762b..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}") @@ -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}") @@ -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/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/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/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 cadb07a..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,177 +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) + ); - // 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); - // 3. counting availableCnt - if((storeStatus.getAvailableTableCnt() - 1) > 0){ - availableCnt = storeStatus.getAvailableTableCnt() - 1; - } - else if(storeStatus.getAvailableTableCnt() == 0){ - return new MsgResponseDto(SuccessCode.NOT_ENOUGH_TABLE); // ν•΄λ‹Ή λΆ€λΆ„ μˆ˜μ • ν•„μš” - } + // 3. counting availableCnt + if((storeStatus.getAvailableTableCnt() - 1) > 0){ + availableCnt = storeStatus.getAvailableTableCnt() - 1; + } + else if(storeStatus.getAvailableTableCnt() == 0){ + return new MsgResponseDto(SuccessCode.NOT_ENOUGH_TABLE); // ν•΄λ‹Ή λΆ€λΆ„ μˆ˜μ • ν•„μš” + } - // 4. update storeStatus - storeStatus.update(availableCnt); - storeStatusRepository.save(storeStatus); + // 4. update storeStatus + storeStatus.update(availableCnt); + storeStatusRepository.save(storeStatus); - return new MsgResponseDto(SuccessCode.CONFIRM_ENTER); + return new MsgResponseDto(SuccessCode.CONFIRM_ENTER); + }catch (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); + } } // Leave people from store @Transactional - public MsgResponseDto leaveStore(Long storeId) { + public MsgResponseDto leaveStore(Long storeId, LeaveRequestDto requestDto) { int availableCnt = 0; // 이용 κ°€λŠ₯ μ’Œμ„ - - // 1. find store - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); - - // 2. storeStatus check - StoreStatus storeStatus = storeStatusRepository.findByStore(store); - - availableCnt = storeStatus.getAvailableTableCnt() + 1; - - // Leaving people check - storeStatus.update(availableCnt); - - Waiting waiting = waitingRepository.findFirstByStoreStatusAndWaitingStatusOrderByWaitingIdAsc(storeStatus, 0); - - if(waiting != null){ + try { // 1. find store - store = storeRepository.findById(storeId).orElseThrow(() -> + Store store = storeRepository.findById(storeId).orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) ); // 2. storeStatus check - storeStatus = storeStatusRepository.findByStore(store); + StoreStatus storeStatus = storeStatusRepository.findByStore(store); // 3. User find - User user = userRepository.findByUsername(waiting.getUser().getUsername()).orElseThrow(() -> + User user = userRepository.findByUsername(requestDto.getUsername()).orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) ); + Waiting waiting = waitingRepository.findByStoreStatusAndUser(storeStatus, user); - Waiting waiting2 = waitingRepository.findByStoreStatusAndUser(storeStatus, user); - waiting.update(2); - - int waitingCnt = 0; + if (waiting.getWaitingStatus() == 2) { + waiting.update(4); - if(storeStatus.getWaitingCnt() > 0){ - waitingCnt = storeStatus.getWaitingCnt() - 1; + availableCnt = storeStatus.getAvailableTableCnt() + 1; + storeStatus.update(availableCnt); + } else { + return new MsgResponseDto(ErrorCode.ALREADY_LEAVING); } - availableCnt = storeStatus.getAvailableTableCnt(); - - if (availableCnt > 0) { - availableCnt = availableCnt - 1; - } - - storeStatus.update_waitingCnt(waitingCnt, availableCnt); + 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) - ); + 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) + ); - // 2. storeStatus check - StoreStatus storeStatus = storeStatusRepository.findByStore(store); + Waiting waiting = waitingRepository.findByStoreStatusAndUser(storeStatus, user); - // 3. User find - User user = userRepository.findByUsername(requestDto.getUsername()).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_USER_ERROR) - ); + if (requestDto.getWaitingStatus() == 1) { + waiting.update(2); + int waitingCnt = storeStatus.getWaitingCnt() - 1; + int availableCnt = storeStatus.getAvailableTableCnt(); - Waiting waiting = waitingRepository.findByStoreStatusAndUser(storeStatus, user); + if (availableCnt > 0) { + availableCnt = availableCnt - 1; + } - if (requestDto.getWaitingStatus() == 1) { - waiting.update(2); - int waitingCnt = storeStatus.getWaitingCnt() - 1; - int availableCnt = storeStatus.getAvailableTableCnt(); + storeStatus.update_waitingCnt(waitingCnt, availableCnt); + } else if (requestDto.getWaitingStatus() == 3) { + waiting.update(3); + int waitingCnt = storeStatus.getWaitingCnt() - 1; + int availableCnt = storeStatus.getAvailableTableCnt(); - if (availableCnt > 0) { - availableCnt = availableCnt - 1; + 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.findByStoreStatusAndUser(storeStatus, user); - 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 { @@ -275,62 +276,61 @@ private String setContext(String mailform) { @Transactional public MsgResponseDto limitWaitingCnt(Long storeId, LimitWaitingCntRequestDto requestDto) throws MessagingException { - int totalWaitingCnt, limitWaitingCnt = 0; - - - // 1. find store - Store store = storeRepository.findById(storeId).orElseThrow(() -> - new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) - ); - - // 2. storeStatus check - StoreStatus storeStatus = storeStatusRepository.findByStore(store); - - // λŒ€κΈ°μ—΄ 쀑 μƒνƒœκ°’μ΄ 'λŒ€κΈ°μ€‘', 'μž…μž₯κ°€λŠ₯'인 μ‚¬λžŒλ“€λ§Œ μΉ΄μš΄νŒ…ν•˜κΈ°μœ„ν•΄ κ΅¬λ³„ν•΄μ„œ λ¦¬μŠ€νŠΈμ— λ‹΄μŒ - List waitingList = waitingRepository. - findAllByStoreStatusAndWaitingStatusOrWaitingStatusOrderByWaitingIdAsc(storeStatus, 0, 1); - - // μ ν¬μ—μ„œ μ„€μ •ν•œ λŒ€κΈ° 인원 μ œν•œν•œ 값을 점포 μƒνƒœμ— μ—…λ°μ΄νŠΈ 함 - storeStatus.update_limitWaitingCnt(requestDto.getLimitWaitingCnt()); + int limitWaitingCnt = 0; + try { + // 1. find store + Store store = storeRepository.findById(storeId).orElseThrow(() -> + new CustomException(ErrorCode.NOT_FOUND_STORE_ERROR) + ); - limitWaitingCnt = storeStatus.getLimitWaitingCnt(); + // 2. storeStatus check + StoreStatus storeStatus = storeStatusRepository.findByStore(store); + // λŒ€κΈ°μ—΄ 쀑 μƒνƒœκ°’μ΄ 'λŒ€κΈ°μ€‘', 'μž…μž₯κ°€λŠ₯'인 μ‚¬λžŒλ“€λ§Œ μΉ΄μš΄νŒ…ν•˜κΈ°μœ„ν•΄ κ΅¬λ³„ν•΄μ„œ λ¦¬μŠ€νŠΈμ— λ‹΄μŒ + List waitingList = waitingRepository. + waitingList(0, 1, storeStatus.getStoreStatusId()); - // λŒ€κΈ°μΈμ› μ œν•œμ΄ '0'인 경우 'default' 값인 λ¬΄ν•œμœΌλ‘œ μ„€μ • - if (limitWaitingCnt == 1000) { + // μ ν¬μ—μ„œ μ„€μ •ν•œ λŒ€κΈ° 인원 μ œν•œν•œ 값을 점포 μƒνƒœμ— μ—…λ°μ΄νŠΈ 함 + storeStatus.update_limitWaitingCnt(requestDto.getLimitWaitingCnt()); - return new MsgResponseDto(LIMIT_DEFAULT); - // λŒ€κΈ°μΈμ› μ œν•œμ΄ 총 λŒ€κΈ°μΈμ› 수 보닀 큰 경우, 섀정이 μ™„λ£Œλ˜μ—ˆλ‹€λŠ” λ©”μ„Έμ§€ λ°˜ν™˜ - } else if (limitWaitingCnt >= storeStatus.getWaitingCnt()) { + limitWaitingCnt = storeStatus.getLimitWaitingCnt(); - return new MsgResponseDto(SuccessCode.LIMIT_SETTING); - // λŒ€κΈ°μΈμ› μ œν•œμ΄ 총 λŒ€κΈ°μΈμ› 수 보닀 적은 경우, μ œν•œμ„ μ΄ˆκ³Όν•œ ν˜„μž¬ λŒ€κΈ°μΈμ›λ“€μ—κ²Œ 이메일을 보내고 λŒ€κΈ°μ·¨μ†Œ μ²˜λ¦¬ν•œλ‹€. - } else if (limitWaitingCnt < storeStatus.getWaitingCnt()) { + int waitingCnt = storeStatus.getWaitingCnt(); + // λŒ€κΈ°μΈμ› μ œν•œμ΄ '0'인 경우 'default' 값인 λ¬΄ν•œμœΌλ‘œ μ„€μ • + if (limitWaitingCnt == 1000) { - for (int i = limitWaitingCnt; i < storeStatus.getWaitingCnt(); i++) { + return new MsgResponseDto(LIMIT_DEFAULT); + // λŒ€κΈ°μΈμ› μ œν•œμ΄ 총 λŒ€κΈ°μΈμ› 수 보닀 큰 경우, 섀정이 μ™„λ£Œλ˜μ—ˆλ‹€λŠ” λ©”μ„Έμ§€ λ°˜ν™˜ + } else if (limitWaitingCnt >= storeStatus.getWaitingCnt()) { - Waiting waiting_person = waitingList.get(i); + return new MsgResponseDto(SuccessCode.LIMIT_SETTING); + // λŒ€κΈ°μΈμ› μ œν•œμ΄ 총 λŒ€κΈ°μΈμ› 수 보닀 적은 경우, μ œν•œμ„ μ΄ˆκ³Όν•œ ν˜„μž¬ λŒ€κΈ°μΈμ›λ“€μ—κ²Œ 이메일을 보내고 λŒ€κΈ°μ·¨μ†Œ μ²˜λ¦¬ν•œλ‹€. + } else if (limitWaitingCnt < storeStatus.getWaitingCnt()) { - String toEmail = waiting_person.getUser().getAddress(); - String storeName = store.getStoreName(); - String title = "Pin Table [" + storeName + "] μ›¨μ΄νŒ… μ·¨μ†Œ μ•ˆλ‚΄"; - String mailForm = "mailForm_cancle"; + for (int i = limitWaitingCnt; i < storeStatus.getWaitingCnt(); i++) { - // λŒ€κΈ°μ·¨μ†Œ μƒνƒœλ‘œ λ³€κ²½ - waiting_person.update(3); + 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"; - MimeMessage emailForm = createEmailForm(toEmail, title, mailForm); - emailSender.send(emailForm); + // λŒ€κΈ°μ·¨μ†Œ μƒνƒœλ‘œ λ³€κ²½ + waiting_person.update(3); + waitingCnt = waitingCnt - 1; - return new MsgResponseDto(CONFIRM_ENTER); + MimeMessage emailForm = createEmailForm(toEmail, title, mailForm); + emailSender.send(emailForm); + } + 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) { @@ -565,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.findAllByStoreStatusAndWaitingStatusOrWaitingStatusOrderByWaitingIdAsc(storeStatus, 0, 1); + 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 4d79361..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,20 +23,20 @@ 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); } - @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..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,14 +1,16 @@ package com.example.pirate99_final.waiting.dto; +import com.example.pirate99_final.global.MsgResponseDto; import lombok.Getter; @Getter -public class MyTurnResponseDto { +public class MyTurnResponseDto extends MsgResponseDto { private int totalWaitingCnt; private int myTurn; + public MyTurnResponseDto(int totalWaitingCnt, int myTurn) { this.totalWaitingCnt = totalWaitingCnt; this.myTurn = myTurn; 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 cd87795..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 @@ -11,17 +11,21 @@ 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); + @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) 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); - 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 7befc84..c7c1de1 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; @@ -42,58 +43,63 @@ public class WaitingService { public MsgResponseDto createWaiter(Long storeId, WaitingRequestDto requestDto) { // λŒ€κΈ°μž 등둝 μ‹œμŠ€ν…œ - RLock lock = redissonClient.getLock("key 이름"); + RLock lock = redissonClient.getLock("Waiting"); try { - boolean isLocked = lock.tryLock(60000, 60000, TimeUnit.MILLISECONDS); + boolean isLocked = lock.tryLock(60000, 45000, TimeUnit.MILLISECONDS); 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) ); - - // μž”μ—¬ μ’Œμ„μ΄ μžˆμ„ λ•ŒλŠ”, 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 (storeStatus.getWaitingCnt() < storeStatus.getLimitWaitingCnt()) { - if (alreadyQueue.isEmpty()) { - // μ›¨μ΄νŒ…(λŒ€κΈ°μž) 등둝 - Waiting waiting = waitingRepository.save(new Waiting(user, storeStatus, 0)); - } else { + // λŒ€κΈ°μ—΄ 쀑 μƒνƒœκ°’μ΄ 'λŒ€κΈ°μ€‘', 'μž…μž₯κ°€λŠ₯'인 μ‚¬λžŒλ“€λ§Œ μΉ΄μš΄νŒ…ν•˜κΈ°μœ„ν•΄ κ΅¬λ³„ν•΄μ„œ λ¦¬μŠ€νŠΈμ— λ‹΄μŒ + Optional alreadyQueue = waitingRepository.alreadyQueue(0, 1, user.getUserId(), storeStatus.getStoreStatusId()); + 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 { - return new MsgResponseDto(ErrorCode.LIMIT_QUEUE_EXCEEDED); - } + }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.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) { - - } finally { + } catch (CustomException e) { lock.unlock(); + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); } } } catch (Exception e) { @@ -102,62 +108,52 @@ public MsgResponseDto createWaiter(Long storeId, WaitingRequestDto requestDto) { return null; } - @Transactional - public MyTurnResponseDto getMyTurn(Long storeId, WaitingRequestDto requestDto) { // λŒ€κΈ° 인원 쀑 μžμ‹ μ˜ μ°¨λ‘€ 쑰회 + public MsgResponseDto 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 (CustomException e) { + return new MsgResponseDto(e.getStatusCode(), e.getMsg()); } 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); - // λŒ€κΈ°μž λͺ…λ‹¨μ—μ„œ μƒνƒœκ°’μ„ '3' (λŒ€κΈ° μ·¨μ†Œ)으둜 변경함 waiting.update(3); + return new MsgResponseDto(SuccessCode.DELETE_WAITING); } @@ -186,8 +182,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)); } diff --git a/src/main/resources/static/js/admin.js b/src/main/resources/static/js/admin.js index 4f96005..d70c338 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둜 꺼냄 @@ -52,7 +48,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 +62,17 @@ function EnterStatus() { ${waitingNum} ${waitingUserName} ${waitingStatus} - - - - - - - - - + + + + + + + + + + + ` $('#waitingList').append(temp_html) } @@ -97,7 +95,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 +110,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 +134,9 @@ 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" @@ -179,7 +178,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) { diff --git a/src/main/resources/static/js/index.js b/src/main/resources/static/js/index.js index b469fbd..aa492e3 100644 --- a/src/main/resources/static/js/index.js +++ b/src/main/resources/static/js/index.js @@ -109,8 +109,6 @@ function signIn() { }, }) .then(function (response) { - console.log(""); - console.log("RESPONSE : " + JSON.stringify(response.data)); alert("둜그인 성곡, μš”μ²­ λ²„νŠΌμ„ λˆŒλŸ¬μ„œ 이메일 인증을 ν•΄μ£Όμ„Έμš”!") }) .catch(function (error) { @@ -136,8 +134,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 +141,6 @@ function callWaiting() { location.reload(); }) .catch(function (error) { - console.log(""); - console.log("ERROR : " + JSON.stringify(error)); - console.log(""); }); } else { alert("μ‚¬μš©μž 이메일 인증이 λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 인증확인을 λˆŒλŸ¬μ£Όμ„Έμš”!") @@ -182,9 +175,7 @@ function mystatus() { document.querySelector('.userId1').value = ''; }) .catch(function (error) { - console.log(""); - console.log("ERROR : " + JSON.stringify(error)); - console.log(""); + alert("μƒνƒœ 쑰회 였λ₯˜!") }); } @@ -207,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 = ''; @@ -218,9 +207,7 @@ function postReview() { postReview.style.display = 'none'; }) .catch(function (error) { - console.log(""); - console.log("ERROR : " + JSON.stringify(error)); - console.log(""); + alert("리뷰 등둝 μ‹€νŒ¨!") }); } @@ -239,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("λ‚΄ μƒνƒœ 쑰회 μ™„λ£Œ!") @@ -248,9 +233,7 @@ function storeStatus() { }) .catch(function (error) { - console.log(""); - console.log("ERROR : " + JSON.stringify(error)); - console.log(""); + alert("λ‚΄ μƒνƒœ 쑰회 였λ₯˜!") }); } @@ -284,7 +267,7 @@ function sendMail() { code = JSON.stringify(response.data); // μ΄λ©”μΌλ‘œ μ „μ†‘ν•œ μ½”λ“œ μ €μž₯ }) .catch(function (error) { - console.log("ERROR : " + JSON.stringify(error)); + alert("인증 전솑 였λ₯˜!") }); } } @@ -323,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; @@ -353,7 +334,6 @@ function storeReview(storeId) { } }) .catch(function (error) { - console.log(""); console.log("ERROR : " + JSON.stringify(error)); }); } @@ -378,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 @@