From f99bc55b532500a2eb88c887dd35bb20767223e2 Mon Sep 17 00:00:00 2001 From: silkair Date: Mon, 27 Apr 2026 13:14:56 +0900 Subject: [PATCH 01/30] =?UTF-8?q?=EC=98=88=EC=95=BD=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=20=EB=B0=A9=EB=AC=B8=20=EC=99=84=EB=A3=8C=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=20=EB=B0=8F=20=EC=98=88=EC=95=BD=20=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20api=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/catchtable/global/exception/ErrorCode.java | 3 ++- .../controller/ReservationController.java | 13 +++++++++++++ .../update/ReservationStatusUpdateRequestDto.java | 10 ++++++++++ .../reservation/entity/ReservationStatus.java | 3 ++- .../reservation/service/ReservationService.java | 7 +++++++ .../catchtable/review/service/ReviewService.java | 4 ++-- 6 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/catchtable/reservation/dto/update/ReservationStatusUpdateRequestDto.java diff --git a/src/main/java/com/catchtable/global/exception/ErrorCode.java b/src/main/java/com/catchtable/global/exception/ErrorCode.java index ac3e4f2..be2d7a0 100644 --- a/src/main/java/com/catchtable/global/exception/ErrorCode.java +++ b/src/main/java/com/catchtable/global/exception/ErrorCode.java @@ -61,7 +61,8 @@ public enum ErrorCode implements ResponseCode { REVIEW_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 리뷰입니다."), NOT_REVIEW_OWNER(HttpStatus.FORBIDDEN, "본인의 리뷰만 접근할 수 있습니다."), REVIEW_ALREADY_EXISTS(HttpStatus.BAD_REQUEST, "이미 해당 예약에 대한 리뷰를 작성했습니다."), - REVIEW_NOT_ALLOWED(HttpStatus.FORBIDDEN, "예약이 확정된 사용자만 리뷰를 작성할 수 있습니다."), + REVIEW_NOT_ALLOWED(HttpStatus.FORBIDDEN, "예약이 방문 완료된 사용자만 리뷰를 작성할 수 있습니다."), + // Chat CHAT_SESSION_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 채팅 세션입니다."), CHAT_DAILY_LIMIT_EXCEEDED(HttpStatus.TOO_MANY_REQUESTS, "일일 메시지 제한(100회)을 초과했습니다."), diff --git a/src/main/java/com/catchtable/reservation/controller/ReservationController.java b/src/main/java/com/catchtable/reservation/controller/ReservationController.java index ef09eae..62a8500 100644 --- a/src/main/java/com/catchtable/reservation/controller/ReservationController.java +++ b/src/main/java/com/catchtable/reservation/controller/ReservationController.java @@ -6,6 +6,7 @@ import com.catchtable.reservation.dto.create.ReservationCreateResponseDto; import com.catchtable.reservation.dto.read.ReservationDetailResponseDto; import com.catchtable.reservation.dto.read.ReservationListResponseDto; +import com.catchtable.reservation.dto.update.ReservationStatusUpdateRequestDto; import com.catchtable.reservation.dto.update.ReservationUpdateRequestDto; import com.catchtable.reservation.dto.update.ReservationUpdateResponseDto; import jakarta.validation.Valid; @@ -77,4 +78,16 @@ public ResponseEntity> updateReservati .status(SuccessCode.RESERVATION_UPDATE_SUCCESS.getHttpStatus()) .body(ApiResponse.success(SuccessCode.RESERVATION_UPDATE_SUCCESS, responseData)); } + + @PatchMapping("/{reservationId}/status") + public ResponseEntity> updateReservationStatus( + @PathVariable Long reservationId, + @RequestParam Long userId, + @Valid @RequestBody ReservationStatusUpdateRequestDto request + ) { + reservationService.updateReservationStatus(reservationId, userId, request); + return ResponseEntity + .status(SuccessCode.RESERVATION_UPDATE_SUCCESS.getHttpStatus()) + .body(ApiResponse.success(SuccessCode.RESERVATION_UPDATE_SUCCESS)); + } } diff --git a/src/main/java/com/catchtable/reservation/dto/update/ReservationStatusUpdateRequestDto.java b/src/main/java/com/catchtable/reservation/dto/update/ReservationStatusUpdateRequestDto.java new file mode 100644 index 0000000..5efb555 --- /dev/null +++ b/src/main/java/com/catchtable/reservation/dto/update/ReservationStatusUpdateRequestDto.java @@ -0,0 +1,10 @@ +package com.catchtable.reservation.dto.update; + +import com.catchtable.reservation.entity.ReservationStatus; +import jakarta.validation.constraints.NotNull; + +public record ReservationStatusUpdateRequestDto( + @NotNull(message = "변경할 상태 값은 필수입니다.") + ReservationStatus status +) { +} diff --git a/src/main/java/com/catchtable/reservation/entity/ReservationStatus.java b/src/main/java/com/catchtable/reservation/entity/ReservationStatus.java index ae61e6a..0435323 100644 --- a/src/main/java/com/catchtable/reservation/entity/ReservationStatus.java +++ b/src/main/java/com/catchtable/reservation/entity/ReservationStatus.java @@ -4,5 +4,6 @@ public enum ReservationStatus { PENDING, CONFIRMED, CANCELED, - NOSHOW + NOSHOW, + VISITED } diff --git a/src/main/java/com/catchtable/reservation/service/ReservationService.java b/src/main/java/com/catchtable/reservation/service/ReservationService.java index aab2b26..07931da 100644 --- a/src/main/java/com/catchtable/reservation/service/ReservationService.java +++ b/src/main/java/com/catchtable/reservation/service/ReservationService.java @@ -9,6 +9,7 @@ import com.catchtable.remain.repository.StoreRemainRepository; import com.catchtable.reservation.dto.create.ReservationCreateRequestDto; import com.catchtable.reservation.dto.create.ReservationCreateResponseDto; +import com.catchtable.reservation.dto.update.ReservationStatusUpdateRequestDto; import com.catchtable.reservation.dto.update.ReservationUpdateRequestDto; import com.catchtable.reservation.dto.update.ReservationUpdateResponseDto; import com.catchtable.reservation.dto.read.ReservationDetailResponseDto; @@ -195,4 +196,10 @@ public ReservationUpdateResponseDto updateReservation(Long reservationId, Long u savedReservation.getUpdatedAt() != null ? savedReservation.getUpdatedAt() : java.time.LocalDateTime.now() ); } + + @Transactional + public void updateReservationStatus(Long reservationId, Long userId, ReservationStatusUpdateRequestDto request) { + Reservation reservation = getActiveReservation(reservationId, userId); + reservation.changeStatus(request.status()); + } } diff --git a/src/main/java/com/catchtable/review/service/ReviewService.java b/src/main/java/com/catchtable/review/service/ReviewService.java index 3010041..4040686 100644 --- a/src/main/java/com/catchtable/review/service/ReviewService.java +++ b/src/main/java/com/catchtable/review/service/ReviewService.java @@ -42,8 +42,8 @@ public Long createReview(Long userId, ReviewCreateRequestDto request) { // 예약자 검증 reservation.validateOwner(userId); - // 예약 상태 CONFIRMED 인지 - if (reservation.getStatus() != ReservationStatus.CONFIRMED) { + // 예약 상태 VISITED 인지 확인 + if (reservation.getStatus() != ReservationStatus.VISITED) { throw new CustomException(ErrorCode.REVIEW_NOT_ALLOWED); } From 4e3f3d23a2aa6acbd1c426c321c2e1aed368a455 Mon Sep 17 00:00:00 2001 From: silkair Date: Mon, 27 Apr 2026 13:35:55 +0900 Subject: [PATCH 02/30] =?UTF-8?q?api=20=EC=97=B0=EB=8F=99=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 --- data/data.sql | 67 --------------------------------------------------- 1 file changed, 67 deletions(-) delete mode 100644 data/data.sql diff --git a/data/data.sql b/data/data.sql deleted file mode 100644 index c37e8a8..0000000 --- a/data/data.sql +++ /dev/null @@ -1,67 +0,0 @@ - -SELECT setval('users_id_seq', (SELECT MAX(id) FROM users)); - --- store_id 1번 (시간대: 10:00 ~ 19:00 매 정각) -INSERT INTO store_remain (store_id, remain_date, remain_time, remain_team, version, created_at, updated_at, is_deleted) VALUES -(1, '2026-01-01', '10:00:00', 5, 0, NOW(), NOW(), false), -(1, '2026-01-01', '11:00:00', 5, 0, NOW(), NOW(), false), -(1, '2026-01-01', '12:00:00', 5, 0, NOW(), NOW(), false), -(1, '2026-01-01', '13:00:00', 5, 0, NOW(), NOW(), false), -(1, '2026-01-01', '14:00:00', 5, 0, NOW(), NOW(), false), -(1, '2026-01-01', '15:00:00', 5, 0, NOW(), NOW(), false), -(1, '2026-01-01', '16:00:00', 5, 0, NOW(), NOW(), false), -(1, '2026-01-01', '17:00:00', 5, 0, NOW(), NOW(), false), -(1, '2026-01-01', '18:00:00', 5, 0, NOW(), NOW(), false), -(1, '2026-01-01', '19:00:00', 5, 0, NOW(), NOW(), false); - --- store_id 2번 -INSERT INTO store_remain (store_id, remain_date, remain_time, remain_team, version, created_at, updated_at, is_deleted) VALUES -(2, '2026-01-01', '10:00:00', 5, 0, NOW(), NOW(), false), -(2, '2026-01-01', '11:00:00', 5, 0, NOW(), NOW(), false), -(2, '2026-01-01', '12:00:00', 5, 0, NOW(), NOW(), false), -(2, '2026-01-01', '13:00:00', 5, 0, NOW(), NOW(), false), -(2, '2026-01-01', '14:00:00', 5, 0, NOW(), NOW(), false), -(2, '2026-01-01', '15:00:00', 5, 0, NOW(), NOW(), false), -(2, '2026-01-01', '16:00:00', 5, 0, NOW(), NOW(), false), -(2, '2026-01-01', '17:00:00', 5, 0, NOW(), NOW(), false), -(2, '2026-01-01', '18:00:00', 5, 0, NOW(), NOW(), false), -(2, '2026-01-01', '19:00:00', 5, 0, NOW(), NOW(), false); - --- store_id 3번 -INSERT INTO store_remain (store_id, remain_date, remain_time, remain_team, version, created_at, updated_at, is_deleted) VALUES -(3, '2026-01-01', '10:00:00', 5, 0, NOW(), NOW(), false), -(3, '2026-01-01', '11:00:00', 5, 0, NOW(), NOW(), false), -(3, '2026-01-01', '12:00:00', 5, 0, NOW(), NOW(), false), -(3, '2026-01-01', '13:00:00', 5, 0, NOW(), NOW(), false), -(3, '2026-01-01', '14:00:00', 5, 0, NOW(), NOW(), false), -(3, '2026-01-01', '15:00:00', 5, 0, NOW(), NOW(), false), -(3, '2026-01-01', '16:00:00', 5, 0, NOW(), NOW(), false), -(3, '2026-01-01', '17:00:00', 5, 0, NOW(), NOW(), false), -(3, '2026-01-01', '18:00:00', 5, 0, NOW(), NOW(), false), -(3, '2026-01-01', '19:00:00', 5, 0, NOW(), NOW(), false); - --- store_id 4번 -INSERT INTO store_remain (store_id, remain_date, remain_time, remain_team, version, created_at, updated_at, is_deleted) VALUES -(4, '2026-01-01', '10:00:00', 5, 0, NOW(), NOW(), false), -(4, '2026-01-01', '11:00:00', 5, 0, NOW(), NOW(), false), -(4, '2026-01-01', '12:00:00', 5, 0, NOW(), NOW(), false), -(4, '2026-01-01', '13:00:00', 5, 0, NOW(), NOW(), false), -(4, '2026-01-01', '14:00:00', 5, 0, NOW(), NOW(), false), -(4, '2026-01-01', '15:00:00', 5, 0, NOW(), NOW(), false), -(4, '2026-01-01', '16:00:00', 5, 0, NOW(), NOW(), false), -(4, '2026-01-01', '17:00:00', 5, 0, NOW(), NOW(), false), -(4, '2026-01-01', '18:00:00', 5, 0, NOW(), NOW(), false), -(4, '2026-01-01', '19:00:00', 5, 0, NOW(), NOW(), false); - --- store_id 5번 -INSERT INTO store_remain (store_id, remain_date, remain_time, remain_team, version, created_at, updated_at, is_deleted) VALUES -(5, '2026-01-01', '10:00:00', 5, 0, NOW(), NOW(), false), -(5, '2026-01-01', '11:00:00', 5, 0, NOW(), NOW(), false), -(5, '2026-01-01', '12:00:00', 5, 0, NOW(), NOW(), false), -(5, '2026-01-01', '13:00:00', 5, 0, NOW(), NOW(), false), -(5, '2026-01-01', '14:00:00', 5, 0, NOW(), NOW(), false), -(5, '2026-01-01', '15:00:00', 5, 0, NOW(), NOW(), false), -(5, '2026-01-01', '16:00:00', 5, 0, NOW(), NOW(), false), -(5, '2026-01-01', '17:00:00', 5, 0, NOW(), NOW(), false), -(5, '2026-01-01', '18:00:00', 5, 0, NOW(), NOW(), false), -(5, '2026-01-01', '19:00:00', 5, 0, NOW(), NOW(), false); From 55cfd74ca0c2617e731c50233d4d831b82846262 Mon Sep 17 00:00:00 2001 From: silkair Date: Mon, 27 Apr 2026 14:34:18 +0900 Subject: [PATCH 03/30] =?UTF-8?q?hotfix=20:=20review=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=20reviewId=20=EC=9D=91=EB=8B=B5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/catchtable/review/dto/read/ReviewResponseDto.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/catchtable/review/dto/read/ReviewResponseDto.java b/src/main/java/com/catchtable/review/dto/read/ReviewResponseDto.java index 22f32d5..aafbb00 100644 --- a/src/main/java/com/catchtable/review/dto/read/ReviewResponseDto.java +++ b/src/main/java/com/catchtable/review/dto/read/ReviewResponseDto.java @@ -6,6 +6,7 @@ public record ReviewResponseDto( Long reviewId, + Long reservationId, Long storeId, String storeName, Long userId, @@ -18,6 +19,7 @@ public record ReviewResponseDto( public static ReviewResponseDto from(Review review) { return new ReviewResponseDto( review.getId(), + review.getReservation().getId(), review.getStore().getId(), review.getStore().getStoreName(), review.getUser().getId(), From fe7b31f005b504afb362cb20bad0dba19e139ff3 Mon Sep 17 00:00:00 2001 From: silkair Date: Mon, 27 Apr 2026 15:52:30 +0900 Subject: [PATCH 04/30] =?UTF-8?q?fix=20:=20=20=EB=82=B4=20=EB=B9=88?= =?UTF-8?q?=EC=9E=90=EB=A6=AC=20=EC=95=8C=EB=A6=BC=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EB=A7=A4=EC=9E=A5=20id=20=EC=B6=94=EA=B0=80=20(=EB=B9=88?= =?UTF-8?q?=EC=9E=90=EB=A6=AC=20=EC=95=8C=EB=A6=BC=20api=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99=20=EA=B3=BC=EC=A0=95=EC=97=90=EC=84=9C=20=EB=A7=A4?= =?UTF-8?q?=EC=9E=A5=20=EC=A1=B0=ED=9A=8C=20=EC=97=B0=EB=8F=99)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/catchtable/vacancy/dto/write/VacancyListResponse.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/catchtable/vacancy/dto/write/VacancyListResponse.java b/src/main/java/com/catchtable/vacancy/dto/write/VacancyListResponse.java index dc2bae0..2b986ad 100644 --- a/src/main/java/com/catchtable/vacancy/dto/write/VacancyListResponse.java +++ b/src/main/java/com/catchtable/vacancy/dto/write/VacancyListResponse.java @@ -14,6 +14,7 @@ public class VacancyListResponse { private final Long vacancyId; private final Long remainId; + private final Long storeId; private final String storeName; private final LocalDate remainDate; private final LocalTime remainTime; @@ -22,6 +23,7 @@ public class VacancyListResponse { public VacancyListResponse(Vacancy vacancy, StoreRemain storeRemain, Store store) { this.vacancyId = vacancy.getId(); this.remainId = vacancy.getRemainId(); + this.storeId = store.getId(); this.storeName = store.getStoreName(); this.remainDate = storeRemain.getRemainDate(); this.remainTime = storeRemain.getRemainTime(); From 7b985c9793df27cf6509b97650730fda8df8471c Mon Sep 17 00:00:00 2001 From: kimjb Date: Tue, 28 Apr 2026 20:22:33 +0900 Subject: [PATCH 05/30] =?UTF-8?q?Refactor:=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EB=93=B1=EB=A1=9D=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 --- .gitignore | 3 + .../file/controller/FileController.java | 39 ++++++++++ .../file/dto/FileUploadResponse.java | 13 ++++ .../catchtable/file/service/FileService.java | 71 ++++++++++++++++++ .../catchtable/global/common/SuccessCode.java | 5 +- .../catchtable/global/config/WebConfig.java | 15 ++++ .../global/exception/ErrorCode.java | 8 +- .../menu/controller/MenuController.java | 16 ++-- .../menu/dto/create/MenuCreateRequest.java | 5 +- .../menu/dto/update/MenuUpdateRequest.java | 5 +- .../catchtable/menu/service/MenuService.java | 20 ++--- .../resources/static/images/ready_image.png | Bin 0 -> 619141 bytes 12 files changed, 173 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/catchtable/file/controller/FileController.java create mode 100644 src/main/java/com/catchtable/file/dto/FileUploadResponse.java create mode 100644 src/main/java/com/catchtable/file/service/FileService.java create mode 100644 src/main/java/com/catchtable/global/config/WebConfig.java create mode 100644 src/main/resources/static/images/ready_image.png diff --git a/.gitignore b/.gitignore index fefe8a6..d254b50 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,6 @@ PRD.md ### Data ### *.csv + +### Uploads ### +uploads/ diff --git a/src/main/java/com/catchtable/file/controller/FileController.java b/src/main/java/com/catchtable/file/controller/FileController.java new file mode 100644 index 0000000..d3f8c1d --- /dev/null +++ b/src/main/java/com/catchtable/file/controller/FileController.java @@ -0,0 +1,39 @@ +package com.catchtable.file.controller; + +import com.catchtable.file.dto.FileUploadResponse; +import com.catchtable.file.service.FileService; +import com.catchtable.global.common.ApiResponse; +import com.catchtable.global.common.SuccessCode; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +@Tag(name = "파일 업로드", description = "이미지 등 파일 업로드 API") +@RestController +@RequestMapping("/api/v1/files") +@RequiredArgsConstructor +public class FileController { + + private final FileService fileService; + + @Operation(summary = "이미지 파일 업로드", description = "이미지 파일을 업로드하고 접근 가능한 URL을 반환합니다.") + @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity> upload( + @Parameter(description = "업로드할 이미지 파일 (jpg, png, webp / 최대 5MB)", required = true) + @RequestPart("file") MultipartFile file + ) { + FileUploadResponse response = fileService.upload(file); + return ResponseEntity + .status(HttpStatus.CREATED) + .body(ApiResponse.success(SuccessCode.FILE_UPLOADED, response)); + } +} diff --git a/src/main/java/com/catchtable/file/dto/FileUploadResponse.java b/src/main/java/com/catchtable/file/dto/FileUploadResponse.java new file mode 100644 index 0000000..34311ad --- /dev/null +++ b/src/main/java/com/catchtable/file/dto/FileUploadResponse.java @@ -0,0 +1,13 @@ +package com.catchtable.file.dto; + +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "파일 업로드 응답") +public record FileUploadResponse( + @Schema(description = "업로드된 파일에 접근 가능한 URL", example = "http://localhost:8080/uploads/abc-pasta.jpg") + String url +) { + public static FileUploadResponse of(String url) { + return new FileUploadResponse(url); + } +} diff --git a/src/main/java/com/catchtable/file/service/FileService.java b/src/main/java/com/catchtable/file/service/FileService.java new file mode 100644 index 0000000..d15dc6f --- /dev/null +++ b/src/main/java/com/catchtable/file/service/FileService.java @@ -0,0 +1,71 @@ +package com.catchtable.file.service; + +import com.catchtable.file.dto.FileUploadResponse; +import com.catchtable.global.exception.CustomException; +import com.catchtable.global.exception.ErrorCode; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Set; +import java.util.UUID; + +@Service +public class FileService { + + private static final String UPLOAD_DIR = "uploads"; + private static final String BASE_URL = "http://localhost:8080"; + private static final long MAX_FILE_SIZE = 5L * 1024 * 1024; // 5MB + private static final Set ALLOWED_EXTENSIONS = Set.of("jpg", "jpeg", "png", "webp"); + private static final Set ALLOWED_CONTENT_TYPES = Set.of( + "image/jpeg", "image/png", "image/webp" + ); + + public FileUploadResponse upload(MultipartFile file) { + validate(file); + + String extension = extractExtension(file.getOriginalFilename()); + String savedFilename = UUID.randomUUID() + "." + extension; + + try { + Path uploadPath = Paths.get(UPLOAD_DIR); + if (!Files.exists(uploadPath)) { + Files.createDirectories(uploadPath); + } + Path destination = uploadPath.resolve(savedFilename).toAbsolutePath(); + file.transferTo(destination); + } catch (IOException e) { + throw new CustomException(ErrorCode.FILE_UPLOAD_FAILED); + } + + String url = BASE_URL + "/" + UPLOAD_DIR + "/" + savedFilename; + return FileUploadResponse.of(url); + } + + private void validate(MultipartFile file) { + if (file == null || file.isEmpty()) { + throw new CustomException(ErrorCode.FILE_EMPTY); + } + if (file.getSize() > MAX_FILE_SIZE) { + throw new CustomException(ErrorCode.FILE_TOO_LARGE); + } + String contentType = file.getContentType(); + if (contentType == null || !ALLOWED_CONTENT_TYPES.contains(contentType.toLowerCase())) { + throw new CustomException(ErrorCode.FILE_INVALID_TYPE); + } + String extension = extractExtension(file.getOriginalFilename()).toLowerCase(); + if (!ALLOWED_EXTENSIONS.contains(extension)) { + throw new CustomException(ErrorCode.FILE_INVALID_TYPE); + } + } + + private String extractExtension(String filename) { + if (filename == null || !filename.contains(".")) { + return ""; + } + return filename.substring(filename.lastIndexOf('.') + 1); + } +} diff --git a/src/main/java/com/catchtable/global/common/SuccessCode.java b/src/main/java/com/catchtable/global/common/SuccessCode.java index 939600f..1650d84 100644 --- a/src/main/java/com/catchtable/global/common/SuccessCode.java +++ b/src/main/java/com/catchtable/global/common/SuccessCode.java @@ -58,7 +58,10 @@ public enum SuccessCode implements ResponseCode { // Vacancy VACANCY_REGISTER_SUCCESS(HttpStatus.CREATED, "빈자리 알림이 등록되었습니다."), VACANCY_LOOKUP_SUCCESS(HttpStatus.OK, "빈자리 알림 조회가 완료되었습니다."), - VACANCY_DELETE_SUCCESS(HttpStatus.OK, "빈자리 알림이 삭제되었습니다."); + VACANCY_DELETE_SUCCESS(HttpStatus.OK, "빈자리 알림이 삭제되었습니다."), + + // File + FILE_UPLOADED(HttpStatus.CREATED, "파일이 업로드되었습니다."); private final HttpStatus httpStatus; private final String message; diff --git a/src/main/java/com/catchtable/global/config/WebConfig.java b/src/main/java/com/catchtable/global/config/WebConfig.java new file mode 100644 index 0000000..eadd48b --- /dev/null +++ b/src/main/java/com/catchtable/global/config/WebConfig.java @@ -0,0 +1,15 @@ +package com.catchtable.global.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/uploads/**") + .addResourceLocations("file:./uploads/"); + } +} diff --git a/src/main/java/com/catchtable/global/exception/ErrorCode.java b/src/main/java/com/catchtable/global/exception/ErrorCode.java index be2d7a0..4e965e6 100644 --- a/src/main/java/com/catchtable/global/exception/ErrorCode.java +++ b/src/main/java/com/catchtable/global/exception/ErrorCode.java @@ -75,7 +75,13 @@ public enum ErrorCode implements ResponseCode { VACANCY_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 알림입니다."), VACANCY_ALREADY_REGISTERED(HttpStatus.CONFLICT, "이미 빈자리 알림을 등록했습니다."), VACANCY_ALREADY_DELETED(HttpStatus.CONFLICT, "이미 삭제된 알림입니다."), - VACANCY_REMAIN_NOT_EXHAUSTED(HttpStatus.BAD_REQUEST, "아직 예약 가능한 시간대입니다. 잔여 좌석이 0일 때만 빈자리 알림을 등록할 수 있습니다."); + VACANCY_REMAIN_NOT_EXHAUSTED(HttpStatus.BAD_REQUEST, "아직 예약 가능한 시간대입니다. 잔여 좌석이 0일 때만 빈자리 알림을 등록할 수 있습니다."), + + // File + FILE_EMPTY(HttpStatus.BAD_REQUEST, "업로드할 파일이 비어있습니다."), + FILE_INVALID_TYPE(HttpStatus.BAD_REQUEST, "허용되지 않는 파일 형식입니다. (jpg, png, webp만 가능)"), + FILE_TOO_LARGE(HttpStatus.BAD_REQUEST, "파일 크기는 5MB를 초과할 수 없습니다."), + FILE_UPLOAD_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "파일 업로드 중 오류가 발생했습니다."); private final HttpStatus httpStatus; private final String message; diff --git a/src/main/java/com/catchtable/menu/controller/MenuController.java b/src/main/java/com/catchtable/menu/controller/MenuController.java index d04b8b7..407d48f 100644 --- a/src/main/java/com/catchtable/menu/controller/MenuController.java +++ b/src/main/java/com/catchtable/menu/controller/MenuController.java @@ -14,10 +14,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -30,13 +28,12 @@ public class MenuController { private final MenuService menuService; @Operation(summary = "메뉴 일괄 생성", description = "특정 가게에 메뉴를 한 번에 여러 개 생성합니다.") - @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @PostMapping public ResponseEntity> create( @Parameter(description = "가게 ID", required = true) @PathVariable Long storeId, - @Parameter(description = "메뉴 정보 JSON") @RequestPart("request") MenuCreateRequest request, - @Parameter(description = "메뉴 이미지 파일 목록 (선택)") @RequestPart(value = "menuImages", required = false) List menuImages + @RequestBody MenuCreateRequest request ) { - MenuCreateResponse response = menuService.create(storeId, request, menuImages); + MenuCreateResponse response = menuService.create(storeId, request); return ResponseEntity .status(HttpStatus.CREATED) .body(ApiResponse.success(SuccessCode.MENU_CREATED, response)); @@ -53,14 +50,13 @@ public ResponseEntity>> getByStoreId( } @Operation(summary = "메뉴 수정", description = "특정 메뉴의 이름, 가격, 설명, 이미지를 수정합니다.") - @PatchMapping(value = "/{menuId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @PatchMapping("/{menuId}") public ResponseEntity> update( @Parameter(description = "가게 ID", required = true) @PathVariable Long storeId, @Parameter(description = "메뉴 ID", required = true) @PathVariable Long menuId, - @Parameter(description = "메뉴 수정 정보 JSON") @RequestPart("request") MenuUpdateRequest request, - @Parameter(description = "메뉴 이미지 파일 (선택)") @RequestPart(value = "menuImage", required = false) MultipartFile menuImage + @RequestBody MenuUpdateRequest request ) { - MenuUpdateResponse response = menuService.update(menuId, request, menuImage); + MenuUpdateResponse response = menuService.update(menuId, request); return ResponseEntity .ok(ApiResponse.success(SuccessCode.MENU_UPDATED, response)); } diff --git a/src/main/java/com/catchtable/menu/dto/create/MenuCreateRequest.java b/src/main/java/com/catchtable/menu/dto/create/MenuCreateRequest.java index a2b1b0c..8d71bec 100644 --- a/src/main/java/com/catchtable/menu/dto/create/MenuCreateRequest.java +++ b/src/main/java/com/catchtable/menu/dto/create/MenuCreateRequest.java @@ -17,6 +17,9 @@ public record MenuItemRequest( Integer price, @Schema(description = "메뉴 설명", example = "크림 파스타") - String description + String description, + + @Schema(description = "메뉴 이미지 URL (선택)", example = "http://localhost:8080/uploads/abc.jpg") + String menuImage ) {} } diff --git a/src/main/java/com/catchtable/menu/dto/update/MenuUpdateRequest.java b/src/main/java/com/catchtable/menu/dto/update/MenuUpdateRequest.java index 5385350..b672050 100644 --- a/src/main/java/com/catchtable/menu/dto/update/MenuUpdateRequest.java +++ b/src/main/java/com/catchtable/menu/dto/update/MenuUpdateRequest.java @@ -11,6 +11,9 @@ public record MenuUpdateRequest( Integer price, @Schema(description = "메뉴 설명", example = "크림 파스타") - String description + String description, + + @Schema(description = "메뉴 이미지 URL (선택)", example = "http://localhost:8080/uploads/abc.jpg") + String menuImage ) { } diff --git a/src/main/java/com/catchtable/menu/service/MenuService.java b/src/main/java/com/catchtable/menu/service/MenuService.java index 01c12bb..a5ee4f1 100644 --- a/src/main/java/com/catchtable/menu/service/MenuService.java +++ b/src/main/java/com/catchtable/menu/service/MenuService.java @@ -15,7 +15,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -29,18 +28,14 @@ public class MenuService { // 메뉴 일괄 생성 @Transactional - public MenuCreateResponse create(Long storeId, MenuCreateRequest request, List menuImages) { + public MenuCreateResponse create(Long storeId, MenuCreateRequest request) { Store store = storeRepository.findByIdAndIsDeletedFalse(storeId) .orElseThrow(() -> new CustomException(ErrorCode.STORE_NOT_FOUND)); - List menus = request.menus(); - List menuList = java.util.stream.IntStream.range(0, menus.size()) - .mapToObj(i -> { - MenuCreateRequest.MenuItemRequest item = menus.get(i); - String menuImage = (menuImages != null && i < menuImages.size()) - ? menuImages.get(i).getOriginalFilename() : null; - return Menu.create(store, item.menuName(), menuImage, item.price(), item.description()); - }) + List menuList = request.menus().stream() + .map(item -> Menu.create( + store, item.menuName(), item.menuImage(), item.price(), item.description() + )) .toList(); List menuIds = menuRepository.saveAll(menuList).stream() @@ -59,11 +54,10 @@ public List getByStoreId(Long storeId) { // 메뉴 수정 @Transactional - public MenuUpdateResponse update(Long menuId, MenuUpdateRequest request, MultipartFile menuImage) { + public MenuUpdateResponse update(Long menuId, MenuUpdateRequest request) { Menu menu = menuRepository.findByIdAndIsDeletedFalse(menuId) .orElseThrow(() -> new CustomException(ErrorCode.MENU_NOT_FOUND)); - String menuImageName = menuImage != null ? menuImage.getOriginalFilename() : menu.getMenuImage(); - menu.update(request.menuName(), request.description(), request.price(), menuImageName); + menu.update(request.menuName(), request.description(), request.price(), request.menuImage()); return new MenuUpdateResponse(menuId, "메뉴 수정 완료"); } diff --git a/src/main/resources/static/images/ready_image.png b/src/main/resources/static/images/ready_image.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbee400e7c7324bdb636f82b9e415539fd6b39d GIT binary patch literal 619141 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

>C8EqrjLY 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

0m(2DB|Jc((C%)L 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 z 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%0A&&H`_GmexEZZ|A(s*s2S-;!~ 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�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 literal 0 HcmV?d00001 From 2be136440ea3dcce9389c7f7366714f1aed42bb8 Mon Sep 17 00:00:00 2001 From: silkair Date: Tue, 28 Apr 2026 21:42:38 +0900 Subject: [PATCH 06/30] =?UTF-8?q?feat=20:=20=EB=B9=88=EC=9E=90=EB=A6=AC=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=20=EC=9D=B4=EB=B2=A4=C3=AC=C2=95:=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=EB=84=88=EB=A1=9C=20=EA=B5=AC=ED=98=84(?= =?UTF-8?q?=EB=8F=99=EA=B8=B0)=20=EB=B0=8F=20=EA=B4=80=EB=A0=A8=20vacancy?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/catchtable/CatchtableApplication.java | 2 + .../catchtable/notification/entity/.gitkeep | 0 .../notification/entity/Notification.java | 70 +++++++++++++++++++ .../notification/entity/NotificationType.java | 9 +++ .../notification/event/VacancyEvent.java | 11 +++ .../VacancyInAppNotificationListener.java | 64 +++++++++++++++++ .../notification/repository/.gitkeep | 0 .../repository/NotificationRepository.java | 7 ++ .../catchtable/notification/service/.gitkeep | 0 .../service/NotificationService.java | 28 ++++++++ ...a => VacancyNotificationEmailService.java} | 17 ++--- .../service/ReservationService.java | 15 +++- .../dto/write/VacancyListResponse.java | 2 +- .../catchtable/vacancy/entity/Vacancy.java | 18 +++-- .../vacancy/repository/VacancyRepository.java | 13 +++- .../vacancy/service/VacancyService.java | 24 ++++--- 16 files changed, 244 insertions(+), 36 deletions(-) delete mode 100644 src/main/java/com/catchtable/notification/entity/.gitkeep create mode 100644 src/main/java/com/catchtable/notification/entity/Notification.java create mode 100644 src/main/java/com/catchtable/notification/entity/NotificationType.java create mode 100644 src/main/java/com/catchtable/notification/event/VacancyEvent.java create mode 100644 src/main/java/com/catchtable/notification/listener/VacancyInAppNotificationListener.java delete mode 100644 src/main/java/com/catchtable/notification/repository/.gitkeep create mode 100644 src/main/java/com/catchtable/notification/repository/NotificationRepository.java delete mode 100644 src/main/java/com/catchtable/notification/service/.gitkeep create mode 100644 src/main/java/com/catchtable/notification/service/NotificationService.java rename src/main/java/com/catchtable/notification/service/{VacancyNotificationService.java => VacancyNotificationEmailService.java} (80%) diff --git a/src/main/java/com/catchtable/CatchtableApplication.java b/src/main/java/com/catchtable/CatchtableApplication.java index 1b608de..82e0966 100644 --- a/src/main/java/com/catchtable/CatchtableApplication.java +++ b/src/main/java/com/catchtable/CatchtableApplication.java @@ -2,7 +2,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +@EnableJpaAuditing @SpringBootApplication public class CatchtableApplication { diff --git a/src/main/java/com/catchtable/notification/entity/.gitkeep b/src/main/java/com/catchtable/notification/entity/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/com/catchtable/notification/entity/Notification.java b/src/main/java/com/catchtable/notification/entity/Notification.java new file mode 100644 index 0000000..1cae84d --- /dev/null +++ b/src/main/java/com/catchtable/notification/entity/Notification.java @@ -0,0 +1,70 @@ +package com.catchtable.notification.entity; + +import com.catchtable.user.entity.User; +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@Getter +@Entity +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@EntityListeners(AuditingEntityListener.class) +public class Notification { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id", nullable = false) + private User user; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private NotificationType type; + + @Column(nullable = false) + private String title; + + @Column(columnDefinition = "TEXT", nullable = false) + private String content; + + private Long relatedItemId; // 예약 상세나 상점 페이지 이동을 위한 ID (reservationId, storeId 등) + + @Column(nullable = false) + private boolean isRead = false; + + @Column(nullable = false) + private boolean isDeleted = false; + + @CreatedDate + @Column(updatable = false) + private LocalDateTime createdAt; + + @LastModifiedDate + private LocalDateTime updatedAt; + + @Builder + public Notification(User user, NotificationType type, String title, String content, Long relatedItemId) { + this.user = user; + this.type = type; + this.title = title; + this.content = content; + this.relatedItemId = relatedItemId; + } + + public void markAsRead() { + this.isRead = true; + } + + public void markAsDeleted() { + this.isDeleted = true; + } +} diff --git a/src/main/java/com/catchtable/notification/entity/NotificationType.java b/src/main/java/com/catchtable/notification/entity/NotificationType.java new file mode 100644 index 0000000..1ec48a2 --- /dev/null +++ b/src/main/java/com/catchtable/notification/entity/NotificationType.java @@ -0,0 +1,9 @@ +package com.catchtable.notification.entity; + +public enum NotificationType { + VACANCY, // 빈자리 알림 + RESERVATION_CONFIRMED, // 예약 확정 + RESERVATION_CANCELED, // 예약 취소 + RESERVATION_VISITED, // 방문 완료 + RESERVATION_REMINDER // 예약 리마인더 +} diff --git a/src/main/java/com/catchtable/notification/event/VacancyEvent.java b/src/main/java/com/catchtable/notification/event/VacancyEvent.java new file mode 100644 index 0000000..467b1ee --- /dev/null +++ b/src/main/java/com/catchtable/notification/event/VacancyEvent.java @@ -0,0 +1,11 @@ +package com.catchtable.notification.event; + +import com.catchtable.remain.entity.StoreRemain; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class VacancyEvent { + private final StoreRemain storeRemain; +} diff --git a/src/main/java/com/catchtable/notification/listener/VacancyInAppNotificationListener.java b/src/main/java/com/catchtable/notification/listener/VacancyInAppNotificationListener.java new file mode 100644 index 0000000..fa896f7 --- /dev/null +++ b/src/main/java/com/catchtable/notification/listener/VacancyInAppNotificationListener.java @@ -0,0 +1,64 @@ +package com.catchtable.notification.listener; + +import com.catchtable.notification.entity.NotificationType; +import com.catchtable.notification.event.VacancyEvent; +import com.catchtable.notification.service.NotificationService; +import com.catchtable.remain.entity.StoreRemain; +import com.catchtable.user.entity.User; +import com.catchtable.vacancy.entity.Vacancy; +import com.catchtable.vacancy.entity.VacancyStatus; +import com.catchtable.vacancy.repository.VacancyRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class VacancyInAppNotificationListener { + + private final VacancyRepository vacancyRepository; + private final NotificationService notificationService; + + // 메인 트랜잭션이 커밋된 직후에 비동기적으로 실행됨 + @Async + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + public void handleVacancyEvent(VacancyEvent event) { + StoreRemain storeRemain = event.getStoreRemain(); + Long remainId = storeRemain.getId(); + + log.info("[알림] 빈자리 발생 이벤트 수신: remainId = {}", remainId); + + if (storeRemain.getRemainTeam() <= 0) { + return; + } + + List subscribers = vacancyRepository.findWithUserByStoreRemain_IdAndStatusAndIsDeletedFalse( + remainId, VacancyStatus.ACTIVE); + + if (subscribers.isEmpty()) { + return; + } + + String storeName = storeRemain.getStore().getStoreName(); + String remainDate = storeRemain.getRemainDate().toString(); + String remainTime = storeRemain.getRemainTime().toString(); + + for (Vacancy vacancy : subscribers) { + User user = vacancy.getUser(); + if (user == null) continue; + + String title = "빈자리 알림"; + String content = String.format("%s %s %s에 빈자리가 발생했습니다! 지금 바로 예약하세요.", + storeName, remainDate, remainTime); + + // 알림 생성 + notificationService.createNotification(user, NotificationType.VACANCY, title, content, storeRemain.getStore().getId()); + } + } +} diff --git a/src/main/java/com/catchtable/notification/repository/.gitkeep b/src/main/java/com/catchtable/notification/repository/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/com/catchtable/notification/repository/NotificationRepository.java b/src/main/java/com/catchtable/notification/repository/NotificationRepository.java new file mode 100644 index 0000000..88bf26a --- /dev/null +++ b/src/main/java/com/catchtable/notification/repository/NotificationRepository.java @@ -0,0 +1,7 @@ +package com.catchtable.notification.repository; + +import com.catchtable.notification.entity.Notification; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface NotificationRepository extends JpaRepository { +} diff --git a/src/main/java/com/catchtable/notification/service/.gitkeep b/src/main/java/com/catchtable/notification/service/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/com/catchtable/notification/service/NotificationService.java b/src/main/java/com/catchtable/notification/service/NotificationService.java new file mode 100644 index 0000000..eea87fa --- /dev/null +++ b/src/main/java/com/catchtable/notification/service/NotificationService.java @@ -0,0 +1,28 @@ +package com.catchtable.notification.service; + +import com.catchtable.notification.entity.Notification; +import com.catchtable.notification.entity.NotificationType; +import com.catchtable.notification.repository.NotificationRepository; +import com.catchtable.user.entity.User; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class NotificationService { + + private final NotificationRepository notificationRepository; + + @Transactional + public void createNotification(User user, NotificationType type, String title, String content, Long relatedItemId) { + Notification notification = Notification.builder() + .user(user) + .type(type) + .title(title) + .content(content) + .relatedItemId(relatedItemId) + .build(); + notificationRepository.save(notification); + } +} diff --git a/src/main/java/com/catchtable/notification/service/VacancyNotificationService.java b/src/main/java/com/catchtable/notification/service/VacancyNotificationEmailService.java similarity index 80% rename from src/main/java/com/catchtable/notification/service/VacancyNotificationService.java rename to src/main/java/com/catchtable/notification/service/VacancyNotificationEmailService.java index dcf9e74..f747a2c 100644 --- a/src/main/java/com/catchtable/notification/service/VacancyNotificationService.java +++ b/src/main/java/com/catchtable/notification/service/VacancyNotificationEmailService.java @@ -5,7 +5,6 @@ import com.catchtable.global.exception.CustomException; import com.catchtable.global.exception.ErrorCode; import com.catchtable.user.entity.User; -import com.catchtable.user.repository.UserRepository; import com.catchtable.vacancy.entity.Vacancy; import com.catchtable.vacancy.entity.VacancyStatus; import com.catchtable.vacancy.repository.VacancyRepository; @@ -18,16 +17,14 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; @Slf4j @Service @RequiredArgsConstructor -public class VacancyNotificationService { +public class VacancyNotificationEmailService { private final VacancyRepository vacancyRepository; private final StoreRemainRepository storeRemainRepository; - private final UserRepository userRepository; private final EmailService emailService; private final Map lastNotifiedMap = new ConcurrentHashMap<>(); @@ -50,7 +47,8 @@ public void notifySubscribers(Long remainId) { return; } - List subscribers = vacancyRepository.findByRemainIdAndStatusAndIsDeletedFalse( + // Vacancy 엔티티 구조가 객체 참조로 변경되었으므로, N+1을 방지하는 메서드 사용 + List subscribers = vacancyRepository.findWithUserByStoreRemain_IdAndStatusAndIsDeletedFalse( remainId, VacancyStatus.ACTIVE); if (subscribers.isEmpty()) { @@ -61,12 +59,9 @@ public void notifySubscribers(Long remainId) { String remainDate = storeRemain.getRemainDate().toString(); String remainTime = storeRemain.getRemainTime().toString(); - List userIds = subscribers.stream().map(Vacancy::getUserId).toList(); - Map userMap = userRepository.findAllById(userIds).stream() - .collect(Collectors.toMap(User::getId, user -> user)); - for (Vacancy vacancy : subscribers) { - User user = userMap.get(vacancy.getUserId()); + // @EntityGraph가 적용된 Repository 메서드를 통해 가져오므로, N+1 없이 User 정보 접근 가능 + User user = vacancy.getUser(); if (user == null) continue; emailService.send(user.getEmail(), @@ -78,6 +73,6 @@ public void notifySubscribers(Long remainId) { } lastNotifiedMap.put(remainId, now); - log.info("[빈자리 알림] remainId: {}, {}명에게 알림 발송", remainId, subscribers.size()); + log.info("[빈자리 알림] remainId: {}, {}명에게 이메일 알림 발송", remainId, subscribers.size()); } } diff --git a/src/main/java/com/catchtable/reservation/service/ReservationService.java b/src/main/java/com/catchtable/reservation/service/ReservationService.java index 07931da..5769a3a 100644 --- a/src/main/java/com/catchtable/reservation/service/ReservationService.java +++ b/src/main/java/com/catchtable/reservation/service/ReservationService.java @@ -4,7 +4,8 @@ import com.catchtable.coupon.service.CouponService; import com.catchtable.global.exception.CustomException; import com.catchtable.global.exception.ErrorCode; -import com.catchtable.notification.service.VacancyNotificationService; +import com.catchtable.notification.event.VacancyEvent; +import com.catchtable.notification.service.VacancyNotificationEmailService; import com.catchtable.remain.entity.StoreRemain; import com.catchtable.remain.repository.StoreRemainRepository; import com.catchtable.reservation.dto.create.ReservationCreateRequestDto; @@ -21,6 +22,7 @@ import com.catchtable.user.entity.User; import com.catchtable.user.repository.UserRepository; import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -34,7 +36,8 @@ public class ReservationService { private final UserRepository userRepository; private final StoreRemainRepository storeRemainRepository; private final CouponService couponService; - private final VacancyNotificationService vacancyNotificationService; + private final VacancyNotificationEmailService vacancyNotificationService; + private final ApplicationEventPublisher eventPublisher; @Transactional public ReservationCreateResponseDto create(ReservationCreateRequestDto request) { @@ -143,9 +146,12 @@ public void cancelReservation(Long reservationId, Long userId) { StoreRemain storeRemain = reservation.getStoreRemain(); storeRemain.increaseRemainTeam(); - // 빈자리 알림 구독자에게 알림 발송 + // 빈자리 알림 이메일 발송 (추후 삭제 고려하여 그대로 둠) vacancyNotificationService.notifySubscribers(storeRemain.getId()); + // 빈자리 발생 이벤트 발행 (새로 추가한 인앱 알림 로직 트리거) + eventPublisher.publishEvent(new VacancyEvent(storeRemain)); + // 쿠폰 반환 if (reservation.getCoupon() != null) { couponService.returnCoupon(reservation.getCoupon().getId()); @@ -163,6 +169,9 @@ public ReservationUpdateResponseDto updateReservation(Long reservationId, Long u oldReservation.changeStatus(ReservationStatus.CANCELED); oldReservation.getStoreRemain().increaseRemainTeam(); + // 예약 변경으로 기존 자리가 났으므로 알림 이벤트 발행 + eventPublisher.publishEvent(new VacancyEvent(oldReservation.getStoreRemain())); + // 기존 쿠폰 반환 if (oldReservation.getCoupon() != null) { couponService.returnCoupon(oldReservation.getCoupon().getId()); diff --git a/src/main/java/com/catchtable/vacancy/dto/write/VacancyListResponse.java b/src/main/java/com/catchtable/vacancy/dto/write/VacancyListResponse.java index 2b986ad..7140e19 100644 --- a/src/main/java/com/catchtable/vacancy/dto/write/VacancyListResponse.java +++ b/src/main/java/com/catchtable/vacancy/dto/write/VacancyListResponse.java @@ -22,7 +22,7 @@ public class VacancyListResponse { public VacancyListResponse(Vacancy vacancy, StoreRemain storeRemain, Store store) { this.vacancyId = vacancy.getId(); - this.remainId = vacancy.getRemainId(); + this.remainId = storeRemain.getId(); this.storeId = store.getId(); this.storeName = store.getStoreName(); this.remainDate = storeRemain.getRemainDate(); diff --git a/src/main/java/com/catchtable/vacancy/entity/Vacancy.java b/src/main/java/com/catchtable/vacancy/entity/Vacancy.java index a993364..f579c96 100644 --- a/src/main/java/com/catchtable/vacancy/entity/Vacancy.java +++ b/src/main/java/com/catchtable/vacancy/entity/Vacancy.java @@ -1,5 +1,7 @@ package com.catchtable.vacancy.entity; +import com.catchtable.remain.entity.StoreRemain; +import com.catchtable.user.entity.User; import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; @@ -19,11 +21,13 @@ public class Vacancy { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(name = "user_id", nullable = false) - private Long userId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id", nullable = false) + private User user; - @Column(name = "remain_id", nullable = false) - private Long remainId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "remain_id", nullable = false) + private StoreRemain storeRemain; @Enumerated(EnumType.STRING) @Column(nullable = false) @@ -40,9 +44,9 @@ public class Vacancy { @Column(name = "is_deleted", nullable = false) private Boolean isDeleted = false; - public Vacancy(Long userId, Long remainId) { - this.userId = userId; - this.remainId = remainId; + public Vacancy(User user, StoreRemain storeRemain) { + this.user = user; + this.storeRemain = storeRemain; this.status = VacancyStatus.ACTIVE; this.isDeleted = false; } diff --git a/src/main/java/com/catchtable/vacancy/repository/VacancyRepository.java b/src/main/java/com/catchtable/vacancy/repository/VacancyRepository.java index f5a7a10..5999cd7 100644 --- a/src/main/java/com/catchtable/vacancy/repository/VacancyRepository.java +++ b/src/main/java/com/catchtable/vacancy/repository/VacancyRepository.java @@ -2,15 +2,22 @@ import com.catchtable.vacancy.entity.Vacancy; import com.catchtable.vacancy.entity.VacancyStatus; +import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface VacancyRepository extends JpaRepository { - boolean existsByUserIdAndRemainIdAndIsDeletedFalse(Long userId, Long remainId); + boolean existsByUser_IdAndStoreRemain_IdAndIsDeletedFalse(Long userId, Long remainId); - List findByUserIdAndIsDeletedFalse(Long userId); + // 내 빈자리 알림 목록 조회 (N+1 방지를 위해 StoreRemain, Store 함께 조회) + @EntityGraph(attributePaths = {"storeRemain", "storeRemain.store"}) + List findByUser_IdAndIsDeletedFalse(Long userId); - List findByRemainIdAndStatusAndIsDeletedFalse(Long remainId, VacancyStatus status); + List findByStoreRemain_IdAndStatusAndIsDeletedFalse(Long remainId, VacancyStatus status); + + // 알림 발송 시 구독자 조회 (N+1 방지를 위해 User 함께 조회) + @EntityGraph(attributePaths = {"user"}) + List findWithUserByStoreRemain_IdAndStatusAndIsDeletedFalse(Long remainId, VacancyStatus status); } diff --git a/src/main/java/com/catchtable/vacancy/service/VacancyService.java b/src/main/java/com/catchtable/vacancy/service/VacancyService.java index 1a6c9dd..6dd7b56 100644 --- a/src/main/java/com/catchtable/vacancy/service/VacancyService.java +++ b/src/main/java/com/catchtable/vacancy/service/VacancyService.java @@ -5,7 +5,8 @@ import com.catchtable.store.entity.Store; import com.catchtable.remain.entity.StoreRemain; import com.catchtable.remain.repository.StoreRemainRepository; -import com.catchtable.store.repository.StoreRepository; +import com.catchtable.user.entity.User; +import com.catchtable.user.repository.UserRepository; import com.catchtable.vacancy.dto.write.VacancyListResponse; import com.catchtable.vacancy.entity.Vacancy; import com.catchtable.vacancy.repository.VacancyRepository; @@ -21,10 +22,13 @@ public class VacancyService { private final VacancyRepository vacancyRepository; private final StoreRemainRepository storeRemainRepository; - private final StoreRepository storeRepository; + private final UserRepository userRepository; @Transactional public Long register(Long userId, Long remainId) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND)); + StoreRemain storeRemain = storeRemainRepository.findById(remainId) .orElseThrow(() -> new CustomException(ErrorCode.REMAIN_NOT_FOUND)); @@ -32,24 +36,22 @@ public Long register(Long userId, Long remainId) { throw new CustomException(ErrorCode.VACANCY_REMAIN_NOT_EXHAUSTED); } - if (vacancyRepository.existsByUserIdAndRemainIdAndIsDeletedFalse(userId, remainId)) { + if (vacancyRepository.existsByUser_IdAndStoreRemain_IdAndIsDeletedFalse(userId, remainId)) { throw new CustomException(ErrorCode.VACANCY_ALREADY_REGISTERED); } - Vacancy vacancy = new Vacancy(userId, remainId); + + Vacancy vacancy = new Vacancy(user, storeRemain); return vacancyRepository.save(vacancy).getId(); } @Transactional(readOnly = true) public List getMyList(Long userId) { - // TODO: N+1 문제, vacancy N개 조회 시 storeRemain N번 + store N번 추가 쿼리 발생. - // 나중에 인증 연동 시 @Query로 JOIN 처리 필요함. - return vacancyRepository.findByUserIdAndIsDeletedFalse(userId) + // N+1 문제 해결: EntityGraph를 통해 StoreRemain과 Store를 함께 조회 (1번의 쿼리로 처리됨) + return vacancyRepository.findByUser_IdAndIsDeletedFalse(userId) .stream() .map(vacancy -> { - StoreRemain storeRemain = storeRemainRepository.findById(vacancy.getRemainId()) - .orElseThrow(() -> new CustomException(ErrorCode.REMAIN_NOT_FOUND)); - Store store = storeRepository.findById(storeRemain.getStore().getId()) - .orElseThrow(() -> new CustomException(ErrorCode.STORE_NOT_FOUND)); + StoreRemain storeRemain = vacancy.getStoreRemain(); + Store store = storeRemain.getStore(); return new VacancyListResponse(vacancy, storeRemain, store); }) .toList(); From 3279e381c357872c12f96cb148efafba804967d4 Mon Sep 17 00:00:00 2001 From: kimjb Date: Wed, 29 Apr 2026 01:32:13 +0900 Subject: [PATCH 07/30] =?UTF-8?q?Refactor:=20=EB=A7=A4=EC=9E=A5=20?= =?UTF-8?q?=ED=8F=89=EC=A0=90=20=EA=B3=84=EC=82=B0=20=EB=B0=8F=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/init-data.sql | 1 + .../review/repository/ReviewRepository.java | 4 ++ .../review/service/ReviewService.java | 14 ++++- .../store/controller/StoreController.java | 30 ++++++--- .../store/dto/read/StoreDetailResponse.java | 2 + .../store/dto/read/StoreListResponse.java | 8 ++- .../com/catchtable/store/entity/Store.java | 8 +++ .../store/repository/StoreRepository.java | 6 +- .../store/service/StoreService.java | 63 ++++++++++++++++--- 9 files changed, 112 insertions(+), 24 deletions(-) diff --git a/data/init-data.sql b/data/init-data.sql index 0c674ca..b76f915 100644 --- a/data/init-data.sql +++ b/data/init-data.sql @@ -47,6 +47,7 @@ CREATE TABLE IF NOT EXISTS stores ( status VARCHAR(255) NOT NULL, review_count INTEGER NOT NULL, bookmark_count INTEGER NOT NULL, + average_star DOUBLE PRECISION NOT NULL DEFAULT 0, created_at TIMESTAMP NOT NULL, updated_at TIMESTAMP, is_deleted BOOLEAN NOT NULL diff --git a/src/main/java/com/catchtable/review/repository/ReviewRepository.java b/src/main/java/com/catchtable/review/repository/ReviewRepository.java index bc26697..b8c1877 100644 --- a/src/main/java/com/catchtable/review/repository/ReviewRepository.java +++ b/src/main/java/com/catchtable/review/repository/ReviewRepository.java @@ -19,4 +19,8 @@ public interface ReviewRepository extends JpaRepository { // 해당 예약을 통해 이미 리뷰를 작성했는지 확인 (중복 리뷰 방지) boolean existsByReservationIdAndIsDeletedFalse(Long reservationId); + + // 단일 매장의 평균 평점 조회 (리뷰 변경 시 매장 캐시 갱신용) + @Query("SELECT AVG(r.star) FROM Review r WHERE r.store.id = :storeId AND r.isDeleted = false") + Double findAverageStarByStoreId(@Param("storeId") Long storeId); } diff --git a/src/main/java/com/catchtable/review/service/ReviewService.java b/src/main/java/com/catchtable/review/service/ReviewService.java index 4040686..e6b3ee8 100644 --- a/src/main/java/com/catchtable/review/service/ReviewService.java +++ b/src/main/java/com/catchtable/review/service/ReviewService.java @@ -66,8 +66,9 @@ public Long createReview(Long userId, ReviewCreateRequestDto request) { reviewRepository.save(review); - // 리뷰 카운트 증가 + // 리뷰 카운트 증가 + 평균 평점 갱신 storeService.increaseReviewCount(store.getId()); + storeService.recalculateAverageStar(store.getId()); return review.getId(); } @@ -108,6 +109,11 @@ public Long updateReview(Long userId, Long reviewId, ReviewUpdateRequestDto requ } review.updateReview(request.star(), request.content(), request.reviewImage()); + + // 별점이 변경된 경우 매장 평균 평점 갱신 + if (request.star() != null) { + storeService.recalculateAverageStar(review.getStore().getId()); + } return review.getId(); } @@ -124,7 +130,9 @@ public void deleteReview(Long userId, Long reviewId) { review.delete(); - // 리뷰 카운트 감소 - storeService.decreaseReviewCount(review.getStore().getId()); + // 리뷰 카운트 감소 + 평균 평점 갱신 + Long storeId = review.getStore().getId(); + storeService.decreaseReviewCount(storeId); + storeService.recalculateAverageStar(storeId); } } diff --git a/src/main/java/com/catchtable/store/controller/StoreController.java b/src/main/java/com/catchtable/store/controller/StoreController.java index 817b3ef..644ecc4 100644 --- a/src/main/java/com/catchtable/store/controller/StoreController.java +++ b/src/main/java/com/catchtable/store/controller/StoreController.java @@ -10,6 +10,7 @@ import com.catchtable.store.dto.status.StoreStatusUpdateResponse; import com.catchtable.store.dto.update.StoreUpdateRequest; import com.catchtable.store.dto.update.StoreUpdateResponse; +import com.catchtable.store.entity.Category; import com.catchtable.store.entity.District; import com.catchtable.store.service.StoreService; @@ -38,17 +39,32 @@ public ResponseEntity> createStore( } @GetMapping - public ResponseEntity>> searchStores( - @RequestParam String name) { - List stores = storeService.searchStores(name); + public ResponseEntity>> getStores( + @RequestParam(required = false) String name, + @RequestParam(required = false) Category category, + @RequestParam(required = false) District district, + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "10") int size) { + List stores = storeService.getStores(name, category, district, page, size); return ResponseEntity .ok(ApiResponse.success(SuccessCode.STORE_LIST_OK, stores)); } - @GetMapping("/district") - public ResponseEntity>> getStoresByDistrict( - @RequestParam District district) { - List stores = storeService.getStoresByDistrict(district); + @GetMapping("/popular") + public ResponseEntity>> getPopularStores( + @RequestParam(defaultValue = "10") int limit) { + List stores = storeService.getPopularStores(limit); + return ResponseEntity + .ok(ApiResponse.success(SuccessCode.STORE_LIST_OK, stores)); + } + + @GetMapping("/nearby") + public ResponseEntity>> getNearbyStores( + @RequestParam Double latitude, + @RequestParam Double longitude, + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "10") int size) { + List stores = storeService.getNearbyStores(latitude, longitude, page, size); return ResponseEntity .ok(ApiResponse.success(SuccessCode.STORE_LIST_OK, stores)); } diff --git a/src/main/java/com/catchtable/store/dto/read/StoreDetailResponse.java b/src/main/java/com/catchtable/store/dto/read/StoreDetailResponse.java index b9c6422..acf0c60 100644 --- a/src/main/java/com/catchtable/store/dto/read/StoreDetailResponse.java +++ b/src/main/java/com/catchtable/store/dto/read/StoreDetailResponse.java @@ -18,6 +18,7 @@ public record StoreDetailResponse( String openTime, String closeTime, String status, + Double averageStar, Integer reviewCount, Integer bookmarkCount, List remainDates @@ -36,6 +37,7 @@ public static StoreDetailResponse from(Store store, List rem store.getOpenTime(), store.getCloseTime(), store.getStatus().name(), + store.getAverageStar(), store.getReviewCount(), store.getBookmarkCount(), remainDates diff --git a/src/main/java/com/catchtable/store/dto/read/StoreListResponse.java b/src/main/java/com/catchtable/store/dto/read/StoreListResponse.java index 36078df..c114fcb 100644 --- a/src/main/java/com/catchtable/store/dto/read/StoreListResponse.java +++ b/src/main/java/com/catchtable/store/dto/read/StoreListResponse.java @@ -10,7 +10,9 @@ public record StoreListResponse( String address, String district, Double latitude, - Double longitude + Double longitude, + Double averageStar, + Integer reviewCount ) { public static StoreListResponse from(Store store) { return new StoreListResponse( @@ -21,7 +23,9 @@ public static StoreListResponse from(Store store) { store.getAddress(), store.getDistrict().name(), store.getLatitude(), - store.getLongitude() + store.getLongitude(), + store.getAverageStar(), + store.getReviewCount() ); } } diff --git a/src/main/java/com/catchtable/store/entity/Store.java b/src/main/java/com/catchtable/store/entity/Store.java index 3f9b605..a017a9e 100644 --- a/src/main/java/com/catchtable/store/entity/Store.java +++ b/src/main/java/com/catchtable/store/entity/Store.java @@ -62,6 +62,10 @@ public class Store { @Builder.Default private Integer reviewCount = 0; + @Column(name = "average_star", nullable = false) + @Builder.Default + private Double averageStar = 0.0; + @Column(name = "bookmark_count", nullable = false) @Builder.Default private Integer bookmarkCount = 0; @@ -93,6 +97,10 @@ public void update(String storeName, String storeImage, Category category, this.closeTime = closeTime; } + public void updateAverageStar(Double newAverageStar) { + this.averageStar = newAverageStar != null ? newAverageStar : 0.0; + } + public void changeStatus(StoreStatus newStatus) { if (this.status == StoreStatus.INACTIVE) { throw new CustomException(ErrorCode.INACTIVE_STORE); diff --git a/src/main/java/com/catchtable/store/repository/StoreRepository.java b/src/main/java/com/catchtable/store/repository/StoreRepository.java index 3549011..0beac56 100644 --- a/src/main/java/com/catchtable/store/repository/StoreRepository.java +++ b/src/main/java/com/catchtable/store/repository/StoreRepository.java @@ -1,5 +1,6 @@ package com.catchtable.store.repository; +import com.catchtable.store.entity.Category; import com.catchtable.store.entity.District; import com.catchtable.store.entity.Store; import org.springframework.data.jpa.repository.JpaRepository; @@ -14,10 +15,7 @@ public interface StoreRepository extends JpaRepository { Optional findByIdAndIsDeletedFalse(Long id); - @Query("SELECT s FROM Store s WHERE s.storeName LIKE %:name% AND s.isDeleted = false") - List searchByStoreName(@Param("name") String name); - - List findAllByDistrictAndIsDeletedFalse(District district); + List findAllByIsDeletedFalse(); @Modifying @Query("UPDATE Store s SET s.reviewCount = s.reviewCount + 1 WHERE s.id = :storeId") diff --git a/src/main/java/com/catchtable/store/service/StoreService.java b/src/main/java/com/catchtable/store/service/StoreService.java index 1607762..14c31e0 100644 --- a/src/main/java/com/catchtable/store/service/StoreService.java +++ b/src/main/java/com/catchtable/store/service/StoreService.java @@ -10,6 +10,8 @@ import com.catchtable.store.dto.update.StoreUpdateResponse; import com.catchtable.remain.dto.read.RemainDateResponse; import com.catchtable.remain.repository.StoreRemainRepository; +import com.catchtable.review.repository.ReviewRepository; +import com.catchtable.store.entity.Category; import com.catchtable.store.entity.District; import com.catchtable.store.entity.Store; import com.catchtable.store.repository.StoreRepository; @@ -21,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; +import java.util.Comparator; import java.util.List; @Service @@ -30,6 +33,7 @@ public class StoreService { private final StoreRepository storeRepository; private final UserRepository userRepository; private final StoreRemainRepository storeRemainRepository; + private final ReviewRepository reviewRepository; // 매장 등록 @Transactional @@ -40,20 +44,52 @@ public StoreCreateResponse createStore(Long userId, StoreCreateRequest request) return StoreCreateResponse.from(saved.getId()); } - // 매장명 검색 + // 매장 목록 통합 조회 (이름·카테고리·지역 옵셔널 필터 + 페이지네이션) @Transactional(readOnly = true) - public List searchStores(String name) { - List stores = storeRepository.searchByStoreName(name); - return stores.stream() + public List getStores(String name, Category category, District district, int page, int size) { + String trimmedName = (name == null || name.isBlank()) ? null : name.trim(); + return storeRepository.findAllByIsDeletedFalse().stream() + .filter(s -> trimmedName == null || s.getStoreName().contains(trimmedName)) + .filter(s -> category == null || s.getCategory() == category) + .filter(s -> district == null || s.getDistrict() == district) + .sorted(popularityComparator()) + .skip((long) page * size) + .limit(size) .map(StoreListResponse::from) .toList(); } - // 지역별 매장 조회 + // 인기 매장 (평균 평점 → 리뷰 수 → 북마크 수 순) @Transactional(readOnly = true) - public List getStoresByDistrict(District district) { - List stores = storeRepository.findAllByDistrictAndIsDeletedFalse(district); - return stores.stream() + public List getPopularStores(int limit) { + return storeRepository.findAllByIsDeletedFalse().stream() + .sorted(popularityComparator()) + .limit(limit) + .map(StoreListResponse::from) + .toList(); + } + + /** + * 매장 인기도 정렬 기준 + * 1. 평점 내림차순 → 2. 리뷰 수 내림차순 → 3. 북마크 수 내림차순 + */ + private Comparator popularityComparator() { + return Comparator + .comparingDouble((Store s) -> s.getAverageStar() != null ? s.getAverageStar() : 0.0) + .thenComparingInt(Store::getReviewCount) + .thenComparingInt(Store::getBookmarkCount) + .reversed(); + } + + // 내 주변 매장 (좌표 거리 정렬 + 페이지네이션) + @Transactional(readOnly = true) + public List getNearbyStores(double latitude, double longitude, int page, int size) { + return storeRepository.findAllByIsDeletedFalse().stream() + .sorted(Comparator.comparingDouble(s -> + Math.pow(s.getLatitude() - latitude, 2) + Math.pow(s.getLongitude() - longitude, 2) + )) + .skip((long) page * size) + .limit(size) .map(StoreListResponse::from) .toList(); } @@ -109,4 +145,15 @@ public void increaseReviewCount(Long storeId) { public void decreaseReviewCount(Long storeId) { storeRepository.decreaseReviewCount(storeId); } + + /** + * 매장 평균 평점 재계산 (리뷰 등록·수정·삭제 시 호출) + */ + @Transactional + public void recalculateAverageStar(Long storeId) { + Store store = storeRepository.findByIdAndIsDeletedFalse(storeId) + .orElseThrow(() -> new CustomException(ErrorCode.STORE_NOT_FOUND)); + Double newAverage = reviewRepository.findAverageStarByStoreId(storeId); + store.updateAverageStar(newAverage); + } } From 88af3801d885de7d1579c29c36b2b7164d9ae436 Mon Sep 17 00:00:00 2001 From: kimjb Date: Wed, 29 Apr 2026 02:16:30 +0900 Subject: [PATCH 08/30] =?UTF-8?q?Refactor:=20=EC=98=88=EC=95=BD=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EB=A7=A4=EC=9E=A5=20=EC=B9=B4=ED=85=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/gangnam-menu-seed.sql | 296 ++++++++++++++++++ .../read/ReservationDetailResponseDto.java | 1 + .../dto/read/ReservationListResponseDto.java | 2 + .../service/ReservationService.java | 3 + 4 files changed, 302 insertions(+) create mode 100644 data/gangnam-menu-seed.sql diff --git a/data/gangnam-menu-seed.sql b/data/gangnam-menu-seed.sql new file mode 100644 index 0000000..0aea542 --- /dev/null +++ b/data/gangnam-menu-seed.sql @@ -0,0 +1,296 @@ +-- 강남구 매장에 카테고리별 메뉴 5~7개 랜덤 추가 +-- 매장마다 메뉴 조합·개수가 다르게 들어감 (매장 ID 기반 해시 정렬) +-- random() 대신 md5(s.id || menu_name)을 쓰는 이유: +-- PostgreSQL 옵티마이저가 LATERAL 안의 random()을 한 번만 평가해서 +-- 같은 카테고리 매장이 같은 메뉴를 받는 문제를 우회 +-- 실행 예시: +-- docker exec -i catchtable-db psql -U teamE -d catchtable < backend/data/gangnam-menu-seed.sql +-- 또는 IntelliJ DB 도구에서 직접 실행 + +-- KOREAN (한식) +INSERT INTO menu (store_id, menu_name, description, price, is_deleted, created_at) +SELECT s.id, m.menu_name, m.description, m.price, false, NOW() +FROM stores s +CROSS JOIN LATERAL ( + SELECT menu_name, description, price + FROM (VALUES + ('김치찌개', '얼큰하고 진한 김치찌개', 9000), + ('된장찌개', '구수한 된장찌개 한 그릇', 8000), + ('비빔밥', '신선한 나물과 고추장 비빔밥', 11000), + ('불고기 정식', '달콤 짭짤한 불고기 한상', 15000), + ('갈비탕', '고기가 푸짐한 갈비탕', 13000), + ('잡채', '쫄깃한 당면과 야채 잡채', 12000), + ('삼계탕', '보양식 삼계탕', 16000), + ('제육볶음', '매콤한 제육볶음', 11000), + ('순두부찌개', '담백한 순두부찌개', 9000), + ('떡볶이', '매콤달콤 떡볶이', 8000), + ('김치볶음밥', '치즈 김치볶음밥', 10000), + ('칼국수', '바지락 칼국수', 10000) + ) AS pool(menu_name, description, price) + ORDER BY md5(s.id::text || menu_name) + LIMIT (5 + (s.id % 3))::int +) AS m +WHERE s.district = 'GANGNAM' AND s.category = 'KOREAN' AND s.is_deleted = false; + +-- JAPANESE (일식) +INSERT INTO menu (store_id, menu_name, description, price, is_deleted, created_at) +SELECT s.id, m.menu_name, m.description, m.price, false, NOW() +FROM stores s +CROSS JOIN LATERAL ( + SELECT menu_name, description, price + FROM (VALUES + ('초밥 세트', '셰프 추천 초밥 10피스', 25000), + ('연어 사시미', '신선한 연어 사시미', 22000), + ('돈카츠', '바삭한 등심 돈카츠', 14000), + ('우동', '진한 가츠오 육수 우동', 9000), + ('규동', '얇게 썬 소고기 덮밥', 12000), + ('가라아게', '바삭한 일본식 닭튀김', 10000), + ('돈코츠 라멘', '진한 돼지뼈 육수 라멘', 12000), + ('텐동', '튀김 덮밥', 13000), + ('일본식 카레', '담백한 일본 카레', 11000), + ('야키소바', '철판 볶음면', 10000), + ('오니기리 세트', '주먹밥 3종 세트', 7000), + ('스시 오마카세', '셰프 추천 코스', 80000) + ) AS pool(menu_name, description, price) + ORDER BY md5(s.id::text || menu_name) + LIMIT (5 + (s.id % 3))::int +) AS m +WHERE s.district = 'GANGNAM' AND s.category = 'JAPANESE' AND s.is_deleted = false; + +-- CHINESE (중식) +INSERT INTO menu (store_id, menu_name, description, price, is_deleted, created_at) +SELECT s.id, m.menu_name, m.description, m.price, false, NOW() +FROM stores s +CROSS JOIN LATERAL ( + SELECT menu_name, description, price + FROM (VALUES + ('짜장면', '수제 춘장 짜장면', 8000), + ('짬뽕', '얼큰한 해물 짬뽕', 9000), + ('탕수육', '바삭한 찹쌀 탕수육', 22000), + ('볶음밥', '계란 볶음밥', 9000), + ('마파두부', '얼얼한 사천식 마파두부', 14000), + ('깐풍기', '매콤달콤 깐풍기', 23000), + ('양장피', '냉채 양장피', 28000), + ('군만두', '바삭한 군만두 8개', 7000), + ('동파육', '본토식 동파육', 32000), + ('깐쇼새우', '바삭 깐쇼새우', 25000), + ('짬뽕밥', '얼큰 짬뽕밥', 10000), + ('유산슬', '계절 유산슬', 24000) + ) AS pool(menu_name, description, price) + ORDER BY md5(s.id::text || menu_name) + LIMIT (5 + (s.id % 3))::int +) AS m +WHERE s.district = 'GANGNAM' AND s.category = 'CHINESE' AND s.is_deleted = false; + +-- WESTERN (양식) +INSERT INTO menu (store_id, menu_name, description, price, is_deleted, created_at) +SELECT s.id, m.menu_name, m.description, m.price, false, NOW() +FROM stores s +CROSS JOIN LATERAL ( + SELECT menu_name, description, price + FROM (VALUES + ('크림 파스타', '진한 크림 파스타', 16000), + ('마르게리타 피자', '토마토 모짜렐라 바질', 19000), + ('립아이 스테이크', '미디엄 굽기 추천', 38000), + ('시저 샐러드', '신선한 로메인과 시저 드레싱', 13000), + ('해산물 리조또', '새우와 관자가 들어간 리조또', 21000), + ('포카치아', '갓 구운 포카치아 빵', 8000), + ('봉골레 파스타', '바지락 화이트 와인 파스타', 17000), + ('카르보나라', '베이컨 크림 카르보나라', 16000), + ('함박 스테이크', '데미글라스 함박', 18000), + ('그라탱', '치즈 그라탱', 15000), + ('라자냐', '오븐에 구운 라자냐', 18000), + ('티본 스테이크', '450g 티본 스테이크', 55000) + ) AS pool(menu_name, description, price) + ORDER BY md5(s.id::text || menu_name) + LIMIT (5 + (s.id % 3))::int +) AS m +WHERE s.district = 'GANGNAM' AND s.category = 'WESTERN' AND s.is_deleted = false; + +-- DESSERT (디저트/카페) +INSERT INTO menu (store_id, menu_name, description, price, is_deleted, created_at) +SELECT s.id, m.menu_name, m.description, m.price, false, NOW() +FROM stores s +CROSS JOIN LATERAL ( + SELECT menu_name, description, price + FROM (VALUES + ('아메리카노', '깊고 진한 에스프레소', 5000), + ('카페 라떼', '부드러운 우유 라떼', 5500), + ('티라미수', '마스카포네 치즈 티라미수', 7500), + ('크림 브륄레', '캐러멜라이즈 크림 브륄레', 8000), + ('마카롱 세트', '시즌 마카롱 4종', 9000), + ('초콜릿 케이크', '진한 다크 초콜릿 케이크', 7000), + ('카푸치노', '풍성한 거품의 카푸치노', 5800), + ('바닐라 라떼', '바닐라 시럽 라떼', 6000), + ('치즈케이크', '뉴욕 치즈케이크', 7500), + ('크로플', '바삭한 크로플 위 아이스크림', 8500), + ('수제 와플', '딸기 수제 와플', 9000), + ('아인슈페너', '진한 크림 커피', 6500) + ) AS pool(menu_name, description, price) + ORDER BY md5(s.id::text || menu_name) + LIMIT (5 + (s.id % 3))::int +) AS m +WHERE s.district = 'GANGNAM' AND s.category = 'DESSERT' AND s.is_deleted = false; + +-- CHICKEN (치킨) +INSERT INTO menu (store_id, menu_name, description, price, is_deleted, created_at) +SELECT s.id, m.menu_name, m.description, m.price, false, NOW() +FROM stores s +CROSS JOIN LATERAL ( + SELECT menu_name, description, price + FROM (VALUES + ('후라이드 치킨', '바삭한 후라이드 한 마리', 19000), + ('양념 치킨', '매콤달콤 양념 치킨', 20000), + ('간장 치킨', '달콤 짭짤 간장 치킨', 20000), + ('파닭', '쪽파 듬뿍 파닭', 22000), + ('핫윙', '매운 핫윙 8조각', 12000), + ('치즈볼', '쫀득 치즈볼 8개', 5000), + ('감자튀김', '바삭한 감자튀김', 4000), + ('생맥주 500cc', '시원한 생맥주', 5000), + ('콜라 1.25L', '콜라 1.25리터', 3000), + ('뼈없는 순살', '순살 후라이드', 21000) + ) AS pool(menu_name, description, price) + ORDER BY md5(s.id::text || menu_name) + LIMIT (5 + (s.id % 3))::int +) AS m +WHERE s.district = 'GANGNAM' AND s.category = 'CHICKEN' AND s.is_deleted = false; + +-- MEAT (고기/구이) +INSERT INTO menu (store_id, menu_name, description, price, is_deleted, created_at) +SELECT s.id, m.menu_name, m.description, m.price, false, NOW() +FROM stores s +CROSS JOIN LATERAL ( + SELECT menu_name, description, price + FROM (VALUES + ('한우 등심 200g', '1++ 등급 한우 등심', 65000), + ('한우 갈비살 200g', '한우 갈비살', 58000), + ('삼겹살 200g', '국내산 통삼겹살', 18000), + ('항정살 200g', '쫄깃한 항정살', 22000), + ('차돌박이 150g', '얇게 썬 차돌박이', 25000), + ('목살 200g', '국내산 통목살', 17000), + ('우삼겹', '얇게 썬 우삼겹', 28000), + ('된장찌개', '식사용 된장찌개', 8000), + ('냉면', '시원한 평양냉면', 11000), + ('공기밥', '쌀밥 한 공기', 2000) + ) AS pool(menu_name, description, price) + ORDER BY md5(s.id::text || menu_name) + LIMIT (5 + (s.id % 3))::int +) AS m +WHERE s.district = 'GANGNAM' AND s.category = 'MEAT' AND s.is_deleted = false; + +-- FISH (횟집) +INSERT INTO menu (store_id, menu_name, description, price, is_deleted, created_at) +SELECT s.id, m.menu_name, m.description, m.price, false, NOW() +FROM stores s +CROSS JOIN LATERAL ( + SELECT menu_name, description, price + FROM (VALUES + ('모듬회 (소)', '광어 우럭 등 모듬회', 55000), + ('모듬회 (대)', '4인 기준 모듬회', 95000), + ('참치회', '냉동 참치 사시미', 35000), + ('광어회', '국내산 광어회', 45000), + ('우럭회', '국내산 우럭회', 50000), + ('연어회', '노르웨이산 연어', 38000), + ('매운탕', '얼큰한 해물 매운탕', 25000), + ('회덮밥', '모듬회 덮밥', 18000), + ('초밥 세트', '초밥 12피스', 28000), + ('새우튀김', '왕새우 튀김 5미', 15000) + ) AS pool(menu_name, description, price) + ORDER BY md5(s.id::text || menu_name) + LIMIT (5 + (s.id % 3))::int +) AS m +WHERE s.district = 'GANGNAM' AND s.category = 'FISH' AND s.is_deleted = false; + +-- FASTFOOD (패스트푸드) +INSERT INTO menu (store_id, menu_name, description, price, is_deleted, created_at) +SELECT s.id, m.menu_name, m.description, m.price, false, NOW() +FROM stores s +CROSS JOIN LATERAL ( + SELECT menu_name, description, price + FROM (VALUES + ('치즈버거 세트', '치즈버거 + 감자튀김 + 음료', 9500), + ('더블버거 세트', '패티 2장 + 감자튀김 + 음료', 11500), + ('베이컨 버거', '베이컨 듬뿍 버거', 8500), + ('새우 버거', '통새우 패티 버거', 8000), + ('치킨 너겟 6조각', '바삭한 치킨너겟', 4500), + ('감자튀김 (L)', '라지 사이즈 감자튀김', 4000), + ('아이스크림 콘', '바닐라 아이스크림 콘', 1500), + ('콜라 (L)', '라지 사이즈 콜라', 2500), + ('애플파이', '바삭한 애플파이', 2500), + ('핫윙 4조각', '매운 핫윙', 5500) + ) AS pool(menu_name, description, price) + ORDER BY md5(s.id::text || menu_name) + LIMIT (5 + (s.id % 3))::int +) AS m +WHERE s.district = 'GANGNAM' AND s.category = 'FASTFOOD' AND s.is_deleted = false; + +-- FOREIGN (외국음식) +INSERT INTO menu (store_id, menu_name, description, price, is_deleted, created_at) +SELECT s.id, m.menu_name, m.description, m.price, false, NOW() +FROM stores s +CROSS JOIN LATERAL ( + SELECT menu_name, description, price + FROM (VALUES + ('베트남 쌀국수', '진한 사골 쌀국수', 11000), + ('분짜', '하노이식 분짜 정식', 13000), + ('팟타이', '태국식 볶음 쌀국수', 12000), + ('똠얌꿍', '매콤한 새우 똠얌꿍', 14000), + ('치킨 카레', '인도식 치킨 카레와 난', 15000), + ('그린 카레', '코코넛 그린 카레', 14000), + ('짜조', '바삭한 베트남 스프링롤', 8000), + ('쏨땀', '태국식 파파야 샐러드', 12000), + ('파드 까파오', '태국 바질 볶음', 13000), + ('마살라 도사', '인도식 크레페', 12000), + ('케밥 플레이트', '터키식 케밥 정식', 16000), + ('월남쌈', '신선한 월남쌈 모듬', 18000) + ) AS pool(menu_name, description, price) + ORDER BY md5(s.id::text || menu_name) + LIMIT (5 + (s.id % 3))::int +) AS m +WHERE s.district = 'GANGNAM' AND s.category = 'FOREIGN' AND s.is_deleted = false; + +-- BUFFET (뷔페) +INSERT INTO menu (store_id, menu_name, description, price, is_deleted, created_at) +SELECT s.id, m.menu_name, m.description, m.price, false, NOW() +FROM stores s +CROSS JOIN LATERAL ( + SELECT menu_name, description, price + FROM (VALUES + ('점심 뷔페 (성인)', '평일 점심 뷔페', 35000), + ('저녁 뷔페 (성인)', '저녁 뷔페 풀코스', 55000), + ('주말 브런치', '주말 한정 브런치 뷔페', 45000), + ('어린이 뷔페', '7~12세 어린이 요금', 22000), + ('유아 뷔페', '4~6세 유아 요금', 12000), + ('음료 무제한', '소프트드링크 무제한', 8000), + ('와인 페어링', '디너 와인 페어링', 25000), + ('생일 케이크', '생일 축하 케이크', 30000), + ('홀케이크 + 와인', '특별 패키지', 65000), + ('VIP 룸 이용료', 'VIP 룸 추가', 50000) + ) AS pool(menu_name, description, price) + ORDER BY md5(s.id::text || menu_name) + LIMIT (5 + (s.id % 3))::int +) AS m +WHERE s.district = 'GANGNAM' AND s.category = 'BUFFET' AND s.is_deleted = false; + +-- OTHERS (기타) +INSERT INTO menu (store_id, menu_name, description, price, is_deleted, created_at) +SELECT s.id, m.menu_name, m.description, m.price, false, NOW() +FROM stores s +CROSS JOIN LATERAL ( + SELECT menu_name, description, price + FROM (VALUES + ('대표 메뉴 A', '셰프 추천 대표 메뉴', 15000), + ('대표 메뉴 B', '인기 메뉴', 13000), + ('런치 세트', '평일 점심 한정 세트', 12000), + ('디너 세트', '저녁 코스 메뉴', 25000), + ('주말 한정 코스', '주말에만 제공', 32000), + ('시즌 한정', '계절 한정 메뉴', 18000), + ('사이드 메뉴', '추천 사이드', 6000), + ('디저트', '오늘의 디저트', 7000), + ('계절 음료', '시즌 한정 음료', 4500), + ('주류 세트', '계절 주류 세트', 25000) + ) AS pool(menu_name, description, price) + ORDER BY md5(s.id::text || menu_name) + LIMIT (5 + (s.id % 3))::int +) AS m +WHERE s.district = 'GANGNAM' AND s.category = 'OTHERS' AND s.is_deleted = false; diff --git a/src/main/java/com/catchtable/reservation/dto/read/ReservationDetailResponseDto.java b/src/main/java/com/catchtable/reservation/dto/read/ReservationDetailResponseDto.java index 1166e8e..2fe1164 100644 --- a/src/main/java/com/catchtable/reservation/dto/read/ReservationDetailResponseDto.java +++ b/src/main/java/com/catchtable/reservation/dto/read/ReservationDetailResponseDto.java @@ -16,6 +16,7 @@ public record StoreInfo( Long storeId, String storeName, String storeImage, + String storeCategory, String address ) {} diff --git a/src/main/java/com/catchtable/reservation/dto/read/ReservationListResponseDto.java b/src/main/java/com/catchtable/reservation/dto/read/ReservationListResponseDto.java index 419a005..16734ac 100644 --- a/src/main/java/com/catchtable/reservation/dto/read/ReservationListResponseDto.java +++ b/src/main/java/com/catchtable/reservation/dto/read/ReservationListResponseDto.java @@ -8,8 +8,10 @@ public record ReservationListResponseDto( Long id, Long remainId, String status, + Long storeId, String storeName, String storeImage, + String storeCategory, LocalDate remainDate, LocalTime remainTime, Integer member, diff --git a/src/main/java/com/catchtable/reservation/service/ReservationService.java b/src/main/java/com/catchtable/reservation/service/ReservationService.java index 07931da..498b965 100644 --- a/src/main/java/com/catchtable/reservation/service/ReservationService.java +++ b/src/main/java/com/catchtable/reservation/service/ReservationService.java @@ -79,8 +79,10 @@ public List getUserReservations(Long userId) { reservation.getId(), storeRemain.getId(), reservation.getStatus().name().toLowerCase(), + store.getId(), store.getStoreName(), store.getStoreImage() != null ? store.getStoreImage() : "", + store.getCategory().name(), storeRemain.getRemainDate(), storeRemain.getRemainTime(), reservation.getMember(), @@ -103,6 +105,7 @@ public ReservationDetailResponseDto getReservationDetail(Long reservationId, Lon store.getId(), store.getStoreName(), store.getStoreImage() != null ? store.getStoreImage() : "", + store.getCategory().name(), store.getAddress() ); From 53a2f2d9226f4bca1757f08aae474662b5aabe8f Mon Sep 17 00:00:00 2001 From: silkair Date: Wed, 29 Apr 2026 02:55:58 +0900 Subject: [PATCH 09/30] =?UTF-8?q?feat=20:=20=EB=B9=88=EC=9E=90=EB=A6=AC=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EC=95=8C=EB=A6=BC=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../catchtable/global/common/SuccessCode.java | 8 ++- .../global/exception/ErrorCode.java | 8 ++- .../controller/NotificationController.java | 53 +++++++++++++++++++ .../dto/read/NotificationListResponse.java | 29 ++++++++++ .../notification/event/VacancyEvent.java | 3 +- .../VacancyInAppNotificationListener.java | 24 +++++++-- .../repository/NotificationRepository.java | 8 +++ .../service/NotificationService.java | 40 ++++++++++++++ .../service/ReservationService.java | 15 +++--- 9 files changed, 171 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/catchtable/notification/controller/NotificationController.java create mode 100644 src/main/java/com/catchtable/notification/dto/read/NotificationListResponse.java diff --git a/src/main/java/com/catchtable/global/common/SuccessCode.java b/src/main/java/com/catchtable/global/common/SuccessCode.java index 939600f..6cd39b9 100644 --- a/src/main/java/com/catchtable/global/common/SuccessCode.java +++ b/src/main/java/com/catchtable/global/common/SuccessCode.java @@ -58,7 +58,13 @@ public enum SuccessCode implements ResponseCode { // Vacancy VACANCY_REGISTER_SUCCESS(HttpStatus.CREATED, "빈자리 알림이 등록되었습니다."), VACANCY_LOOKUP_SUCCESS(HttpStatus.OK, "빈자리 알림 조회가 완료되었습니다."), - VACANCY_DELETE_SUCCESS(HttpStatus.OK, "빈자리 알림이 삭제되었습니다."); + VACANCY_DELETE_SUCCESS(HttpStatus.OK, "빈자리 알림이 삭제되었습니다."), + + // Notification + NOTIFICATION_LOOKUP_SUCCESS(HttpStatus.OK, "알림 목록을 성공적으로 조회했습니다."), + NOTIFICATION_UNREAD_COUNT_SUCCESS(HttpStatus.OK, "안 읽은 알림 개수를 조회했습니다."), + NOTIFICATION_READ_SUCCESS(HttpStatus.OK, "알림을 읽음 처리했습니다."), + NOTIFICATION_DELETE_SUCCESS(HttpStatus.OK, "알림을 삭제했습니다."); private final HttpStatus httpStatus; private final String message; diff --git a/src/main/java/com/catchtable/global/exception/ErrorCode.java b/src/main/java/com/catchtable/global/exception/ErrorCode.java index be2d7a0..a81e830 100644 --- a/src/main/java/com/catchtable/global/exception/ErrorCode.java +++ b/src/main/java/com/catchtable/global/exception/ErrorCode.java @@ -75,8 +75,12 @@ public enum ErrorCode implements ResponseCode { VACANCY_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 알림입니다."), VACANCY_ALREADY_REGISTERED(HttpStatus.CONFLICT, "이미 빈자리 알림을 등록했습니다."), VACANCY_ALREADY_DELETED(HttpStatus.CONFLICT, "이미 삭제된 알림입니다."), - VACANCY_REMAIN_NOT_EXHAUSTED(HttpStatus.BAD_REQUEST, "아직 예약 가능한 시간대입니다. 잔여 좌석이 0일 때만 빈자리 알림을 등록할 수 있습니다."); + VACANCY_REMAIN_NOT_EXHAUSTED(HttpStatus.BAD_REQUEST, "아직 예약 가능한 시간대입니다. 잔여 좌석이 0일 때만 빈자리 알림을 등록할 수 있습니다."), + + // Notification + NOTIFICATION_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 알림입니다."), + NOT_NOTIFICATION_OWNER(HttpStatus.FORBIDDEN, "본인의 알림만 접근할 수 있습니다."); private final HttpStatus httpStatus; private final String message; -} +} \ No newline at end of file diff --git a/src/main/java/com/catchtable/notification/controller/NotificationController.java b/src/main/java/com/catchtable/notification/controller/NotificationController.java new file mode 100644 index 0000000..2fa9b6a --- /dev/null +++ b/src/main/java/com/catchtable/notification/controller/NotificationController.java @@ -0,0 +1,53 @@ +package com.catchtable.notification.controller; + +import com.catchtable.global.common.ApiResponse; +import com.catchtable.global.common.SuccessCode; +import com.catchtable.notification.dto.read.NotificationListResponse; +import com.catchtable.notification.service.NotificationService; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PageableDefault; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/v1/notifications") +@RequiredArgsConstructor +public class NotificationController { + + private final NotificationService notificationService; + + @GetMapping + public ResponseEntity>> getMyNotifications( + @RequestParam Long userId, + @PageableDefault(size = 20) Pageable pageable) { + + Page response = notificationService.getMyNotifications(userId, pageable); + return ResponseEntity.ok(ApiResponse.success(SuccessCode.NOTIFICATION_LOOKUP_SUCCESS, response)); + } + + @GetMapping("/unread-count") + public ResponseEntity> getUnreadCount(@RequestParam Long userId) { + long count = notificationService.getUnreadCount(userId); + return ResponseEntity.ok(ApiResponse.success(SuccessCode.NOTIFICATION_UNREAD_COUNT_SUCCESS, count)); + } + + @PatchMapping("/{notificationId}/read") + public ResponseEntity> markAsRead( + @PathVariable Long notificationId, + @RequestParam Long userId) { + + notificationService.markAsRead(notificationId, userId); + return ResponseEntity.ok(ApiResponse.success(SuccessCode.NOTIFICATION_READ_SUCCESS, null)); + } + + @DeleteMapping("/{notificationId}") + public ResponseEntity> deleteNotification( + @PathVariable Long notificationId, + @RequestParam Long userId) { + + notificationService.deleteNotification(notificationId, userId); + return ResponseEntity.ok(ApiResponse.success(SuccessCode.NOTIFICATION_DELETE_SUCCESS, null)); + } +} diff --git a/src/main/java/com/catchtable/notification/dto/read/NotificationListResponse.java b/src/main/java/com/catchtable/notification/dto/read/NotificationListResponse.java new file mode 100644 index 0000000..2a853a4 --- /dev/null +++ b/src/main/java/com/catchtable/notification/dto/read/NotificationListResponse.java @@ -0,0 +1,29 @@ +package com.catchtable.notification.dto.read; + +import com.catchtable.notification.entity.Notification; +import com.catchtable.notification.entity.NotificationType; +import lombok.Getter; + +import java.time.LocalDateTime; + +@Getter +public class NotificationListResponse { + + private final Long notificationId; + private final NotificationType type; + private final String title; + private final String content; + private final Long relatedItemId; + private final boolean isRead; + private final LocalDateTime createdAt; + + public NotificationListResponse(Notification notification) { + this.notificationId = notification.getId(); + this.type = notification.getType(); + this.title = notification.getTitle(); + this.content = notification.getContent(); + this.relatedItemId = notification.getRelatedItemId(); + this.isRead = notification.isRead(); + this.createdAt = notification.getCreatedAt(); + } +} diff --git a/src/main/java/com/catchtable/notification/event/VacancyEvent.java b/src/main/java/com/catchtable/notification/event/VacancyEvent.java index 467b1ee..700f06c 100644 --- a/src/main/java/com/catchtable/notification/event/VacancyEvent.java +++ b/src/main/java/com/catchtable/notification/event/VacancyEvent.java @@ -1,11 +1,10 @@ package com.catchtable.notification.event; -import com.catchtable.remain.entity.StoreRemain; import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public class VacancyEvent { - private final StoreRemain storeRemain; + private final Long remainId; } diff --git a/src/main/java/com/catchtable/notification/listener/VacancyInAppNotificationListener.java b/src/main/java/com/catchtable/notification/listener/VacancyInAppNotificationListener.java index fa896f7..2771173 100644 --- a/src/main/java/com/catchtable/notification/listener/VacancyInAppNotificationListener.java +++ b/src/main/java/com/catchtable/notification/listener/VacancyInAppNotificationListener.java @@ -1,9 +1,12 @@ package com.catchtable.notification.listener; +import com.catchtable.global.exception.CustomException; +import com.catchtable.global.exception.ErrorCode; import com.catchtable.notification.entity.NotificationType; import com.catchtable.notification.event.VacancyEvent; import com.catchtable.notification.service.NotificationService; import com.catchtable.remain.entity.StoreRemain; +import com.catchtable.remain.repository.StoreRemainRepository; import com.catchtable.user.entity.User; import com.catchtable.vacancy.entity.Vacancy; import com.catchtable.vacancy.entity.VacancyStatus; @@ -12,6 +15,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionalEventListener; @@ -24,17 +29,24 @@ public class VacancyInAppNotificationListener { private final VacancyRepository vacancyRepository; private final NotificationService notificationService; + private final StoreRemainRepository storeRemainRepository; - // 메인 트랜잭션이 커밋된 직후에 비동기적으로 실행됨 @Async @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + // 리스너 내에서 다시 DB 조회를 하므로, 새로운 트랜잭션이 필요합니다. + @Transactional(propagation = Propagation.REQUIRES_NEW) public void handleVacancyEvent(VacancyEvent event) { - StoreRemain storeRemain = event.getStoreRemain(); - Long remainId = storeRemain.getId(); + Long remainId = event.getRemainId(); - log.info("[알림] 빈자리 발생 이벤트 수신: remainId = {}", remainId); + // 이벤트로 받은 ID를 사용하여 DB에서 최신 상태의 StoreRemain 정보를 다시 조회합니다. + StoreRemain storeRemain = storeRemainRepository.findById(remainId) + .orElseThrow(() -> new CustomException(ErrorCode.REMAIN_NOT_FOUND)); + log.info("[인앱 알림 리스너] 빈자리 발생 이벤트 수신: remainId = {}, 현재 잔여 좌석 = {}", remainId, storeRemain.getRemainTeam()); + + // 최신 상태의 remainTeam으로 검사합니다. if (storeRemain.getRemainTeam() <= 0) { + log.warn("[인앱 알림 리스너] 잔여 좌석이 0 이하이므로 알림을 발송하지 않습니다."); return; } @@ -42,6 +54,7 @@ public void handleVacancyEvent(VacancyEvent event) { remainId, VacancyStatus.ACTIVE); if (subscribers.isEmpty()) { + log.info("[인앱 알림 리스너] 해당 시간대에 대한 빈자리 알림 구독자가 없습니다."); return; } @@ -49,6 +62,8 @@ public void handleVacancyEvent(VacancyEvent event) { String remainDate = storeRemain.getRemainDate().toString(); String remainTime = storeRemain.getRemainTime().toString(); + log.info("[인앱 알림 리스너] {}명에게 알림 생성을 시작합니다.", subscribers.size()); + for (Vacancy vacancy : subscribers) { User user = vacancy.getUser(); if (user == null) continue; @@ -57,7 +72,6 @@ public void handleVacancyEvent(VacancyEvent event) { String content = String.format("%s %s %s에 빈자리가 발생했습니다! 지금 바로 예약하세요.", storeName, remainDate, remainTime); - // 알림 생성 notificationService.createNotification(user, NotificationType.VACANCY, title, content, storeRemain.getStore().getId()); } } diff --git a/src/main/java/com/catchtable/notification/repository/NotificationRepository.java b/src/main/java/com/catchtable/notification/repository/NotificationRepository.java index 88bf26a..b565b61 100644 --- a/src/main/java/com/catchtable/notification/repository/NotificationRepository.java +++ b/src/main/java/com/catchtable/notification/repository/NotificationRepository.java @@ -1,7 +1,15 @@ package com.catchtable.notification.repository; import com.catchtable.notification.entity.Notification; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; public interface NotificationRepository extends JpaRepository { + + // 사용자의 삭제되지 않은 알림 목록 조회 + Page findByUserIdAndIsDeletedFalseOrderByCreatedAtDesc(Long userId, Pageable pageable); + + // 읽지 않은 알림 개수 카운트 + long countByUserIdAndIsReadFalseAndIsDeletedFalse(Long userId); } diff --git a/src/main/java/com/catchtable/notification/service/NotificationService.java b/src/main/java/com/catchtable/notification/service/NotificationService.java index eea87fa..66c6cf7 100644 --- a/src/main/java/com/catchtable/notification/service/NotificationService.java +++ b/src/main/java/com/catchtable/notification/service/NotificationService.java @@ -1,10 +1,15 @@ package com.catchtable.notification.service; +import com.catchtable.global.exception.CustomException; +import com.catchtable.global.exception.ErrorCode; +import com.catchtable.notification.dto.read.NotificationListResponse; import com.catchtable.notification.entity.Notification; import com.catchtable.notification.entity.NotificationType; import com.catchtable.notification.repository.NotificationRepository; import com.catchtable.user.entity.User; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -25,4 +30,39 @@ public void createNotification(User user, NotificationType type, String title, S .build(); notificationRepository.save(notification); } + + @Transactional(readOnly = true) + public Page getMyNotifications(Long userId, Pageable pageable) { + return notificationRepository.findByUserIdAndIsDeletedFalseOrderByCreatedAtDesc(userId, pageable) + .map(NotificationListResponse::new); + } + + @Transactional(readOnly = true) + public long getUnreadCount(Long userId) { + return notificationRepository.countByUserIdAndIsReadFalseAndIsDeletedFalse(userId); + } + + @Transactional + public void markAsRead(Long notificationId, Long userId) { + Notification notification = notificationRepository.findById(notificationId) + .orElseThrow(() -> new CustomException(ErrorCode.NOTIFICATION_NOT_FOUND)); + + if (!notification.getUser().getId().equals(userId)) { + throw new CustomException(ErrorCode.NOT_NOTIFICATION_OWNER); + } + + notification.markAsRead(); + } + + @Transactional + public void deleteNotification(Long notificationId, Long userId) { + Notification notification = notificationRepository.findById(notificationId) + .orElseThrow(() -> new CustomException(ErrorCode.NOTIFICATION_NOT_FOUND)); + + if (!notification.getUser().getId().equals(userId)) { + throw new CustomException(ErrorCode.NOT_NOTIFICATION_OWNER); + } + + notification.markAsDeleted(); + } } diff --git a/src/main/java/com/catchtable/reservation/service/ReservationService.java b/src/main/java/com/catchtable/reservation/service/ReservationService.java index 5769a3a..b2e27a4 100644 --- a/src/main/java/com/catchtable/reservation/service/ReservationService.java +++ b/src/main/java/com/catchtable/reservation/service/ReservationService.java @@ -146,11 +146,11 @@ public void cancelReservation(Long reservationId, Long userId) { StoreRemain storeRemain = reservation.getStoreRemain(); storeRemain.increaseRemainTeam(); - // 빈자리 알림 이메일 발송 (추후 삭제 고려하여 그대로 둠) - vacancyNotificationService.notifySubscribers(storeRemain.getId()); + // 빈자리 알림 이메일 발송 (주석 처리) + // vacancyNotificationService.notifySubscribers(storeRemain.getId()); - // 빈자리 발생 이벤트 발행 (새로 추가한 인앱 알림 로직 트리거) - eventPublisher.publishEvent(new VacancyEvent(storeRemain)); + // 빈자리 발생 이벤트 발행 (ID만 전달) + eventPublisher.publishEvent(new VacancyEvent(storeRemain.getId())); // 쿠폰 반환 if (reservation.getCoupon() != null) { @@ -167,10 +167,11 @@ public ReservationUpdateResponseDto updateReservation(Long reservationId, Long u // 기존 예약 취소 및 재고 복구 oldReservation.changeStatus(ReservationStatus.CANCELED); - oldReservation.getStoreRemain().increaseRemainTeam(); + StoreRemain oldStoreRemain = oldReservation.getStoreRemain(); + oldStoreRemain.increaseRemainTeam(); - // 예약 변경으로 기존 자리가 났으므로 알림 이벤트 발행 - eventPublisher.publishEvent(new VacancyEvent(oldReservation.getStoreRemain())); + // 예약 변경으로 기존 자리가 났으므로 알림 이벤트 발행 (ID만 전달) + eventPublisher.publishEvent(new VacancyEvent(oldStoreRemain.getId())); // 기존 쿠폰 반환 if (oldReservation.getCoupon() != null) { From 1e1bef1b089e08f9796907d61de3c32ece404674 Mon Sep 17 00:00:00 2001 From: silkair Date: Wed, 29 Apr 2026 17:18:32 +0900 Subject: [PATCH 10/30] =?UTF-8?q?=EB=B9=88=EC=9E=90=EB=A6=AC=20=EC=95=8C?= =?UTF-8?q?=EB=A6=BC=20=EC=A1=B0=ED=9A=8C,=20=EC=9D=BD=EC=9D=8C=EC=B2=98?= =?UTF-8?q?=EB=A6=AC,=20=EC=82=AD=EC=A0=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/NotificationController.java | 5 +++-- .../listener/VacancyInAppNotificationListener.java | 11 ++++------- .../repository/NotificationRepository.java | 2 +- .../notification/service/NotificationService.java | 2 +- .../service/VacancyNotificationEmailService.java | 4 +--- 5 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/catchtable/notification/controller/NotificationController.java b/src/main/java/com/catchtable/notification/controller/NotificationController.java index 2fa9b6a..a1fa665 100644 --- a/src/main/java/com/catchtable/notification/controller/NotificationController.java +++ b/src/main/java/com/catchtable/notification/controller/NotificationController.java @@ -5,8 +5,10 @@ import com.catchtable.notification.dto.read.NotificationListResponse; import com.catchtable.notification.service.NotificationService; import lombok.RequiredArgsConstructor; +import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -21,8 +23,7 @@ public class NotificationController { @GetMapping public ResponseEntity>> getMyNotifications( @RequestParam Long userId, - @PageableDefault(size = 20) Pageable pageable) { - + @ParameterObject @PageableDefault(size = 20, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable) { Page response = notificationService.getMyNotifications(userId, pageable); return ResponseEntity.ok(ApiResponse.success(SuccessCode.NOTIFICATION_LOOKUP_SUCCESS, response)); } diff --git a/src/main/java/com/catchtable/notification/listener/VacancyInAppNotificationListener.java b/src/main/java/com/catchtable/notification/listener/VacancyInAppNotificationListener.java index 2771173..9fe4053 100644 --- a/src/main/java/com/catchtable/notification/listener/VacancyInAppNotificationListener.java +++ b/src/main/java/com/catchtable/notification/listener/VacancyInAppNotificationListener.java @@ -33,20 +33,17 @@ public class VacancyInAppNotificationListener { @Async @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) - // 리스너 내에서 다시 DB 조회를 하므로, 새로운 트랜잭션이 필요합니다. @Transactional(propagation = Propagation.REQUIRES_NEW) public void handleVacancyEvent(VacancyEvent event) { Long remainId = event.getRemainId(); - // 이벤트로 받은 ID를 사용하여 DB에서 최신 상태의 StoreRemain 정보를 다시 조회합니다. StoreRemain storeRemain = storeRemainRepository.findById(remainId) .orElseThrow(() -> new CustomException(ErrorCode.REMAIN_NOT_FOUND)); - log.info("[인앱 알림 리스너] 빈자리 발생 이벤트 수신: remainId = {}, 현재 잔여 좌석 = {}", remainId, storeRemain.getRemainTeam()); + log.info("빈자리 발생 이벤트 수신: remainId = {}, 현재 잔여 좌석 = {}", remainId, storeRemain.getRemainTeam()); - // 최신 상태의 remainTeam으로 검사합니다. if (storeRemain.getRemainTeam() <= 0) { - log.warn("[인앱 알림 리스너] 잔여 좌석이 0 이하이므로 알림을 발송하지 않습니다."); + log.warn("잔여 좌석이 0 이하이므로 알림을 발송하지 않습니다."); return; } @@ -54,7 +51,7 @@ public void handleVacancyEvent(VacancyEvent event) { remainId, VacancyStatus.ACTIVE); if (subscribers.isEmpty()) { - log.info("[인앱 알림 리스너] 해당 시간대에 대한 빈자리 알림 구독자가 없습니다."); + log.info("해당 시간대에 대한 빈자리 알림 구독자가 없습니다."); return; } @@ -62,7 +59,7 @@ public void handleVacancyEvent(VacancyEvent event) { String remainDate = storeRemain.getRemainDate().toString(); String remainTime = storeRemain.getRemainTime().toString(); - log.info("[인앱 알림 리스너] {}명에게 알림 생성을 시작합니다.", subscribers.size()); + log.info("{}명에게 알림 생성을 시작합니다.", subscribers.size()); for (Vacancy vacancy : subscribers) { User user = vacancy.getUser(); diff --git a/src/main/java/com/catchtable/notification/repository/NotificationRepository.java b/src/main/java/com/catchtable/notification/repository/NotificationRepository.java index b565b61..993b9b9 100644 --- a/src/main/java/com/catchtable/notification/repository/NotificationRepository.java +++ b/src/main/java/com/catchtable/notification/repository/NotificationRepository.java @@ -8,7 +8,7 @@ public interface NotificationRepository extends JpaRepository { // 사용자의 삭제되지 않은 알림 목록 조회 - Page findByUserIdAndIsDeletedFalseOrderByCreatedAtDesc(Long userId, Pageable pageable); + Page findByUserIdAndIsDeletedFalse(Long userId, Pageable pageable); // 읽지 않은 알림 개수 카운트 long countByUserIdAndIsReadFalseAndIsDeletedFalse(Long userId); diff --git a/src/main/java/com/catchtable/notification/service/NotificationService.java b/src/main/java/com/catchtable/notification/service/NotificationService.java index 66c6cf7..bce3501 100644 --- a/src/main/java/com/catchtable/notification/service/NotificationService.java +++ b/src/main/java/com/catchtable/notification/service/NotificationService.java @@ -33,7 +33,7 @@ public void createNotification(User user, NotificationType type, String title, S @Transactional(readOnly = true) public Page getMyNotifications(Long userId, Pageable pageable) { - return notificationRepository.findByUserIdAndIsDeletedFalseOrderByCreatedAtDesc(userId, pageable) + return notificationRepository.findByUserIdAndIsDeletedFalse(userId, pageable) .map(NotificationListResponse::new); } diff --git a/src/main/java/com/catchtable/notification/service/VacancyNotificationEmailService.java b/src/main/java/com/catchtable/notification/service/VacancyNotificationEmailService.java index f747a2c..c32b575 100644 --- a/src/main/java/com/catchtable/notification/service/VacancyNotificationEmailService.java +++ b/src/main/java/com/catchtable/notification/service/VacancyNotificationEmailService.java @@ -47,7 +47,6 @@ public void notifySubscribers(Long remainId) { return; } - // Vacancy 엔티티 구조가 객체 참조로 변경되었으므로, N+1을 방지하는 메서드 사용 List subscribers = vacancyRepository.findWithUserByStoreRemain_IdAndStatusAndIsDeletedFalse( remainId, VacancyStatus.ACTIVE); @@ -60,12 +59,11 @@ public void notifySubscribers(Long remainId) { String remainTime = storeRemain.getRemainTime().toString(); for (Vacancy vacancy : subscribers) { - // @EntityGraph가 적용된 Repository 메서드를 통해 가져오므로, N+1 없이 User 정보 접근 가능 User user = vacancy.getUser(); if (user == null) continue; emailService.send(user.getEmail(), - "[캐치테이블] 빈자리 알림", + "빈자리 알림", String.format("%s님, %s %s %s에 빈자리가 발생했습니다! 지금 바로 예약하세요.", user.getNickname(), storeName, remainDate, remainTime)); From a094224917fbd66d5ddcaf081746606ac0e38512 Mon Sep 17 00:00:00 2001 From: silkair Date: Wed, 29 Apr 2026 17:38:25 +0900 Subject: [PATCH 11/30] =?UTF-8?q?feat=20:=20=EB=B9=88=EC=9E=90=EB=A6=AC=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=20=EB=B9=84=EB=8F=99=EA=B8=B0=20=EB=B0=8F=20?= =?UTF-8?q?=EB=8F=99=EC=8B=9C=EC=84=B1=20=EB=82=99=EA=B4=80=EC=A0=81=20?= =?UTF-8?q?=EB=9D=BD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/catchtable/CatchtableApplication.java | 2 + .../catchtable/global/config/AsyncConfig.java | 24 ++++++++++++ .../service/ReservationService.java | 37 ++++++++++++++++--- 3 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/catchtable/global/config/AsyncConfig.java diff --git a/src/main/java/com/catchtable/CatchtableApplication.java b/src/main/java/com/catchtable/CatchtableApplication.java index 82e0966..99d9316 100644 --- a/src/main/java/com/catchtable/CatchtableApplication.java +++ b/src/main/java/com/catchtable/CatchtableApplication.java @@ -3,7 +3,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.scheduling.annotation.EnableAsync; +@EnableAsync @EnableJpaAuditing @SpringBootApplication public class CatchtableApplication { diff --git a/src/main/java/com/catchtable/global/config/AsyncConfig.java b/src/main/java/com/catchtable/global/config/AsyncConfig.java new file mode 100644 index 0000000..ca00879 --- /dev/null +++ b/src/main/java/com/catchtable/global/config/AsyncConfig.java @@ -0,0 +1,24 @@ +package com.catchtable.global.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; + +@Configuration +@EnableAsync +public class AsyncConfig { + + @Bean(name = "taskExecutor") + public Executor taskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(5); + executor.setMaxPoolSize(10); + executor.setQueueCapacity(25); + executor.setThreadNamePrefix("Async-Task-"); + executor.initialize(); + return executor; + } +} \ No newline at end of file diff --git a/src/main/java/com/catchtable/reservation/service/ReservationService.java b/src/main/java/com/catchtable/reservation/service/ReservationService.java index b2e27a4..58ce00f 100644 --- a/src/main/java/com/catchtable/reservation/service/ReservationService.java +++ b/src/main/java/com/catchtable/reservation/service/ReservationService.java @@ -23,6 +23,7 @@ import com.catchtable.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.dao.OptimisticLockingFailureException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -47,8 +48,15 @@ public ReservationCreateResponseDto create(ReservationCreateRequestDto request) StoreRemain storeRemain = storeRemainRepository.findByIdWithStore(request.remainId()) .orElseThrow(() -> new CustomException(ErrorCode.REMAIN_NOT_FOUND)); - // 재고 차감 (remainTeam <= 0 검증 포함) - storeRemain.decreaseRemainTeam(); + try { + // 재고 차감 (remainTeam <= 0 검증 포함) + storeRemain.decreaseRemainTeam(); + // 변경된 StoreRemain 엔티티를 명시적으로 저장하여 @Version 필드 업데이트를 트리거 + storeRemainRepository.saveAndFlush(storeRemain); + } catch (OptimisticLockingFailureException e) { + throw new CustomException(ErrorCode.OPTIMISTIC_LOCK_CONFLICT); + } + // 쿠폰 적용 (선택) Coupon coupon = null; @@ -142,9 +150,14 @@ public void cancelReservation(Long reservationId, Long userId) { // 예약 상태 취소로 변경 reservation.changeStatus(ReservationStatus.CANCELED); - // 예약했던 시간대의 재고 복구 StoreRemain storeRemain = reservation.getStoreRemain(); - storeRemain.increaseRemainTeam(); + try { + // 예약했던 시간대의 재고 복구 + storeRemain.increaseRemainTeam(); + storeRemainRepository.saveAndFlush(storeRemain); + } catch (OptimisticLockingFailureException e) { + throw new CustomException(ErrorCode.OPTIMISTIC_LOCK_CONFLICT); + } // 빈자리 알림 이메일 발송 (주석 처리) // vacancyNotificationService.notifySubscribers(storeRemain.getId()); @@ -168,7 +181,13 @@ public ReservationUpdateResponseDto updateReservation(Long reservationId, Long u // 기존 예약 취소 및 재고 복구 oldReservation.changeStatus(ReservationStatus.CANCELED); StoreRemain oldStoreRemain = oldReservation.getStoreRemain(); - oldStoreRemain.increaseRemainTeam(); + try { + oldStoreRemain.increaseRemainTeam(); + storeRemainRepository.saveAndFlush(oldStoreRemain); + } catch (OptimisticLockingFailureException e) { + throw new CustomException(ErrorCode.OPTIMISTIC_LOCK_CONFLICT); + } + // 예약 변경으로 기존 자리가 났으므로 알림 이벤트 발행 (ID만 전달) eventPublisher.publishEvent(new VacancyEvent(oldStoreRemain.getId())); @@ -179,7 +198,13 @@ public ReservationUpdateResponseDto updateReservation(Long reservationId, Long u } // 새로운 예약 시간에 대한 재고 차감 - newStoreRemain.decreaseRemainTeam(); + try { + newStoreRemain.decreaseRemainTeam(); + storeRemainRepository.saveAndFlush(newStoreRemain); + } catch (OptimisticLockingFailureException e) { + throw new CustomException(ErrorCode.OPTIMISTIC_LOCK_CONFLICT); + } + // 새 예약에 쿠폰 적용 (선택) Coupon newCoupon = null; From 97142b2b1615d82a8fe0fa461f13f4f0c8092291 Mon Sep 17 00:00:00 2001 From: silkair Date: Wed, 29 Apr 2026 18:10:43 +0900 Subject: [PATCH 12/30] =?UTF-8?q?feat=20:=20=EC=98=88=EC=95=BD=20=EC=B7=A8?= =?UTF-8?q?=EC=86=8C,=20=EC=98=88=EC=95=BD=20=ED=99=95=EC=A0=95,=20?= =?UTF-8?q?=EB=B0=A9=EB=AC=B8=20=EC=99=84=EB=A3=8C=20=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EC=95=8C=EB=A6=BC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/ReservationCanceledEvent.java | 14 ++++++ .../event/ReservationConfirmedEvent.java | 14 ++++++ .../event/ReservationVisitedEvent.java | 14 ++++++ ...servationCanceledNotificationListener.java | 50 +++++++++++++++++++ .../ReservationNotificationListener.java | 50 +++++++++++++++++++ ...eservationVisitedNotificationListener.java | 50 +++++++++++++++++++ .../repository/ReservationRepository.java | 3 ++ .../service/ReservationService.java | 40 ++++++++++++++- 8 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/catchtable/notification/event/ReservationCanceledEvent.java create mode 100644 src/main/java/com/catchtable/notification/event/ReservationConfirmedEvent.java create mode 100644 src/main/java/com/catchtable/notification/event/ReservationVisitedEvent.java create mode 100644 src/main/java/com/catchtable/notification/listener/ReservationCanceledNotificationListener.java create mode 100644 src/main/java/com/catchtable/notification/listener/ReservationNotificationListener.java create mode 100644 src/main/java/com/catchtable/notification/listener/ReservationVisitedNotificationListener.java diff --git a/src/main/java/com/catchtable/notification/event/ReservationCanceledEvent.java b/src/main/java/com/catchtable/notification/event/ReservationCanceledEvent.java new file mode 100644 index 0000000..4893b93 --- /dev/null +++ b/src/main/java/com/catchtable/notification/event/ReservationCanceledEvent.java @@ -0,0 +1,14 @@ +package com.catchtable.notification.event; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class ReservationCanceledEvent { + private final Long reservationId; + private final Long userId; + private final String storeName; + private final String remainDate; + private final String remainTime; +} diff --git a/src/main/java/com/catchtable/notification/event/ReservationConfirmedEvent.java b/src/main/java/com/catchtable/notification/event/ReservationConfirmedEvent.java new file mode 100644 index 0000000..b0d8131 --- /dev/null +++ b/src/main/java/com/catchtable/notification/event/ReservationConfirmedEvent.java @@ -0,0 +1,14 @@ +package com.catchtable.notification.event; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class ReservationConfirmedEvent { + private final Long reservationId; + private final Long userId; + private final String storeName; + private final String remainDate; + private final String remainTime; +} diff --git a/src/main/java/com/catchtable/notification/event/ReservationVisitedEvent.java b/src/main/java/com/catchtable/notification/event/ReservationVisitedEvent.java new file mode 100644 index 0000000..5adeb08 --- /dev/null +++ b/src/main/java/com/catchtable/notification/event/ReservationVisitedEvent.java @@ -0,0 +1,14 @@ +package com.catchtable.notification.event; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class ReservationVisitedEvent { + private final Long reservationId; + private final Long userId; + private final String storeName; + private final String remainDate; + private final String remainTime; +} diff --git a/src/main/java/com/catchtable/notification/listener/ReservationCanceledNotificationListener.java b/src/main/java/com/catchtable/notification/listener/ReservationCanceledNotificationListener.java new file mode 100644 index 0000000..b658106 --- /dev/null +++ b/src/main/java/com/catchtable/notification/listener/ReservationCanceledNotificationListener.java @@ -0,0 +1,50 @@ +package com.catchtable.notification.listener; + +import com.catchtable.global.exception.CustomException; +import com.catchtable.global.exception.ErrorCode; +import com.catchtable.notification.entity.NotificationType; +import com.catchtable.notification.event.ReservationCanceledEvent; +import com.catchtable.notification.service.NotificationService; +import com.catchtable.user.entity.User; +import com.catchtable.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +@Slf4j +@Component +@RequiredArgsConstructor +public class ReservationCanceledNotificationListener { + + private final NotificationService notificationService; + private final UserRepository userRepository; + + @Async + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void handleReservationCanceledEvent(ReservationCanceledEvent event) { + User user = userRepository.findById(event.getUserId()) + .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND)); + + String title = "예약이 취소되었습니다."; + String content = String.format("'%s' 매장 %s %s 예약이 취소되었습니다.", + event.getStoreName(), + event.getRemainDate(), + event.getRemainTime()); + + notificationService.createNotification( + user, + NotificationType.RESERVATION_CANCELED, + title, + content, + event.getReservationId() + ); + + log.info("[예약 취소 알림] userId: {}, reservationId: {} 알림 생성 완료", event.getUserId(), event.getReservationId()); + } +} diff --git a/src/main/java/com/catchtable/notification/listener/ReservationNotificationListener.java b/src/main/java/com/catchtable/notification/listener/ReservationNotificationListener.java new file mode 100644 index 0000000..6fa5b1a --- /dev/null +++ b/src/main/java/com/catchtable/notification/listener/ReservationNotificationListener.java @@ -0,0 +1,50 @@ +package com.catchtable.notification.listener; + +import com.catchtable.global.exception.CustomException; +import com.catchtable.global.exception.ErrorCode; +import com.catchtable.notification.entity.NotificationType; +import com.catchtable.notification.event.ReservationConfirmedEvent; +import com.catchtable.notification.service.NotificationService; +import com.catchtable.user.entity.User; +import com.catchtable.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +@Slf4j +@Component +@RequiredArgsConstructor +public class ReservationNotificationListener { + + private final NotificationService notificationService; + private final UserRepository userRepository; + + @Async + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void handleReservationConfirmedEvent(ReservationConfirmedEvent event) { + User user = userRepository.findById(event.getUserId()) + .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND)); + + String title = "예약이 확정되었습니다."; + String content = String.format("'%s' 매장 %s %s 예약이 확정되었습니다.", + event.getStoreName(), + event.getRemainDate(), + event.getRemainTime()); + + notificationService.createNotification( + user, + NotificationType.RESERVATION_CONFIRMED, + title, + content, + event.getReservationId() + ); + + log.info("[예약 확정 알림] userId: {}, reservationId: {} 알림 생성 완료", event.getUserId(), event.getReservationId()); + } +} diff --git a/src/main/java/com/catchtable/notification/listener/ReservationVisitedNotificationListener.java b/src/main/java/com/catchtable/notification/listener/ReservationVisitedNotificationListener.java new file mode 100644 index 0000000..d223a8d --- /dev/null +++ b/src/main/java/com/catchtable/notification/listener/ReservationVisitedNotificationListener.java @@ -0,0 +1,50 @@ +package com.catchtable.notification.listener; + +import com.catchtable.global.exception.CustomException; +import com.catchtable.global.exception.ErrorCode; +import com.catchtable.notification.entity.NotificationType; +import com.catchtable.notification.event.ReservationVisitedEvent; +import com.catchtable.notification.service.NotificationService; +import com.catchtable.user.entity.User; +import com.catchtable.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +@Slf4j +@Component +@RequiredArgsConstructor +public class ReservationVisitedNotificationListener { + + private final NotificationService notificationService; + private final UserRepository userRepository; + + @Async + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void handleReservationVisitedEvent(ReservationVisitedEvent event) { + User user = userRepository.findById(event.getUserId()) + .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND)); + + String title = "방문이 완료되었습니다."; + String content = String.format("'%s' 매장 %s %s 방문이 완료되었습니다. 소중한 리뷰를 남겨주세요!", + event.getStoreName(), + event.getRemainDate(), + event.getRemainTime()); + + notificationService.createNotification( + user, + NotificationType.RESERVATION_VISITED, + title, + content, + event.getReservationId() + ); + + log.info("[방문 완료 알림] userId: {}, reservationId: {} 알림 생성 완료", event.getUserId(), event.getReservationId()); + } +} diff --git a/src/main/java/com/catchtable/reservation/repository/ReservationRepository.java b/src/main/java/com/catchtable/reservation/repository/ReservationRepository.java index c550bda..1cd226f 100644 --- a/src/main/java/com/catchtable/reservation/repository/ReservationRepository.java +++ b/src/main/java/com/catchtable/reservation/repository/ReservationRepository.java @@ -26,4 +26,7 @@ List findReminderTargets( @Param("date") LocalDate date, @Param("from") LocalTime from, @Param("to") LocalTime to); + + @Query("SELECT r FROM Reservation r JOIN FETCH r.user u JOIN FETCH r.storeRemain sr JOIN FETCH sr.store s WHERE r.id = :id") + Optional findByIdWithUserAndStoreRemainAndStore(@Param("id") Long id); } diff --git a/src/main/java/com/catchtable/reservation/service/ReservationService.java b/src/main/java/com/catchtable/reservation/service/ReservationService.java index 58ce00f..20c53ec 100644 --- a/src/main/java/com/catchtable/reservation/service/ReservationService.java +++ b/src/main/java/com/catchtable/reservation/service/ReservationService.java @@ -4,6 +4,9 @@ import com.catchtable.coupon.service.CouponService; import com.catchtable.global.exception.CustomException; import com.catchtable.global.exception.ErrorCode; +import com.catchtable.notification.event.ReservationCanceledEvent; +import com.catchtable.notification.event.ReservationConfirmedEvent; +import com.catchtable.notification.event.ReservationVisitedEvent; import com.catchtable.notification.event.VacancyEvent; import com.catchtable.notification.service.VacancyNotificationEmailService; import com.catchtable.remain.entity.StoreRemain; @@ -72,6 +75,16 @@ public ReservationCreateResponseDto create(ReservationCreateRequestDto request) .build(); Reservation saved = reservationRepository.save(reservation); + + // 예약 확정 알림 이벤트 발행 + eventPublisher.publishEvent(new ReservationConfirmedEvent( + saved.getId(), + user.getId(), + storeRemain.getStore().getStoreName(), + storeRemain.getRemainDate().toString(), + storeRemain.getRemainTime().toString() + )); + return new ReservationCreateResponseDto(saved.getId(), saved.getStatus()); } @@ -165,6 +178,15 @@ public void cancelReservation(Long reservationId, Long userId) { // 빈자리 발생 이벤트 발행 (ID만 전달) eventPublisher.publishEvent(new VacancyEvent(storeRemain.getId())); + // 예약 취소 알림 이벤트 발행 + eventPublisher.publishEvent(new ReservationCanceledEvent( + reservation.getId(), + reservation.getUser().getId(), + storeRemain.getStore().getStoreName(), + storeRemain.getRemainDate().toString(), + storeRemain.getRemainTime().toString() + )); + // 쿠폰 반환 if (reservation.getCoupon() != null) { couponService.returnCoupon(reservation.getCoupon().getId()); @@ -234,7 +256,23 @@ public ReservationUpdateResponseDto updateReservation(Long reservationId, Long u @Transactional public void updateReservationStatus(Long reservationId, Long userId, ReservationStatusUpdateRequestDto request) { - Reservation reservation = getActiveReservation(reservationId, userId); + Reservation reservation = reservationRepository.findByIdWithUserAndStoreRemainAndStore(reservationId) + .orElseThrow(() -> new CustomException(ErrorCode.RESERVATION_NOT_FOUND)); + + reservation.validateOwner(userId); + + // 상태 변경 reservation.changeStatus(request.status()); + + // 예약 상태가 VISITED로 변경될 때 이벤트 발행 + if (request.status() == ReservationStatus.VISITED) { + eventPublisher.publishEvent(new ReservationVisitedEvent( + reservation.getId(), + reservation.getUser().getId(), + reservation.getStoreRemain().getStore().getStoreName(), + reservation.getStoreRemain().getRemainDate().toString(), + reservation.getStoreRemain().getRemainTime().toString() + )); + } } } From 7d32c457e2b0de82d6937d902e913ed26a00bf2a Mon Sep 17 00:00:00 2001 From: kimjb Date: Wed, 29 Apr 2026 20:16:56 +0900 Subject: [PATCH 13/30] =?UTF-8?q?Refactor:=20=EB=A7=A4=EC=9E=A5=20?= =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=EC=A1=B0=ED=9A=8C=20=EC=88=98=EC=A0=95,?= =?UTF-8?q?=20=EB=A9=94=EB=89=B4=20=EC=88=98=EC=A0=95=20=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/controller/FileController.java | 14 +++- .../catchtable/file/service/FileService.java | 39 ++++++++- .../catchtable/global/common/SuccessCode.java | 5 +- .../global/exception/ErrorCode.java | 4 + .../menu/controller/MenuController.java | 20 +++-- .../menu/dto/create/MenuCreateRequest.java | 11 +++ .../menu/dto/update/MenuUpdateRequest.java | 6 ++ .../catchtable/menu/service/MenuService.java | 37 ++++++--- .../store/repository/StoreRepository.java | 45 +++++++++-- .../store/service/StoreService.java | 80 ++++++++++++------- .../user/controller/UserController.java | 33 ++++++++ .../user/dto/read/UserResponseDto.java | 21 +++++ .../catchtable/user/service/UserService.java | 24 ++++++ .../vacancy/repository/VacancyRepository.java | 17 ++++ .../vacancy/service/VacancyService.java | 17 ++-- .../service/ReservationCouponTest.java | 2 +- .../store/service/StoreServiceTest.java | 21 ++--- 17 files changed, 314 insertions(+), 82 deletions(-) create mode 100644 src/main/java/com/catchtable/user/controller/UserController.java create mode 100644 src/main/java/com/catchtable/user/dto/read/UserResponseDto.java create mode 100644 src/main/java/com/catchtable/user/service/UserService.java diff --git a/src/main/java/com/catchtable/file/controller/FileController.java b/src/main/java/com/catchtable/file/controller/FileController.java index d3f8c1d..c42aa10 100644 --- a/src/main/java/com/catchtable/file/controller/FileController.java +++ b/src/main/java/com/catchtable/file/controller/FileController.java @@ -13,6 +13,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @@ -25,13 +26,20 @@ public class FileController { private final FileService fileService; - @Operation(summary = "이미지 파일 업로드", description = "이미지 파일을 업로드하고 접근 가능한 URL을 반환합니다.") + @Operation(summary = "이미지 파일 업로드", + description = "이미지 파일을 업로드하고 접근 가능한 URL을 반환합니다. " + + "type=store + storeId → stores/{storeId}/store, " + + "type=menu + storeId → stores/{storeId}/menus 하위에 저장됩니다.") @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity> upload( @Parameter(description = "업로드할 이미지 파일 (jpg, png, webp / 최대 5MB)", required = true) - @RequestPart("file") MultipartFile file + @RequestPart("file") MultipartFile file, + @Parameter(description = "업로드 대상 (store | menu)", example = "store") + @RequestParam(name = "type", defaultValue = "misc") String type, + @Parameter(description = "매장 ID (type=store 또는 type=menu일 때 필수)", example = "1") + @RequestParam(name = "storeId", required = false) Long storeId ) { - FileUploadResponse response = fileService.upload(file); + FileUploadResponse response = fileService.upload(file, type, storeId); return ResponseEntity .status(HttpStatus.CREATED) .body(ApiResponse.success(SuccessCode.FILE_UPLOADED, response)); diff --git a/src/main/java/com/catchtable/file/service/FileService.java b/src/main/java/com/catchtable/file/service/FileService.java index d15dc6f..bd4af9c 100644 --- a/src/main/java/com/catchtable/file/service/FileService.java +++ b/src/main/java/com/catchtable/file/service/FileService.java @@ -23,28 +23,59 @@ public class FileService { private static final Set ALLOWED_CONTENT_TYPES = Set.of( "image/jpeg", "image/png", "image/webp" ); + private static final Set ALLOWED_TYPES = Set.of("store", "menu"); - public FileUploadResponse upload(MultipartFile file) { + public FileUploadResponse upload(MultipartFile file, String type, Long storeId) { validate(file); String extension = extractExtension(file.getOriginalFilename()); String savedFilename = UUID.randomUUID() + "." + extension; + String subPath = computeSubPath(type, storeId); try { - Path uploadPath = Paths.get(UPLOAD_DIR); + Path uploadRoot = Paths.get(UPLOAD_DIR).toAbsolutePath().normalize(); + Path uploadPath = uploadRoot.resolve(subPath).normalize(); + // 경로 트래버설 방지: 최종 경로가 반드시 uploadRoot 하위에 있어야 함 + if (!uploadPath.startsWith(uploadRoot)) { + throw new CustomException(ErrorCode.FILE_UPLOAD_FAILED); + } if (!Files.exists(uploadPath)) { Files.createDirectories(uploadPath); } - Path destination = uploadPath.resolve(savedFilename).toAbsolutePath(); + Path destination = uploadPath.resolve(savedFilename).normalize(); + if (!destination.startsWith(uploadRoot)) { + throw new CustomException(ErrorCode.FILE_UPLOAD_FAILED); + } file.transferTo(destination); } catch (IOException e) { throw new CustomException(ErrorCode.FILE_UPLOAD_FAILED); } - String url = BASE_URL + "/" + UPLOAD_DIR + "/" + savedFilename; + String url = BASE_URL + "/" + UPLOAD_DIR + "/" + subPath + "/" + savedFilename; return FileUploadResponse.of(url); } + /** + * 업로드 대상별 하위 경로 결정 (allowlist 기반) + * - type=store + storeId → stores/{storeId}/store + * - type=menu + storeId → stores/{storeId}/menus + * - 그 외(허용되지 않은 type, storeId 누락) → misc + */ + private String computeSubPath(String type, Long storeId) { + // type이 allowlist 밖이면 임의 경로 생성을 막기 위해 misc로 격리 + String safeType = (type != null && ALLOWED_TYPES.contains(type.toLowerCase())) + ? type.toLowerCase() + : null; + if (storeId == null || safeType == null) { + return "misc"; + } + return switch (safeType) { + case "store" -> "stores/" + storeId + "/store"; + case "menu" -> "stores/" + storeId + "/menus"; + default -> "misc"; + }; + } + private void validate(MultipartFile file) { if (file == null || file.isEmpty()) { throw new CustomException(ErrorCode.FILE_EMPTY); diff --git a/src/main/java/com/catchtable/global/common/SuccessCode.java b/src/main/java/com/catchtable/global/common/SuccessCode.java index 1650d84..b998963 100644 --- a/src/main/java/com/catchtable/global/common/SuccessCode.java +++ b/src/main/java/com/catchtable/global/common/SuccessCode.java @@ -61,7 +61,10 @@ public enum SuccessCode implements ResponseCode { VACANCY_DELETE_SUCCESS(HttpStatus.OK, "빈자리 알림이 삭제되었습니다."), // File - FILE_UPLOADED(HttpStatus.CREATED, "파일이 업로드되었습니다."); + FILE_UPLOADED(HttpStatus.CREATED, "파일이 업로드되었습니다."), + + // User + USER_LOOKUP_SUCCESS(HttpStatus.OK, "사용자 정보를 조회했습니다."); private final HttpStatus httpStatus; private final String message; diff --git a/src/main/java/com/catchtable/global/exception/ErrorCode.java b/src/main/java/com/catchtable/global/exception/ErrorCode.java index 4e965e6..ca0858a 100644 --- a/src/main/java/com/catchtable/global/exception/ErrorCode.java +++ b/src/main/java/com/catchtable/global/exception/ErrorCode.java @@ -38,6 +38,10 @@ public enum ErrorCode implements ResponseCode { // Menu MENU_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 메뉴입니다."), + ADMIN_ONLY_MENU_CREATE(HttpStatus.FORBIDDEN, "관리자만 메뉴를 등록할 수 있습니다."), + ADMIN_ONLY_MENU_UPDATE(HttpStatus.FORBIDDEN, "관리자만 메뉴를 수정할 수 있습니다."), + ADMIN_ONLY_MENU_DELETE(HttpStatus.FORBIDDEN, "관리자만 메뉴를 삭제할 수 있습니다."), + MENU_STORE_MISMATCH(HttpStatus.FORBIDDEN, "해당 매장의 메뉴가 아닙니다."), // Bookmark BOOKMARK_FOLDER_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 폴더입니다."), diff --git a/src/main/java/com/catchtable/menu/controller/MenuController.java b/src/main/java/com/catchtable/menu/controller/MenuController.java index 407d48f..e18dfb3 100644 --- a/src/main/java/com/catchtable/menu/controller/MenuController.java +++ b/src/main/java/com/catchtable/menu/controller/MenuController.java @@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -27,13 +28,14 @@ public class MenuController { private final MenuService menuService; - @Operation(summary = "메뉴 일괄 생성", description = "특정 가게에 메뉴를 한 번에 여러 개 생성합니다.") + @Operation(summary = "메뉴 일괄 생성", description = "특정 가게에 메뉴를 한 번에 여러 개 생성합니다. 관리자 전용.") @PostMapping public ResponseEntity> create( + @RequestHeader("X-User-Id") Long userId, @Parameter(description = "가게 ID", required = true) @PathVariable Long storeId, - @RequestBody MenuCreateRequest request + @Valid @RequestBody MenuCreateRequest request ) { - MenuCreateResponse response = menuService.create(storeId, request); + MenuCreateResponse response = menuService.create(userId, storeId, request); return ResponseEntity .status(HttpStatus.CREATED) .body(ApiResponse.success(SuccessCode.MENU_CREATED, response)); @@ -49,25 +51,27 @@ public ResponseEntity>> getByStoreId( .ok(ApiResponse.success(SuccessCode.MENU_LIST_OK, response)); } - @Operation(summary = "메뉴 수정", description = "특정 메뉴의 이름, 가격, 설명, 이미지를 수정합니다.") + @Operation(summary = "메뉴 수정", description = "특정 메뉴의 이름, 가격, 설명, 이미지를 수정합니다. 관리자 전용 + 매장 소속 검증.") @PatchMapping("/{menuId}") public ResponseEntity> update( + @RequestHeader("X-User-Id") Long userId, @Parameter(description = "가게 ID", required = true) @PathVariable Long storeId, @Parameter(description = "메뉴 ID", required = true) @PathVariable Long menuId, - @RequestBody MenuUpdateRequest request + @Valid @RequestBody MenuUpdateRequest request ) { - MenuUpdateResponse response = menuService.update(menuId, request); + MenuUpdateResponse response = menuService.update(userId, storeId, menuId, request); return ResponseEntity .ok(ApiResponse.success(SuccessCode.MENU_UPDATED, response)); } - @Operation(summary = "메뉴 삭제", description = "특정 메뉴를 소프트 삭제합니다.") + @Operation(summary = "메뉴 삭제", description = "특정 메뉴를 소프트 삭제합니다. 관리자 전용 + 매장 소속 검증.") @DeleteMapping("/{menuId}") public ResponseEntity> delete( + @RequestHeader("X-User-Id") Long userId, @Parameter(description = "가게 ID", required = true) @PathVariable Long storeId, @Parameter(description = "메뉴 ID", required = true) @PathVariable Long menuId ) { - MenuDeleteResponse response = menuService.delete(menuId); + MenuDeleteResponse response = menuService.delete(userId, storeId, menuId); return ResponseEntity .ok(ApiResponse.success(SuccessCode.MENU_DELETED, response)); } diff --git a/src/main/java/com/catchtable/menu/dto/create/MenuCreateRequest.java b/src/main/java/com/catchtable/menu/dto/create/MenuCreateRequest.java index 8d71bec..9f70640 100644 --- a/src/main/java/com/catchtable/menu/dto/create/MenuCreateRequest.java +++ b/src/main/java/com/catchtable/menu/dto/create/MenuCreateRequest.java @@ -1,19 +1,30 @@ package com.catchtable.menu.dto.create; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + import java.util.List; @Schema(description = "메뉴 일괄 생성 요청") public record MenuCreateRequest( @Schema(description = "생성할 메뉴 목록", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "최소 1개 이상의 메뉴가 필요합니다.") + @Valid List menus ) { @Schema(description = "메뉴 항목") public record MenuItemRequest( @Schema(description = "메뉴 이름", example = "파스타", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "메뉴 이름은 필수입니다.") String menuName, @Schema(description = "가격 (원 단위)", example = "15000", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "가격은 필수입니다.") + @Min(value = 0, message = "가격은 0원 이상이어야 합니다.") Integer price, @Schema(description = "메뉴 설명", example = "크림 파스타") diff --git a/src/main/java/com/catchtable/menu/dto/update/MenuUpdateRequest.java b/src/main/java/com/catchtable/menu/dto/update/MenuUpdateRequest.java index b672050..555dc1c 100644 --- a/src/main/java/com/catchtable/menu/dto/update/MenuUpdateRequest.java +++ b/src/main/java/com/catchtable/menu/dto/update/MenuUpdateRequest.java @@ -1,13 +1,19 @@ package com.catchtable.menu.dto.update; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; @Schema(description = "메뉴 수정 요청") public record MenuUpdateRequest( @Schema(description = "메뉴 이름", example = "파스타", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "메뉴 이름은 필수입니다.") String menuName, @Schema(description = "가격 (원 단위)", example = "15000", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "가격은 필수입니다.") + @Min(value = 0, message = "가격은 0원 이상이어야 합니다.") Integer price, @Schema(description = "메뉴 설명", example = "크림 파스타") diff --git a/src/main/java/com/catchtable/menu/service/MenuService.java b/src/main/java/com/catchtable/menu/service/MenuService.java index a5ee4f1..1342fad 100644 --- a/src/main/java/com/catchtable/menu/service/MenuService.java +++ b/src/main/java/com/catchtable/menu/service/MenuService.java @@ -12,6 +12,7 @@ import com.catchtable.menu.repository.MenuRepository; import com.catchtable.store.entity.Store; import com.catchtable.store.repository.StoreRepository; +import com.catchtable.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -25,10 +26,13 @@ public class MenuService { private final MenuRepository menuRepository; private final StoreRepository storeRepository; + private final UserRepository userRepository; - // 메뉴 일괄 생성 + // 메뉴 일괄 생성 (관리자 전용) @Transactional - public MenuCreateResponse create(Long storeId, MenuCreateRequest request) { + public MenuCreateResponse create(Long userId, Long storeId, MenuCreateRequest request) { + userRepository.getAdminOrThrow(userId, ErrorCode.ADMIN_ONLY_MENU_CREATE); + Store store = storeRepository.findByIdAndIsDeletedFalse(storeId) .orElseThrow(() -> new CustomException(ErrorCode.STORE_NOT_FOUND)); @@ -52,21 +56,34 @@ public List getByStoreId(Long storeId) { .toList(); } - // 메뉴 수정 + // 메뉴 수정 (관리자 전용 + 매장 소속 검증) @Transactional - public MenuUpdateResponse update(Long menuId, MenuUpdateRequest request) { - Menu menu = menuRepository.findByIdAndIsDeletedFalse(menuId) - .orElseThrow(() -> new CustomException(ErrorCode.MENU_NOT_FOUND)); + public MenuUpdateResponse update(Long userId, Long storeId, Long menuId, MenuUpdateRequest request) { + userRepository.getAdminOrThrow(userId, ErrorCode.ADMIN_ONLY_MENU_UPDATE); + Menu menu = getMenuOfStoreOrThrow(storeId, menuId); menu.update(request.menuName(), request.description(), request.price(), request.menuImage()); return new MenuUpdateResponse(menuId, "메뉴 수정 완료"); } - // 메뉴 삭제 + // 메뉴 삭제 (관리자 전용 + 매장 소속 검증) @Transactional - public MenuDeleteResponse delete(Long menuId) { - Menu menu = menuRepository.findByIdAndIsDeletedFalse(menuId) - .orElseThrow(() -> new CustomException(ErrorCode.MENU_NOT_FOUND)); + public MenuDeleteResponse delete(Long userId, Long storeId, Long menuId) { + userRepository.getAdminOrThrow(userId, ErrorCode.ADMIN_ONLY_MENU_DELETE); + Menu menu = getMenuOfStoreOrThrow(storeId, menuId); menu.softDelete(); return new MenuDeleteResponse(menuId, "메뉴 삭제 완료"); } + + /** + * menuId 의 메뉴를 조회하고, 해당 메뉴가 path의 storeId 소속인지 검증한다. + * 다른 매장의 menuId를 임의로 조작해 수정/삭제하는 행위를 차단. + */ + private Menu getMenuOfStoreOrThrow(Long storeId, Long menuId) { + Menu menu = menuRepository.findByIdAndIsDeletedFalse(menuId) + .orElseThrow(() -> new CustomException(ErrorCode.MENU_NOT_FOUND)); + if (!menu.getStore().getId().equals(storeId)) { + throw new CustomException(ErrorCode.MENU_STORE_MISMATCH); + } + return menu; + } } diff --git a/src/main/java/com/catchtable/store/repository/StoreRepository.java b/src/main/java/com/catchtable/store/repository/StoreRepository.java index 0beac56..61f3042 100644 --- a/src/main/java/com/catchtable/store/repository/StoreRepository.java +++ b/src/main/java/com/catchtable/store/repository/StoreRepository.java @@ -1,9 +1,9 @@ package com.catchtable.store.repository; -import com.catchtable.store.entity.Category; -import com.catchtable.store.entity.District; import com.catchtable.store.entity.Store; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -11,17 +11,52 @@ import java.util.List; import java.util.Optional; -public interface StoreRepository extends JpaRepository { +public interface StoreRepository extends JpaRepository, JpaSpecificationExecutor { Optional findByIdAndIsDeletedFalse(Long id); List findAllByIsDeletedFalse(); - @Modifying + /** + * 인기 매장 정렬 — averageStar DESC → reviewCount DESC → bookmarkCount DESC → id ASC + * - averageStar는 NULL일 수 있어 COALESCE로 0 처리 + * - 모든 통계 값이 동률일 때 ID 오름차순(=먼저 등록된 순)으로 결정성 보장 + */ + @Query(""" + SELECT s FROM Store s + WHERE s.isDeleted = false + ORDER BY COALESCE(s.averageStar, 0) DESC, + s.reviewCount DESC, + s.bookmarkCount DESC, + s.id ASC + """) + List findPopular(Pageable pageable); + + /** + * 좌표 거리 기반 정렬 (제곱 거리 사용 — sqrt 생략) + * 거리가 같으면 ID 오름차순으로 결정성 보장 + */ + @Query(""" + SELECT s FROM Store s + WHERE s.isDeleted = false + ORDER BY ((s.latitude - :lat) * (s.latitude - :lat) + + (s.longitude - :lon) * (s.longitude - :lon)) ASC, + s.id ASC + """) + List findNearby(@Param("lat") double latitude, + @Param("lon") double longitude, + Pageable pageable); + + /** + * 리뷰 수 증감은 벌크 UPDATE이므로 영속성 컨텍스트와 DB가 일치하도록 + * 호출 전 flush, 호출 후 clear 한다. + * 이로써 같은 트랜잭션 내 후속 findByIdAndIsDeletedFalse() 가 stale 캐시를 반환하지 않는다. + */ + @Modifying(flushAutomatically = true, clearAutomatically = true) @Query("UPDATE Store s SET s.reviewCount = s.reviewCount + 1 WHERE s.id = :storeId") void increaseReviewCount(@Param("storeId") Long storeId); - @Modifying + @Modifying(flushAutomatically = true, clearAutomatically = true) @Query("UPDATE Store s SET s.reviewCount = s.reviewCount - 1 WHERE s.id = :storeId AND s.reviewCount > 0") void decreaseReviewCount(@Param("storeId") Long storeId); } diff --git a/src/main/java/com/catchtable/store/service/StoreService.java b/src/main/java/com/catchtable/store/service/StoreService.java index 14c31e0..81ca7bb 100644 --- a/src/main/java/com/catchtable/store/service/StoreService.java +++ b/src/main/java/com/catchtable/store/service/StoreService.java @@ -18,12 +18,17 @@ import com.catchtable.user.repository.UserRepository; import com.catchtable.global.exception.CustomException; import com.catchtable.global.exception.ErrorCode; +import jakarta.persistence.criteria.Predicate; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; -import java.util.Comparator; +import java.util.ArrayList; import java.util.List; @Service @@ -44,27 +49,32 @@ public StoreCreateResponse createStore(Long userId, StoreCreateRequest request) return StoreCreateResponse.from(saved.getId()); } - // 매장 목록 통합 조회 (이름·카테고리·지역 옵셔널 필터 + 페이지네이션) + /** + * 매장 목록 통합 조회 (이름·카테고리·지역 옵셔널 필터 + DB 페이지네이션 + 인기 정렬) + * Specification 사용으로 PostgreSQL+enum 조합에서 :param IS NULL 회피. + */ @Transactional(readOnly = true) public List getStores(String name, Category category, District district, int page, int size) { String trimmedName = (name == null || name.isBlank()) ? null : name.trim(); - return storeRepository.findAllByIsDeletedFalse().stream() - .filter(s -> trimmedName == null || s.getStoreName().contains(trimmedName)) - .filter(s -> category == null || s.getCategory() == category) - .filter(s -> district == null || s.getDistrict() == district) - .sorted(popularityComparator()) - .skip((long) page * size) - .limit(size) + Specification spec = buildStoreSpec(trimmedName, category, district); + Pageable pageable = PageRequest.of(page, size, popularitySort()); + return storeRepository.findAll(spec, pageable).getContent().stream() .map(StoreListResponse::from) .toList(); } - // 인기 매장 (평균 평점 → 리뷰 수 → 북마크 수 순) + // 인기 매장 (averageStar DESC → reviewCount DESC → bookmarkCount DESC) — DB 정렬 + LIMIT @Transactional(readOnly = true) public List getPopularStores(int limit) { - return storeRepository.findAllByIsDeletedFalse().stream() - .sorted(popularityComparator()) - .limit(limit) + return storeRepository.findPopular(PageRequest.of(0, limit)).stream() + .map(StoreListResponse::from) + .toList(); + } + + // 내 주변 매장 (좌표 거리 정렬 + DB 페이지네이션) + @Transactional(readOnly = true) + public List getNearbyStores(double latitude, double longitude, int page, int size) { + return storeRepository.findNearby(latitude, longitude, PageRequest.of(page, size)).stream() .map(StoreListResponse::from) .toList(); } @@ -72,26 +82,36 @@ public List getPopularStores(int limit) { /** * 매장 인기도 정렬 기준 * 1. 평점 내림차순 → 2. 리뷰 수 내림차순 → 3. 북마크 수 내림차순 + * 4. (타이브레이커) id 오름차순 — 동률 시 먼저 등록된 매장이 위로 오도록 결정성 보장 */ - private Comparator popularityComparator() { - return Comparator - .comparingDouble((Store s) -> s.getAverageStar() != null ? s.getAverageStar() : 0.0) - .thenComparingInt(Store::getReviewCount) - .thenComparingInt(Store::getBookmarkCount) - .reversed(); + private Sort popularitySort() { + return Sort.by( + Sort.Order.desc("averageStar"), + Sort.Order.desc("reviewCount"), + Sort.Order.desc("bookmarkCount"), + Sort.Order.asc("id") + ); } - // 내 주변 매장 (좌표 거리 정렬 + 페이지네이션) - @Transactional(readOnly = true) - public List getNearbyStores(double latitude, double longitude, int page, int size) { - return storeRepository.findAllByIsDeletedFalse().stream() - .sorted(Comparator.comparingDouble(s -> - Math.pow(s.getLatitude() - latitude, 2) + Math.pow(s.getLongitude() - longitude, 2) - )) - .skip((long) page * size) - .limit(size) - .map(StoreListResponse::from) - .toList(); + /** + * 이름(LIKE) + 카테고리/지역(EQ) + isDeleted=false 필터를 Specification으로 조립. + */ + private Specification buildStoreSpec(String name, Category category, District district) { + return (root, query, cb) -> { + List predicates = new ArrayList<>(); + predicates.add(cb.isFalse(root.get("isDeleted"))); + if (name != null) { + predicates.add(cb.like(cb.lower(root.get("storeName")), + "%" + name.toLowerCase() + "%")); + } + if (category != null) { + predicates.add(cb.equal(root.get("category"), category)); + } + if (district != null) { + predicates.add(cb.equal(root.get("district"), district)); + } + return cb.and(predicates.toArray(new Predicate[0])); + }; } // 매장 상세조회 + 예약 가능 시간대 조회 diff --git a/src/main/java/com/catchtable/user/controller/UserController.java b/src/main/java/com/catchtable/user/controller/UserController.java new file mode 100644 index 0000000..6653592 --- /dev/null +++ b/src/main/java/com/catchtable/user/controller/UserController.java @@ -0,0 +1,33 @@ +package com.catchtable.user.controller; + +import com.catchtable.global.common.ApiResponse; +import com.catchtable.global.common.SuccessCode; +import com.catchtable.user.dto.read.UserResponseDto; +import com.catchtable.user.service.UserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "사용자 컨트롤러", description = "사용자 관련 API") +@RestController +@RequestMapping("/api/v1/users") +@RequiredArgsConstructor +public class UserController { + + private final UserService userService; + + @Operation(summary = "내 정보 조회", description = "현재 로그인한 사용자의 정보를 조회합니다.") + @GetMapping("/me") + public ResponseEntity> getMe( + @RequestHeader("X-User-Id") Long userId + ) { + UserResponseDto response = userService.getMe(userId); + return ResponseEntity + .ok(ApiResponse.success(SuccessCode.USER_LOOKUP_SUCCESS, response)); + } +} diff --git a/src/main/java/com/catchtable/user/dto/read/UserResponseDto.java b/src/main/java/com/catchtable/user/dto/read/UserResponseDto.java new file mode 100644 index 0000000..b576987 --- /dev/null +++ b/src/main/java/com/catchtable/user/dto/read/UserResponseDto.java @@ -0,0 +1,21 @@ +package com.catchtable.user.dto.read; + +import com.catchtable.user.entity.User; + +public record UserResponseDto( + Long userId, + String email, + String nickname, + String profileImage, + String role +) { + public static UserResponseDto from(User user) { + return new UserResponseDto( + user.getId(), + user.getEmail(), + user.getNickname(), + user.getProfileImage(), + user.getRole().name() + ); + } +} diff --git a/src/main/java/com/catchtable/user/service/UserService.java b/src/main/java/com/catchtable/user/service/UserService.java new file mode 100644 index 0000000..9337929 --- /dev/null +++ b/src/main/java/com/catchtable/user/service/UserService.java @@ -0,0 +1,24 @@ +package com.catchtable.user.service; + +import com.catchtable.user.dto.read.UserResponseDto; +import com.catchtable.user.entity.User; +import com.catchtable.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class UserService { + + private final UserRepository userRepository; + + /** + * 현재 로그인한 사용자의 정보 조회 (X-User-Id 헤더 기반) + */ + @Transactional(readOnly = true) + public UserResponseDto getMe(Long userId) { + User user = userRepository.getById(userId); + return UserResponseDto.from(user); + } +} diff --git a/src/main/java/com/catchtable/vacancy/repository/VacancyRepository.java b/src/main/java/com/catchtable/vacancy/repository/VacancyRepository.java index f5a7a10..0aa2555 100644 --- a/src/main/java/com/catchtable/vacancy/repository/VacancyRepository.java +++ b/src/main/java/com/catchtable/vacancy/repository/VacancyRepository.java @@ -3,6 +3,8 @@ import com.catchtable.vacancy.entity.Vacancy; import com.catchtable.vacancy.entity.VacancyStatus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.List; @@ -12,5 +14,20 @@ public interface VacancyRepository extends JpaRepository { List findByUserIdAndIsDeletedFalse(Long userId); + /** + * 사용자 알림 목록 조회용 — Vacancy + StoreRemain + Store를 단일 쿼리로 가져온다. + * Vacancy.remainId(Long FK)에는 직접 매핑이 없으므로, StoreRemain을 JOIN으로 묶고 + * StoreRemain.store까지 JOIN FETCH 한다. + */ + @Query(""" + SELECT v, sr, s + FROM Vacancy v + JOIN StoreRemain sr ON sr.id = v.remainId + JOIN sr.store s + WHERE v.userId = :userId + AND v.isDeleted = false + """) + List findMyListWithStore(@Param("userId") Long userId); + List findByRemainIdAndStatusAndIsDeletedFalse(Long remainId, VacancyStatus status); } diff --git a/src/main/java/com/catchtable/vacancy/service/VacancyService.java b/src/main/java/com/catchtable/vacancy/service/VacancyService.java index 1a6c9dd..4ff507c 100644 --- a/src/main/java/com/catchtable/vacancy/service/VacancyService.java +++ b/src/main/java/com/catchtable/vacancy/service/VacancyService.java @@ -41,17 +41,12 @@ public Long register(Long userId, Long remainId) { @Transactional(readOnly = true) public List getMyList(Long userId) { - // TODO: N+1 문제, vacancy N개 조회 시 storeRemain N번 + store N번 추가 쿼리 발생. - // 나중에 인증 연동 시 @Query로 JOIN 처리 필요함. - return vacancyRepository.findByUserIdAndIsDeletedFalse(userId) - .stream() - .map(vacancy -> { - StoreRemain storeRemain = storeRemainRepository.findById(vacancy.getRemainId()) - .orElseThrow(() -> new CustomException(ErrorCode.REMAIN_NOT_FOUND)); - Store store = storeRepository.findById(storeRemain.getStore().getId()) - .orElseThrow(() -> new CustomException(ErrorCode.STORE_NOT_FOUND)); - return new VacancyListResponse(vacancy, storeRemain, store); - }) + // 단일 쿼리로 Vacancy + StoreRemain + Store를 함께 조회하여 N+1 제거 + return vacancyRepository.findMyListWithStore(userId).stream() + .map(row -> new VacancyListResponse( + (Vacancy) row[0], + (StoreRemain) row[1], + (Store) row[2])) .toList(); } diff --git a/src/test/java/com/catchtable/reservation/service/ReservationCouponTest.java b/src/test/java/com/catchtable/reservation/service/ReservationCouponTest.java index aca5e84..68e8f67 100644 --- a/src/test/java/com/catchtable/reservation/service/ReservationCouponTest.java +++ b/src/test/java/com/catchtable/reservation/service/ReservationCouponTest.java @@ -219,7 +219,7 @@ void updateReservationReturnsCoupon() { return r; }); - var request = new com.catchtable.reservation.dto.update.ReservationUpdateRequestDto(2L, 2); + var request = new com.catchtable.reservation.dto.update.ReservationUpdateRequestDto(2L, 2, null); reservationService.updateReservation(1L, 1L, request); assertThat(oldReservation.getStatus()).isEqualTo(ReservationStatus.CANCELED); diff --git a/src/test/java/com/catchtable/store/service/StoreServiceTest.java b/src/test/java/com/catchtable/store/service/StoreServiceTest.java index 17c8a63..23d1fc0 100644 --- a/src/test/java/com/catchtable/store/service/StoreServiceTest.java +++ b/src/test/java/com/catchtable/store/service/StoreServiceTest.java @@ -21,6 +21,8 @@ import java.util.Optional; import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; @ExtendWith(MockitoExtension.class) @@ -80,7 +82,8 @@ private User createNormalUser() { @Test @DisplayName("매장 등록 실패 - 일반 사용자 권한 없음") void createStoreFailNotAdmin() { - given(userRepository.findById(2L)).willReturn(Optional.of(createNormalUser())); + given(userRepository.getAdminOrThrow(eq(2L), any(ErrorCode.class))) + .willThrow(new CustomException(ErrorCode.ADMIN_ONLY_STORE_CREATE)); var request = new StoreCreateRequest("모수 서울", null, Category.WESTERN, 37.534, 126.993, "서울 용산구", District.YONGSAN, 10, "11:00", "22:00"); @@ -96,9 +99,9 @@ void createStoreFailNotAdmin() { @Test @DisplayName("매장 상태 변경 성공 - ACTIVE → REST") void updateStoreStatusToRest() { - given(userRepository.findById(1L)).willReturn(Optional.of(createAdminUser())); + given(userRepository.getAdminOrThrow(eq(1L), any(ErrorCode.class))).willReturn(createAdminUser()); Store store = createTestStore(1L, "모수 서울", StoreStatus.ACTIVE, false); - given(storeRepository.findById(1L)).willReturn(Optional.of(store)); + given(storeRepository.findByIdAndIsDeletedFalse(1L)).willReturn(Optional.of(store)); var request = new StoreStatusUpdateRequest(StoreStatus.REST); @@ -110,9 +113,9 @@ void updateStoreStatusToRest() { @Test @DisplayName("매장 상태 변경 성공 - ACTIVE → INACTIVE (soft delete)") void updateStoreStatusToInactive() { - given(userRepository.findById(1L)).willReturn(Optional.of(createAdminUser())); + given(userRepository.getAdminOrThrow(eq(1L), any(ErrorCode.class))).willReturn(createAdminUser()); Store store = createTestStore(1L, "모수 서울", StoreStatus.ACTIVE, false); - given(storeRepository.findById(1L)).willReturn(Optional.of(store)); + given(storeRepository.findByIdAndIsDeletedFalse(1L)).willReturn(Optional.of(store)); var request = new StoreStatusUpdateRequest(StoreStatus.INACTIVE); @@ -125,9 +128,9 @@ void updateStoreStatusToInactive() { @Test @DisplayName("매장 상태 변경 실패 - INACTIVE 상태에서 변경 불가") void updateStoreStatusFailFromInactive() { - given(userRepository.findById(1L)).willReturn(Optional.of(createAdminUser())); + given(userRepository.getAdminOrThrow(eq(1L), any(ErrorCode.class))).willReturn(createAdminUser()); Store store = createTestStore(1L, "모수 서울", StoreStatus.INACTIVE, true); - given(storeRepository.findById(1L)).willReturn(Optional.of(store)); + given(storeRepository.findByIdAndIsDeletedFalse(1L)).willReturn(Optional.of(store)); var request = new StoreStatusUpdateRequest(StoreStatus.ACTIVE); @@ -140,9 +143,9 @@ void updateStoreStatusFailFromInactive() { @Test @DisplayName("매장 상태 변경 실패 - 동일 상태로 변경") void updateStoreStatusFailSameStatus() { - given(userRepository.findById(1L)).willReturn(Optional.of(createAdminUser())); + given(userRepository.getAdminOrThrow(eq(1L), any(ErrorCode.class))).willReturn(createAdminUser()); Store store = createTestStore(1L, "모수 서울", StoreStatus.ACTIVE, false); - given(storeRepository.findById(1L)).willReturn(Optional.of(store)); + given(storeRepository.findByIdAndIsDeletedFalse(1L)).willReturn(Optional.of(store)); var request = new StoreStatusUpdateRequest(StoreStatus.ACTIVE); From ddf27e3f591719881de1cdde20cf0e1404501bcd Mon Sep 17 00:00:00 2001 From: kimjb Date: Thu, 30 Apr 2026 10:51:19 +0900 Subject: [PATCH 14/30] =?UTF-8?q?Refactor:=20=EC=A7=80=EB=8F=84=20?= =?UTF-8?q?=EB=B6=81=EB=A7=88=ED=81=AC=20=EB=AA=A9=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/init-data.sql | 5 ++-- .../bookmark/read/BookmarkListResponse.java | 4 ++- .../create/BookmarkFolderCreateRequest.java | 3 +- .../read/BookmarkFolderListResponse.java | 4 ++- .../update/BookmarkFolderUpdateRequest.java | 6 ++-- .../update/BookmarkFolderUpdateResponse.java | 5 ++-- .../bookmark/entity/BookmarkFolder.java | 16 ++++++++++ .../bookmark/service/BookmarkService.java | 29 +++++++++++++++---- .../store/controller/StoreController.java | 20 +++++++++++++ .../store/repository/StoreRepository.java | 22 ++++++++++++++ .../store/service/StoreService.java | 18 ++++++++++++ 11 files changed, 117 insertions(+), 15 deletions(-) diff --git a/data/init-data.sql b/data/init-data.sql index b76f915..1f225b2 100644 --- a/data/init-data.sql +++ b/data/init-data.sql @@ -23,13 +23,14 @@ CREATE TABLE IF NOT EXISTS bookmark_folders ( user_id BIGINT NOT NULL REFERENCES users (id), folder_name VARCHAR(255) NOT NULL, folder_type VARCHAR(255) NOT NULL, + color VARCHAR(20) NOT NULL DEFAULT '#F97316', created_at TIMESTAMP NOT NULL, updated_at TIMESTAMP, is_deleted BOOLEAN NOT NULL DEFAULT false ); -INSERT INTO bookmark_folders (user_id, folder_name, folder_type, is_deleted, created_at) -SELECT id, '기본 폴더', 'DEFAULT', false, NOW() +INSERT INTO bookmark_folders (user_id, folder_name, folder_type, color, is_deleted, created_at) +SELECT id, '기본 폴더', 'DEFAULT', '#F97316', false, NOW() FROM users; CREATE TABLE IF NOT EXISTS stores ( diff --git a/src/main/java/com/catchtable/bookmark/dto/bookmark/read/BookmarkListResponse.java b/src/main/java/com/catchtable/bookmark/dto/bookmark/read/BookmarkListResponse.java index 0e35afd..2fe3175 100644 --- a/src/main/java/com/catchtable/bookmark/dto/bookmark/read/BookmarkListResponse.java +++ b/src/main/java/com/catchtable/bookmark/dto/bookmark/read/BookmarkListResponse.java @@ -10,6 +10,8 @@ public record BookmarkListResponse( @Schema(description = "매장 이름", example = "진진") String storeName, @Schema(description = "매장 이미지", example = "jinjin.jpg") String storeImage, @Schema(description = "카테고리") Category category, - @Schema(description = "주소", example = "서울시 강남구") String address + @Schema(description = "주소", example = "서울시 강남구") String address, + @Schema(description = "위도", example = "37.4979") Double latitude, + @Schema(description = "경도", example = "127.0276") Double longitude ) { } diff --git a/src/main/java/com/catchtable/bookmark/dto/folder/create/BookmarkFolderCreateRequest.java b/src/main/java/com/catchtable/bookmark/dto/folder/create/BookmarkFolderCreateRequest.java index 4a64d16..b9f61e5 100644 --- a/src/main/java/com/catchtable/bookmark/dto/folder/create/BookmarkFolderCreateRequest.java +++ b/src/main/java/com/catchtable/bookmark/dto/folder/create/BookmarkFolderCreateRequest.java @@ -5,6 +5,7 @@ @Schema(description = "북마크 폴더 생성 요청") public record BookmarkFolderCreateRequest( - @NotBlank @Schema(description = "폴더 이름", example = "가고 싶은 맛집") String folderName + @NotBlank @Schema(description = "폴더 이름", example = "가고 싶은 맛집") String folderName, + @Schema(description = "폴더 색상 (HEX)", example = "#F97316") String color ) { } diff --git a/src/main/java/com/catchtable/bookmark/dto/folder/read/BookmarkFolderListResponse.java b/src/main/java/com/catchtable/bookmark/dto/folder/read/BookmarkFolderListResponse.java index f7ffd74..46a10a5 100644 --- a/src/main/java/com/catchtable/bookmark/dto/folder/read/BookmarkFolderListResponse.java +++ b/src/main/java/com/catchtable/bookmark/dto/folder/read/BookmarkFolderListResponse.java @@ -5,6 +5,8 @@ @Schema(description = "북마크 폴더 목록 조회 응답") public record BookmarkFolderListResponse( @Schema(description = "폴더 ID", example = "1") Long folderId, - @Schema(description = "폴더 이름", example = "가고 싶은 맛집") String folderName + @Schema(description = "폴더 이름", example = "가고 싶은 맛집") String folderName, + @Schema(description = "폴더 색상 (HEX)", example = "#F97316") String color, + @Schema(description = "폴더 타입 (DEFAULT | CUSTOM)", example = "CUSTOM") String folderType ) { } diff --git a/src/main/java/com/catchtable/bookmark/dto/folder/update/BookmarkFolderUpdateRequest.java b/src/main/java/com/catchtable/bookmark/dto/folder/update/BookmarkFolderUpdateRequest.java index baa7694..abba3d0 100644 --- a/src/main/java/com/catchtable/bookmark/dto/folder/update/BookmarkFolderUpdateRequest.java +++ b/src/main/java/com/catchtable/bookmark/dto/folder/update/BookmarkFolderUpdateRequest.java @@ -1,10 +1,10 @@ package com.catchtable.bookmark.dto.folder.update; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotBlank; -@Schema(description = "북마크 폴더 이름 수정 요청") +@Schema(description = "북마크 폴더 수정 요청 — 이름·색상은 각각 선택적으로 갱신 가능") public record BookmarkFolderUpdateRequest( - @NotBlank @Schema(description = "변경할 폴더 이름", example = "자주 가는 맛집") String folderName + @Schema(description = "변경할 폴더 이름", example = "자주 가는 맛집") String folderName, + @Schema(description = "변경할 폴더 색상 (HEX)", example = "#3B82F6") String color ) { } diff --git a/src/main/java/com/catchtable/bookmark/dto/folder/update/BookmarkFolderUpdateResponse.java b/src/main/java/com/catchtable/bookmark/dto/folder/update/BookmarkFolderUpdateResponse.java index cb7d799..d9d3574 100644 --- a/src/main/java/com/catchtable/bookmark/dto/folder/update/BookmarkFolderUpdateResponse.java +++ b/src/main/java/com/catchtable/bookmark/dto/folder/update/BookmarkFolderUpdateResponse.java @@ -2,9 +2,10 @@ import io.swagger.v3.oas.annotations.media.Schema; -@Schema(description = "북마크 폴더 이름 수정 응답") +@Schema(description = "북마크 폴더 수정 응답") public record BookmarkFolderUpdateResponse( @Schema(description = "수정된 폴더 ID", example = "1") Long folderId, - @Schema(description = "수정된 폴더 이름", example = "자주 가는 맛집") String folderName + @Schema(description = "수정된 폴더 이름", example = "자주 가는 맛집") String folderName, + @Schema(description = "수정된 폴더 색상 (HEX)", example = "#3B82F6") String color ) { } diff --git a/src/main/java/com/catchtable/bookmark/entity/BookmarkFolder.java b/src/main/java/com/catchtable/bookmark/entity/BookmarkFolder.java index 0c02c97..540307c 100644 --- a/src/main/java/com/catchtable/bookmark/entity/BookmarkFolder.java +++ b/src/main/java/com/catchtable/bookmark/entity/BookmarkFolder.java @@ -33,6 +33,14 @@ public class BookmarkFolder { @Column(name = "folder_type", nullable = false) private FolderType folderType; + /** + * 폴더 표시 색상 (HEX). 기본값은 주황색. + * 무지개 팔레트(빨/주/노/초/파/남/보 등)를 프론트가 골라서 전달한다. + */ + @Column(name = "color", nullable = false, length = 20) + @Builder.Default + private String color = "#F97316"; + @CreationTimestamp @Column(name = "created_at", nullable = false, updatable = false) private LocalDateTime createdAt; @@ -55,6 +63,14 @@ public void updateName(String folderName) { this.folderName = folderName; } + /** + * 폴더 이름·색상을 한 번에 갱신. null인 항목은 그대로 둔다. + */ + public void update(String folderName, String color) { + if (folderName != null) this.folderName = folderName; + if (color != null) this.color = color; + } + public void softDelete() { this.isDeleted = true; } diff --git a/src/main/java/com/catchtable/bookmark/service/BookmarkService.java b/src/main/java/com/catchtable/bookmark/service/BookmarkService.java index bb7e211..a66f87f 100644 --- a/src/main/java/com/catchtable/bookmark/service/BookmarkService.java +++ b/src/main/java/com/catchtable/bookmark/service/BookmarkService.java @@ -36,15 +36,22 @@ public class BookmarkService { private final UserRepository userRepository; private final StoreRepository storeRepository; + private static final String DEFAULT_FOLDER_COLOR = "#F97316"; + // 북마크 폴더 생성 @Transactional public BookmarkFolderCreateResponse createFolder(Long userId, BookmarkFolderCreateRequest request) { User user = userRepository.getById(userId); + String color = (request.color() == null || request.color().isBlank()) + ? DEFAULT_FOLDER_COLOR + : request.color(); + BookmarkFolder folder = BookmarkFolder.builder() .user(user) .folderName(request.folderName()) .folderType(FolderType.CUSTOM) + .color(color) .build(); BookmarkFolder saved = bookmarkFolderRepository.save(folder); @@ -56,7 +63,11 @@ public BookmarkFolderCreateResponse createFolder(Long userId, BookmarkFolderCrea public List getFolders(Long userId) { return bookmarkFolderRepository.findByUserIdAndIsDeletedFalse(userId) .stream() - .map(f -> new BookmarkFolderListResponse(f.getId(), f.getFolderName())) + .map(f -> new BookmarkFolderListResponse( + f.getId(), + f.getFolderName(), + f.getColor(), + f.getFolderType().name())) .toList(); } @@ -70,13 +81,13 @@ private BookmarkFolder getEditableFolder(Long userId, Long folderId) { return folder; } - // 북마크 폴더 이름 수정 + // 북마크 폴더 이름·색상 수정 @Transactional public BookmarkFolderUpdateResponse updateFolder(Long userId, Long folderId, BookmarkFolderUpdateRequest request) { BookmarkFolder folder = getEditableFolder(userId, folderId); - folder.updateName(request.folderName()); - return new BookmarkFolderUpdateResponse(folder.getId(), folder.getFolderName()); + folder.update(request.folderName(), request.color()); + return new BookmarkFolderUpdateResponse(folder.getId(), folder.getFolderName(), folder.getColor()); } // 북마크 폴더 삭제 @@ -127,7 +138,15 @@ public List getBookmarks(Long userId, Long folderId) { return bookmarkRepository.findByFolderIdAndIsDeletedFalse(folderId) .stream() .filter(b -> !b.getStore().getIsDeleted()) - .map(b -> new BookmarkListResponse(b.getId(), b.getStore().getId(), b.getStore().getStoreName(), b.getStore().getStoreImage(), b.getStore().getCategory(), b.getStore().getAddress())) + .map(b -> new BookmarkListResponse( + b.getId(), + b.getStore().getId(), + b.getStore().getStoreName(), + b.getStore().getStoreImage(), + b.getStore().getCategory(), + b.getStore().getAddress(), + b.getStore().getLatitude(), + b.getStore().getLongitude())) .toList(); } diff --git a/src/main/java/com/catchtable/store/controller/StoreController.java b/src/main/java/com/catchtable/store/controller/StoreController.java index 644ecc4..27c4583 100644 --- a/src/main/java/com/catchtable/store/controller/StoreController.java +++ b/src/main/java/com/catchtable/store/controller/StoreController.java @@ -69,6 +69,26 @@ public ResponseEntity>> getNearbyStores( .ok(ApiResponse.success(SuccessCode.STORE_LIST_OK, stores)); } + /** + * 지도 화면 영역(bounding box) 안의 매장 조회. + * 줌/팬 시 호출되어 현재 화면에 보이는 매장만 마커로 그린다. + * limit는 줌 아웃으로 전국이 잡혀도 응답이 폭주하지 않도록 상한선을 둔다. + */ + @GetMapping("/in-bounds") + public ResponseEntity>> getStoresInBounds( + @RequestParam Double minLat, + @RequestParam Double maxLat, + @RequestParam Double minLng, + @RequestParam Double maxLng, + @RequestParam(required = false) Double centerLat, + @RequestParam(required = false) Double centerLng, + @RequestParam(defaultValue = "1000") int limit) { + List stores = storeService.getStoresInBounds( + minLat, maxLat, minLng, maxLng, centerLat, centerLng, limit); + return ResponseEntity + .ok(ApiResponse.success(SuccessCode.STORE_LIST_OK, stores)); + } + @GetMapping("/{storeId}") public ResponseEntity> getStore( @PathVariable Long storeId) { diff --git a/src/main/java/com/catchtable/store/repository/StoreRepository.java b/src/main/java/com/catchtable/store/repository/StoreRepository.java index 61f3042..db4a360 100644 --- a/src/main/java/com/catchtable/store/repository/StoreRepository.java +++ b/src/main/java/com/catchtable/store/repository/StoreRepository.java @@ -47,6 +47,28 @@ List findNearby(@Param("lat") double latitude, @Param("lon") double longitude, Pageable pageable); + /** + * 지도 화면 영역(bounding box) 안의 매장을 화면 중심에서 가까운 순서로 검색. + * limit를 넘기면 멀리 있는 매장이 잘려나가므로, 분포가 화면 중앙 주변에 균등하게 모인다. + * 거리는 sqrt 없이 제곱 거리로 정렬해도 결과 순서는 동일. + */ + @Query(""" + SELECT s FROM Store s + WHERE s.isDeleted = false + AND s.latitude BETWEEN :minLat AND :maxLat + AND s.longitude BETWEEN :minLng AND :maxLng + ORDER BY ((s.latitude - :centerLat) * (s.latitude - :centerLat) + + (s.longitude - :centerLng) * (s.longitude - :centerLng)) ASC, + s.id ASC + """) + List findInBounds(@Param("minLat") double minLat, + @Param("maxLat") double maxLat, + @Param("minLng") double minLng, + @Param("maxLng") double maxLng, + @Param("centerLat") double centerLat, + @Param("centerLng") double centerLng, + Pageable pageable); + /** * 리뷰 수 증감은 벌크 UPDATE이므로 영속성 컨텍스트와 DB가 일치하도록 * 호출 전 flush, 호출 후 clear 한다. diff --git a/src/main/java/com/catchtable/store/service/StoreService.java b/src/main/java/com/catchtable/store/service/StoreService.java index 81ca7bb..b42eed4 100644 --- a/src/main/java/com/catchtable/store/service/StoreService.java +++ b/src/main/java/com/catchtable/store/service/StoreService.java @@ -79,6 +79,24 @@ public List getNearbyStores(double latitude, double longitude .toList(); } + /** + * 지도 화면 영역 안의 매장을 화면 중심에서 가까운 순서로 조회. + * limit를 넘으면 가장 먼 매장이 잘려나가므로 화면 중앙 주변에 마커가 균등하게 분포한다. + * 화면 중심 좌표가 누락되면 영역의 기하 중심을 자동 계산해 사용한다. + */ + @Transactional(readOnly = true) + public List getStoresInBounds( + double minLat, double maxLat, double minLng, double maxLng, + Double centerLat, Double centerLng, int limit) { + double cLat = centerLat != null ? centerLat : (minLat + maxLat) / 2.0; + double cLng = centerLng != null ? centerLng : (minLng + maxLng) / 2.0; + return storeRepository + .findInBounds(minLat, maxLat, minLng, maxLng, cLat, cLng, PageRequest.of(0, limit)) + .stream() + .map(StoreListResponse::from) + .toList(); + } + /** * 매장 인기도 정렬 기준 * 1. 평점 내림차순 → 2. 리뷰 수 내림차순 → 3. 북마크 수 내림차순 From 1674039a169f53f9518752bcafb932e9786fb64d Mon Sep 17 00:00:00 2001 From: silkair Date: Thu, 30 Apr 2026 15:38:11 +0900 Subject: [PATCH 15/30] =?UTF-8?q?feat=20:=20=EC=95=8C=EB=A6=BC=20=EB=AA=A8?= =?UTF-8?q?=EB=91=90=20=EC=9D=BD=EC=9D=8C=20=EA=B5=AC=C3=AD=C2=96=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/catchtable/global/common/SuccessCode.java | 1 + .../notification/controller/NotificationController.java | 6 ++++++ .../notification/repository/NotificationRepository.java | 8 ++++++++ .../notification/service/NotificationService.java | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/src/main/java/com/catchtable/global/common/SuccessCode.java b/src/main/java/com/catchtable/global/common/SuccessCode.java index 6cd39b9..b2c94b5 100644 --- a/src/main/java/com/catchtable/global/common/SuccessCode.java +++ b/src/main/java/com/catchtable/global/common/SuccessCode.java @@ -64,6 +64,7 @@ public enum SuccessCode implements ResponseCode { NOTIFICATION_LOOKUP_SUCCESS(HttpStatus.OK, "알림 목록을 성공적으로 조회했습니다."), NOTIFICATION_UNREAD_COUNT_SUCCESS(HttpStatus.OK, "안 읽은 알림 개수를 조회했습니다."), NOTIFICATION_READ_SUCCESS(HttpStatus.OK, "알림을 읽음 처리했습니다."), + NOTIFICATION_READ_ALL_SUCCESS(HttpStatus.OK, "모든 알림을 읽음 처리했습니다."), NOTIFICATION_DELETE_SUCCESS(HttpStatus.OK, "알림을 삭제했습니다."); private final HttpStatus httpStatus; diff --git a/src/main/java/com/catchtable/notification/controller/NotificationController.java b/src/main/java/com/catchtable/notification/controller/NotificationController.java index a1fa665..4e2067c 100644 --- a/src/main/java/com/catchtable/notification/controller/NotificationController.java +++ b/src/main/java/com/catchtable/notification/controller/NotificationController.java @@ -43,6 +43,12 @@ public ResponseEntity> markAsRead( return ResponseEntity.ok(ApiResponse.success(SuccessCode.NOTIFICATION_READ_SUCCESS, null)); } + @PatchMapping("/read-all") + public ResponseEntity> markAllAsRead(@RequestParam Long userId) { + notificationService.markAllAsRead(userId); + return ResponseEntity.ok(ApiResponse.success(SuccessCode.NOTIFICATION_READ_ALL_SUCCESS, null)); + } + @DeleteMapping("/{notificationId}") public ResponseEntity> deleteNotification( @PathVariable Long notificationId, diff --git a/src/main/java/com/catchtable/notification/repository/NotificationRepository.java b/src/main/java/com/catchtable/notification/repository/NotificationRepository.java index 993b9b9..47c0f00 100644 --- a/src/main/java/com/catchtable/notification/repository/NotificationRepository.java +++ b/src/main/java/com/catchtable/notification/repository/NotificationRepository.java @@ -4,6 +4,9 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface NotificationRepository extends JpaRepository { @@ -12,4 +15,9 @@ public interface NotificationRepository extends JpaRepository Date: Fri, 1 May 2026 09:57:14 +0900 Subject: [PATCH 16/30] =?UTF-8?q?Fix:=20=EC=98=88=EC=95=BD=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EC=8B=9C=20=EC=B7=A8=EC=86=8C=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=B3=80=EA=B2=BD=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/NotificationController.java | 10 +- .../dto/read/NotificationListResponse.java | 4 +- .../notification/entity/NotificationType.java | 1 + .../event/ReservationChangedEvent.java | 16 ++ ...eservationChangedNotificationListener.java | 53 ++++ .../service/NotificationService.java | 22 +- .../controller/ReservationController.java | 13 +- .../create/ReservationCreateRequestDto.java | 8 +- .../reservation/entity/ReservationStatus.java | 3 +- .../service/ReservationService.java | 250 +++++++++--------- .../vacancy/controller/VacancyController.java | 9 +- .../dto/create/VacancyRegisterRequest.java | 3 - .../coupon/service/CouponServiceTest.java | 12 +- .../controller/ReservationControllerTest.java | 12 +- .../service/ReservationCouponTest.java | 18 +- 15 files changed, 260 insertions(+), 174 deletions(-) create mode 100644 src/main/java/com/catchtable/notification/event/ReservationChangedEvent.java create mode 100644 src/main/java/com/catchtable/notification/listener/ReservationChangedNotificationListener.java diff --git a/src/main/java/com/catchtable/notification/controller/NotificationController.java b/src/main/java/com/catchtable/notification/controller/NotificationController.java index 4e2067c..900ac17 100644 --- a/src/main/java/com/catchtable/notification/controller/NotificationController.java +++ b/src/main/java/com/catchtable/notification/controller/NotificationController.java @@ -22,14 +22,14 @@ public class NotificationController { @GetMapping public ResponseEntity>> getMyNotifications( - @RequestParam Long userId, + @RequestHeader("X-User-Id") Long userId, @ParameterObject @PageableDefault(size = 20, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable) { Page response = notificationService.getMyNotifications(userId, pageable); return ResponseEntity.ok(ApiResponse.success(SuccessCode.NOTIFICATION_LOOKUP_SUCCESS, response)); } @GetMapping("/unread-count") - public ResponseEntity> getUnreadCount(@RequestParam Long userId) { + public ResponseEntity> getUnreadCount(@RequestHeader("X-User-Id") Long userId) { long count = notificationService.getUnreadCount(userId); return ResponseEntity.ok(ApiResponse.success(SuccessCode.NOTIFICATION_UNREAD_COUNT_SUCCESS, count)); } @@ -37,14 +37,14 @@ public ResponseEntity> getUnreadCount(@RequestParam Long userI @PatchMapping("/{notificationId}/read") public ResponseEntity> markAsRead( @PathVariable Long notificationId, - @RequestParam Long userId) { + @RequestHeader("X-User-Id") Long userId) { notificationService.markAsRead(notificationId, userId); return ResponseEntity.ok(ApiResponse.success(SuccessCode.NOTIFICATION_READ_SUCCESS, null)); } @PatchMapping("/read-all") - public ResponseEntity> markAllAsRead(@RequestParam Long userId) { + public ResponseEntity> markAllAsRead(@RequestHeader("X-User-Id") Long userId) { notificationService.markAllAsRead(userId); return ResponseEntity.ok(ApiResponse.success(SuccessCode.NOTIFICATION_READ_ALL_SUCCESS, null)); } @@ -52,7 +52,7 @@ public ResponseEntity> markAllAsRead(@RequestParam Long userId @DeleteMapping("/{notificationId}") public ResponseEntity> deleteNotification( @PathVariable Long notificationId, - @RequestParam Long userId) { + @RequestHeader("X-User-Id") Long userId) { notificationService.deleteNotification(notificationId, userId); return ResponseEntity.ok(ApiResponse.success(SuccessCode.NOTIFICATION_DELETE_SUCCESS, null)); diff --git a/src/main/java/com/catchtable/notification/dto/read/NotificationListResponse.java b/src/main/java/com/catchtable/notification/dto/read/NotificationListResponse.java index 2a853a4..cf24ebc 100644 --- a/src/main/java/com/catchtable/notification/dto/read/NotificationListResponse.java +++ b/src/main/java/com/catchtable/notification/dto/read/NotificationListResponse.java @@ -14,15 +14,17 @@ public class NotificationListResponse { private final String title; private final String content; private final Long relatedItemId; + private final String storeName; private final boolean isRead; private final LocalDateTime createdAt; - public NotificationListResponse(Notification notification) { + public NotificationListResponse(Notification notification, String storeName) { this.notificationId = notification.getId(); this.type = notification.getType(); this.title = notification.getTitle(); this.content = notification.getContent(); this.relatedItemId = notification.getRelatedItemId(); + this.storeName = storeName; this.isRead = notification.isRead(); this.createdAt = notification.getCreatedAt(); } diff --git a/src/main/java/com/catchtable/notification/entity/NotificationType.java b/src/main/java/com/catchtable/notification/entity/NotificationType.java index 1ec48a2..d5c7b24 100644 --- a/src/main/java/com/catchtable/notification/entity/NotificationType.java +++ b/src/main/java/com/catchtable/notification/entity/NotificationType.java @@ -4,6 +4,7 @@ public enum NotificationType { VACANCY, // 빈자리 알림 RESERVATION_CONFIRMED, // 예약 확정 RESERVATION_CANCELED, // 예약 취소 + RESERVATION_CHANGED, // 예약 변경 RESERVATION_VISITED, // 방문 완료 RESERVATION_REMINDER // 예약 리마인더 } diff --git a/src/main/java/com/catchtable/notification/event/ReservationChangedEvent.java b/src/main/java/com/catchtable/notification/event/ReservationChangedEvent.java new file mode 100644 index 0000000..89be88a --- /dev/null +++ b/src/main/java/com/catchtable/notification/event/ReservationChangedEvent.java @@ -0,0 +1,16 @@ +package com.catchtable.notification.event; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class ReservationChangedEvent { + private final Long newReservationId; + private final Long userId; + private final String storeName; + private final String oldRemainDate; + private final String oldRemainTime; + private final String newRemainDate; + private final String newRemainTime; +} diff --git a/src/main/java/com/catchtable/notification/listener/ReservationChangedNotificationListener.java b/src/main/java/com/catchtable/notification/listener/ReservationChangedNotificationListener.java new file mode 100644 index 0000000..aae89f8 --- /dev/null +++ b/src/main/java/com/catchtable/notification/listener/ReservationChangedNotificationListener.java @@ -0,0 +1,53 @@ +package com.catchtable.notification.listener; + +import com.catchtable.global.exception.CustomException; +import com.catchtable.global.exception.ErrorCode; +import com.catchtable.notification.entity.NotificationType; +import com.catchtable.notification.event.ReservationChangedEvent; +import com.catchtable.notification.service.NotificationService; +import com.catchtable.user.entity.User; +import com.catchtable.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +@Slf4j +@Component +@RequiredArgsConstructor +public class ReservationChangedNotificationListener { + + private final NotificationService notificationService; + private final UserRepository userRepository; + + @Async + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void handleReservationChangedEvent(ReservationChangedEvent event) { + User user = userRepository.findById(event.getUserId()) + .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND)); + + String title = "예약이 변경되었습니다."; + String content = String.format("'%s' 매장 예약이 %s %s에서 %s %s로 변경되었습니다.", + event.getStoreName(), + event.getOldRemainDate(), + event.getOldRemainTime(), + event.getNewRemainDate(), + event.getNewRemainTime()); + + notificationService.createNotification( + user, + NotificationType.RESERVATION_CHANGED, + title, + content, + event.getNewReservationId() + ); + + log.info("[예약 변경 알림] userId: {}, newReservationId: {} 알림 생성 완료", + event.getUserId(), event.getNewReservationId()); + } +} diff --git a/src/main/java/com/catchtable/notification/service/NotificationService.java b/src/main/java/com/catchtable/notification/service/NotificationService.java index 4947b09..45e1869 100644 --- a/src/main/java/com/catchtable/notification/service/NotificationService.java +++ b/src/main/java/com/catchtable/notification/service/NotificationService.java @@ -6,6 +6,8 @@ import com.catchtable.notification.entity.Notification; import com.catchtable.notification.entity.NotificationType; import com.catchtable.notification.repository.NotificationRepository; +import com.catchtable.reservation.repository.ReservationRepository; +import com.catchtable.store.repository.StoreRepository; import com.catchtable.user.entity.User; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; @@ -18,6 +20,8 @@ public class NotificationService { private final NotificationRepository notificationRepository; + private final StoreRepository storeRepository; + private final ReservationRepository reservationRepository; @Transactional public void createNotification(User user, NotificationType type, String title, String content, Long relatedItemId) { @@ -34,7 +38,23 @@ public void createNotification(User user, NotificationType type, String title, S @Transactional(readOnly = true) public Page getMyNotifications(Long userId, Pageable pageable) { return notificationRepository.findByUserIdAndIsDeletedFalse(userId, pageable) - .map(NotificationListResponse::new); + .map(notification -> new NotificationListResponse(notification, resolveStoreName(notification))); + } + + // VACANCY 알림은 relatedItemId가 storeId, RESERVATION_* 알림은 reservationId + private String resolveStoreName(Notification notification) { + Long relatedId = notification.getRelatedItemId(); + if (relatedId == null) return null; + + return switch (notification.getType()) { + case VACANCY -> storeRepository.findById(relatedId) + .map(s -> s.getStoreName()) + .orElse(null); + case RESERVATION_CONFIRMED, RESERVATION_CANCELED, RESERVATION_CHANGED, RESERVATION_VISITED, RESERVATION_REMINDER -> + reservationRepository.findByIdWithUserAndStoreRemainAndStore(relatedId) + .map(r -> r.getStoreRemain().getStore().getStoreName()) + .orElse(null); + }; } @Transactional(readOnly = true) diff --git a/src/main/java/com/catchtable/reservation/controller/ReservationController.java b/src/main/java/com/catchtable/reservation/controller/ReservationController.java index 62a8500..97d27a9 100644 --- a/src/main/java/com/catchtable/reservation/controller/ReservationController.java +++ b/src/main/java/com/catchtable/reservation/controller/ReservationController.java @@ -27,9 +27,10 @@ public class ReservationController { @PostMapping public ResponseEntity> create( + @RequestHeader("X-User-Id") Long userId, @Valid @RequestBody ReservationCreateRequestDto request ) { - ReservationCreateResponseDto responseData = reservationService.create(request); + ReservationCreateResponseDto responseData = reservationService.create(userId, request); return ResponseEntity .status(SuccessCode.RESERVATION_CREATE_SUCCESS.getHttpStatus()) .body(ApiResponse.success(SuccessCode.RESERVATION_CREATE_SUCCESS, responseData)); @@ -37,7 +38,7 @@ public ResponseEntity> create( @GetMapping("/me") public ResponseEntity>> getMyReservations( - @RequestParam Long userId + @RequestHeader("X-User-Id") Long userId ) { List responseData = reservationService.getUserReservations(userId); return ResponseEntity @@ -48,7 +49,7 @@ public ResponseEntity>> getMyReserv @GetMapping("/{reservationId}") public ResponseEntity> getReservationDetail( @PathVariable Long reservationId, - @RequestParam Long userId + @RequestHeader("X-User-Id") Long userId ) { ReservationDetailResponseDto responseData = reservationService.getReservationDetail(reservationId, userId); return ResponseEntity @@ -59,7 +60,7 @@ public ResponseEntity> getReservationD @DeleteMapping("/{reservationId}") public ResponseEntity> cancel( @PathVariable Long reservationId, - @RequestParam Long userId + @RequestHeader("X-User-Id") Long userId ) { reservationService.cancelReservation(reservationId, userId); return ResponseEntity @@ -70,7 +71,7 @@ public ResponseEntity> cancel( @PatchMapping("/{reservationId}") public ResponseEntity> updateReservation( @PathVariable Long reservationId, - @RequestParam Long userId, + @RequestHeader("X-User-Id") Long userId, @Valid @RequestBody ReservationUpdateRequestDto request ) { ReservationUpdateResponseDto responseData = reservationService.updateReservation(reservationId, userId, request); @@ -82,7 +83,7 @@ public ResponseEntity> updateReservati @PatchMapping("/{reservationId}/status") public ResponseEntity> updateReservationStatus( @PathVariable Long reservationId, - @RequestParam Long userId, + @RequestHeader("X-User-Id") Long userId, @Valid @RequestBody ReservationStatusUpdateRequestDto request ) { reservationService.updateReservationStatus(reservationId, userId, request); diff --git a/src/main/java/com/catchtable/reservation/dto/create/ReservationCreateRequestDto.java b/src/main/java/com/catchtable/reservation/dto/create/ReservationCreateRequestDto.java index c0570ac..c8bcd85 100644 --- a/src/main/java/com/catchtable/reservation/dto/create/ReservationCreateRequestDto.java +++ b/src/main/java/com/catchtable/reservation/dto/create/ReservationCreateRequestDto.java @@ -5,15 +5,11 @@ import jakarta.validation.constraints.NotNull; public record ReservationCreateRequestDto( - + @Schema(example = "1") @NotNull(message = "예약 가능한 시간 선택은 필수입니다.") Long remainId, - - @Schema(example = "1") - @NotNull(message = "예약자 아이디는 필수입니다.") - Long userId, - + @Schema(example = "4") @NotNull(message = "예약 인원은 필수입니다.") @Min(value = 1, message = "예약 인원은 1 이상이어야 합니다.") diff --git a/src/main/java/com/catchtable/reservation/entity/ReservationStatus.java b/src/main/java/com/catchtable/reservation/entity/ReservationStatus.java index 0435323..2847d32 100644 --- a/src/main/java/com/catchtable/reservation/entity/ReservationStatus.java +++ b/src/main/java/com/catchtable/reservation/entity/ReservationStatus.java @@ -5,5 +5,6 @@ public enum ReservationStatus { CONFIRMED, CANCELED, NOSHOW, - VISITED + VISITED, + REPLACED // 예약 변경으로 대체된 기존 예약 (취소/노쇼와 별도로 관리) } diff --git a/src/main/java/com/catchtable/reservation/service/ReservationService.java b/src/main/java/com/catchtable/reservation/service/ReservationService.java index 537e8e4..2916a89 100644 --- a/src/main/java/com/catchtable/reservation/service/ReservationService.java +++ b/src/main/java/com/catchtable/reservation/service/ReservationService.java @@ -5,6 +5,7 @@ import com.catchtable.global.exception.CustomException; import com.catchtable.global.exception.ErrorCode; import com.catchtable.notification.event.ReservationCanceledEvent; +import com.catchtable.notification.event.ReservationChangedEvent; import com.catchtable.notification.event.ReservationConfirmedEvent; import com.catchtable.notification.event.ReservationVisitedEvent; import com.catchtable.notification.event.VacancyEvent; @@ -43,43 +44,19 @@ public class ReservationService { private final VacancyNotificationEmailService vacancyNotificationService; private final ApplicationEventPublisher eventPublisher; - @Transactional - public ReservationCreateResponseDto create(ReservationCreateRequestDto request) { - User user = userRepository.findById(request.userId()) - .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND)); + // ============================================================ + // Public API + // ============================================================ - StoreRemain storeRemain = storeRemainRepository.findByIdWithStore(request.remainId()) - .orElseThrow(() -> new CustomException(ErrorCode.REMAIN_NOT_FOUND)); - - try { - // 재고 차감 (remainTeam <= 0 검증 포함) - storeRemain.decreaseRemainTeam(); - // 변경된 StoreRemain 엔티티를 명시적으로 저장하여 @Version 필드 업데이트를 트리거 - storeRemainRepository.saveAndFlush(storeRemain); - } catch (OptimisticLockingFailureException e) { - throw new CustomException(ErrorCode.OPTIMISTIC_LOCK_CONFLICT); - } - - - // 쿠폰 적용 (선택) - Coupon coupon = null; - if (request.couponId() != null) { - coupon = couponService.useCoupon(request.couponId(), request.userId()); - } - - Reservation reservation = Reservation.builder() - .user(user) - .storeRemain(storeRemain) - .coupon(coupon) - .member(request.member()) - .build(); - - Reservation saved = reservationRepository.save(reservation); + @Transactional + public ReservationCreateResponseDto create(Long userId, ReservationCreateRequestDto request) { + Reservation saved = createReservationCore(userId, request.remainId(), request.member(), request.couponId()); + StoreRemain storeRemain = saved.getStoreRemain(); // 예약 확정 알림 이벤트 발행 eventPublisher.publishEvent(new ReservationConfirmedEvent( saved.getId(), - user.getId(), + userId, storeRemain.getStore().getStoreName(), storeRemain.getRemainDate().toString(), storeRemain.getRemainTime().toString() @@ -88,6 +65,51 @@ public ReservationCreateResponseDto create(ReservationCreateRequestDto request) return new ReservationCreateResponseDto(saved.getId(), saved.getStatus()); } + @Transactional + public void cancelReservation(Long reservationId, Long userId) { + Reservation reservation = cancelReservationCore(reservationId, userId, ReservationStatus.CANCELED); + StoreRemain storeRemain = reservation.getStoreRemain(); + + // 예약 취소 알림 이벤트 발행 + eventPublisher.publishEvent(new ReservationCanceledEvent( + reservation.getId(), + reservation.getUser().getId(), + storeRemain.getStore().getStoreName(), + storeRemain.getRemainDate().toString(), + storeRemain.getRemainTime().toString() + )); + } + + @Transactional + public ReservationUpdateResponseDto updateReservation(Long reservationId, Long userId, ReservationUpdateRequestDto request) { + // 1. 기존 예약은 변경으로 대체됨 (REPLACED 마킹) — 취소/생성 로직 재사용, 알림은 발행하지 않음 + Reservation oldReservation = cancelReservationCore(reservationId, userId, ReservationStatus.REPLACED); + StoreRemain oldStoreRemain = oldReservation.getStoreRemain(); + + // 2. 새 예약 생성 — 동일하게 알림은 발행하지 않음 + Reservation newReservation = createReservationCore(userId, request.newRemainId(), request.newMember(), request.couponId()); + StoreRemain newStoreRemain = newReservation.getStoreRemain(); + + // 3. 변경 알림 1건만 발행 + eventPublisher.publishEvent(new ReservationChangedEvent( + newReservation.getId(), + userId, + newStoreRemain.getStore().getStoreName(), + oldStoreRemain.getRemainDate().toString(), + oldStoreRemain.getRemainTime().toString(), + newStoreRemain.getRemainDate().toString(), + newStoreRemain.getRemainTime().toString() + )); + + return new ReservationUpdateResponseDto( + newReservation.getId(), + newReservation.getStoreRemain().getId(), + newReservation.getMember(), + newReservation.getStatus().name().toLowerCase(), + newReservation.getUpdatedAt() != null ? newReservation.getUpdatedAt() : java.time.LocalDateTime.now() + ); + } + @Transactional(readOnly = true) public List getUserReservations(Long userId) { User user = userRepository.findById(userId) @@ -119,7 +141,7 @@ public List getUserReservations(Long userId) { public ReservationDetailResponseDto getReservationDetail(Long reservationId, Long userId) { Reservation reservation = reservationRepository.findById(reservationId) .orElseThrow(() -> new CustomException(ErrorCode.RESERVATION_NOT_FOUND)); - + reservation.validateOwner(userId); StoreRemain storeRemain = reservation.getStoreRemain(); @@ -149,133 +171,101 @@ public ReservationDetailResponseDto getReservationDetail(Long reservationId, Lon ); } - private Reservation getActiveReservation(Long reservationId, Long userId) { - Reservation reservation = reservationRepository.findById(reservationId) - .orElseThrow(() -> new CustomException(ErrorCode.RESERVATION_NOT_FOUND)); - reservation.validateOwner(userId); - if (reservation.getStatus() == ReservationStatus.CANCELED) { - throw new CustomException(ErrorCode.ALREADY_CANCELED); - } - return reservation; - } - @Transactional - public void cancelReservation(Long reservationId, Long userId) { - Reservation reservation = getActiveReservation(reservationId, userId); - - // 예약 상태 취소로 변경 - reservation.changeStatus(ReservationStatus.CANCELED); - - StoreRemain storeRemain = reservation.getStoreRemain(); - try { - // 예약했던 시간대의 재고 복구 - storeRemain.increaseRemainTeam(); - storeRemainRepository.saveAndFlush(storeRemain); - } catch (OptimisticLockingFailureException e) { - throw new CustomException(ErrorCode.OPTIMISTIC_LOCK_CONFLICT); - } - - // 빈자리 알림 이메일 발송 (주석 처리) - // vacancyNotificationService.notifySubscribers(storeRemain.getId()); + public void updateReservationStatus(Long reservationId, Long userId, ReservationStatusUpdateRequestDto request) { + Reservation reservation = reservationRepository.findByIdWithUserAndStoreRemainAndStore(reservationId) + .orElseThrow(() -> new CustomException(ErrorCode.RESERVATION_NOT_FOUND)); - // 빈자리 발생 이벤트 발행 (ID만 전달) - eventPublisher.publishEvent(new VacancyEvent(storeRemain.getId())); + reservation.validateOwner(userId); - // 예약 취소 알림 이벤트 발행 - eventPublisher.publishEvent(new ReservationCanceledEvent( - reservation.getId(), - reservation.getUser().getId(), - storeRemain.getStore().getStoreName(), - storeRemain.getRemainDate().toString(), - storeRemain.getRemainTime().toString() - )); + // 상태 변경 + reservation.changeStatus(request.status()); - // 쿠폰 반환 - if (reservation.getCoupon() != null) { - couponService.returnCoupon(reservation.getCoupon().getId()); + // 예약 상태가 VISITED로 변경될 때 이벤트 발행 + if (request.status() == ReservationStatus.VISITED) { + eventPublisher.publishEvent(new ReservationVisitedEvent( + reservation.getId(), + reservation.getUser().getId(), + reservation.getStoreRemain().getStore().getStoreName(), + reservation.getStoreRemain().getRemainDate().toString(), + reservation.getStoreRemain().getRemainTime().toString() + )); } } - @Transactional - public ReservationUpdateResponseDto updateReservation(Long reservationId, Long userId, ReservationUpdateRequestDto request) { - Reservation oldReservation = getActiveReservation(reservationId, userId); + // ============================================================ + // Internal core (알림 발행 X — 호출자가 알림 정책 결정) + // ============================================================ - StoreRemain newStoreRemain = storeRemainRepository.findByIdWithStore(request.newRemainId()) + /** + * 예약 생성의 핵심 로직: 사용자/시간대 검증, 재고 차감, 쿠폰 적용, 저장. + * 알림은 발행하지 않으므로, 호출자가 상황(생성/변경)에 맞는 이벤트를 직접 publish 해야 한다. + */ + private Reservation createReservationCore(Long userId, Long remainId, Integer member, Long couponId) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND)); + + StoreRemain storeRemain = storeRemainRepository.findByIdWithStore(remainId) .orElseThrow(() -> new CustomException(ErrorCode.REMAIN_NOT_FOUND)); - // 기존 예약 취소 및 재고 복구 - oldReservation.changeStatus(ReservationStatus.CANCELED); - StoreRemain oldStoreRemain = oldReservation.getStoreRemain(); try { - oldStoreRemain.increaseRemainTeam(); - storeRemainRepository.saveAndFlush(oldStoreRemain); + storeRemain.decreaseRemainTeam(); + storeRemainRepository.saveAndFlush(storeRemain); } catch (OptimisticLockingFailureException e) { throw new CustomException(ErrorCode.OPTIMISTIC_LOCK_CONFLICT); } + Coupon coupon = null; + if (couponId != null) { + coupon = couponService.useCoupon(couponId, userId); + } - // 예약 변경으로 기존 자리가 났으므로 알림 이벤트 발행 (ID만 전달) - eventPublisher.publishEvent(new VacancyEvent(oldStoreRemain.getId())); + Reservation reservation = Reservation.builder() + .user(user) + .storeRemain(storeRemain) + .coupon(coupon) + .member(member) + .status(ReservationStatus.CONFIRMED) + .build(); - // 기존 쿠폰 반환 - if (oldReservation.getCoupon() != null) { - couponService.returnCoupon(oldReservation.getCoupon().getId()); - } + return reservationRepository.save(reservation); + } + + /** + * 예약 종료(취소/대체) 핵심 로직: 상태 마킹, 재고 복구, 빈자리 이벤트, 쿠폰 반환. + * 알림은 발행하지 않으므로, 호출자가 상황(취소/변경)에 맞는 이벤트를 직접 publish 해야 한다. + * + * @param targetStatus CANCELED(진짜 취소) 또는 REPLACED(변경에 의한 대체) + */ + private Reservation cancelReservationCore(Long reservationId, Long userId, ReservationStatus targetStatus) { + Reservation reservation = getActiveReservation(reservationId, userId); + reservation.changeStatus(targetStatus); - // 새로운 예약 시간에 대한 재고 차감 + StoreRemain storeRemain = reservation.getStoreRemain(); try { - newStoreRemain.decreaseRemainTeam(); - storeRemainRepository.saveAndFlush(newStoreRemain); + storeRemain.increaseRemainTeam(); + storeRemainRepository.saveAndFlush(storeRemain); } catch (OptimisticLockingFailureException e) { throw new CustomException(ErrorCode.OPTIMISTIC_LOCK_CONFLICT); } + // 빈자리 발생 이벤트는 취소/변경 양쪽 모두에서 발행 (다른 사용자에게 빈자리 알림) + eventPublisher.publishEvent(new VacancyEvent(storeRemain.getId())); - // 새 예약에 쿠폰 적용 (선택) - Coupon newCoupon = null; - if (request.couponId() != null) { - newCoupon = couponService.useCoupon(request.couponId(), oldReservation.getUser().getId()); + if (reservation.getCoupon() != null) { + couponService.returnCoupon(reservation.getCoupon().getId()); } - // 새로운 예약 생성 - Reservation newReservation = Reservation.builder() - .user(oldReservation.getUser()) // 기존 User 재사용 - .storeRemain(newStoreRemain) - .coupon(newCoupon) - .member(request.newMember()) - .status(ReservationStatus.PENDING) - .build(); - - Reservation savedReservation = reservationRepository.save(newReservation); - - return new ReservationUpdateResponseDto( - savedReservation.getId(), - savedReservation.getStoreRemain().getId(), - savedReservation.getMember(), - savedReservation.getStatus().name().toLowerCase(), - savedReservation.getUpdatedAt() != null ? savedReservation.getUpdatedAt() : java.time.LocalDateTime.now() - ); + return reservation; } - @Transactional - public void updateReservationStatus(Long reservationId, Long userId, ReservationStatusUpdateRequestDto request) { - Reservation reservation = reservationRepository.findByIdWithUserAndStoreRemainAndStore(reservationId) + private Reservation getActiveReservation(Long reservationId, Long userId) { + Reservation reservation = reservationRepository.findById(reservationId) .orElseThrow(() -> new CustomException(ErrorCode.RESERVATION_NOT_FOUND)); - reservation.validateOwner(userId); - - // 상태 변경 - reservation.changeStatus(request.status()); - - // 예약 상태가 VISITED로 변경될 때 이벤트 발행 - if (request.status() == ReservationStatus.VISITED) { - eventPublisher.publishEvent(new ReservationVisitedEvent( - reservation.getId(), - reservation.getUser().getId(), - reservation.getStoreRemain().getStore().getStoreName(), - reservation.getStoreRemain().getRemainDate().toString(), - reservation.getStoreRemain().getRemainTime().toString() - )); + if (reservation.getStatus() == ReservationStatus.CANCELED) { + throw new CustomException(ErrorCode.ALREADY_CANCELED); } + return reservation; } } diff --git a/src/main/java/com/catchtable/vacancy/controller/VacancyController.java b/src/main/java/com/catchtable/vacancy/controller/VacancyController.java index 9a7317a..02cf4e6 100644 --- a/src/main/java/com/catchtable/vacancy/controller/VacancyController.java +++ b/src/main/java/com/catchtable/vacancy/controller/VacancyController.java @@ -21,17 +21,18 @@ public class VacancyController { private final VacancyService vacancyService; @PostMapping - public ResponseEntity> register(@RequestBody @Valid VacancyRegisterRequest request) { - Long vacancyId = vacancyService.register(request.userId(), request.remainId()); + public ResponseEntity> register( + @RequestHeader("X-User-Id") Long userId, + @RequestBody @Valid VacancyRegisterRequest request) { + Long vacancyId = vacancyService.register(userId, request.remainId()); VacancyRegisterResponse responseData = new VacancyRegisterResponse(vacancyId); return ResponseEntity .status(SuccessCode.VACANCY_REGISTER_SUCCESS.getHttpStatus()) .body(ApiResponse.success(SuccessCode.VACANCY_REGISTER_SUCCESS, responseData)); } - // TODO: userId는 인증 구현 후 @AuthenticationPrincipal로 교체 @GetMapping("/me") - public ResponseEntity>> getMyList(@RequestParam Long userId) { + public ResponseEntity>> getMyList(@RequestHeader("X-User-Id") Long userId) { List responseData = vacancyService.getMyList(userId); return ResponseEntity .status(SuccessCode.VACANCY_LOOKUP_SUCCESS.getHttpStatus()) diff --git a/src/main/java/com/catchtable/vacancy/dto/create/VacancyRegisterRequest.java b/src/main/java/com/catchtable/vacancy/dto/create/VacancyRegisterRequest.java index 7f56319..c6ba33d 100644 --- a/src/main/java/com/catchtable/vacancy/dto/create/VacancyRegisterRequest.java +++ b/src/main/java/com/catchtable/vacancy/dto/create/VacancyRegisterRequest.java @@ -4,8 +4,5 @@ import jakarta.validation.constraints.NotNull; public record VacancyRegisterRequest( - // TODO: userId는 인증 구현 후 SecurityContext에서 추출해야 함 (임시 처리) - - @Schema(example = "1") @NotNull Long userId, @Schema(example = "1") @NotNull Long remainId ) {} \ No newline at end of file diff --git a/src/test/java/com/catchtable/coupon/service/CouponServiceTest.java b/src/test/java/com/catchtable/coupon/service/CouponServiceTest.java index 51eae6d..dd36b36 100644 --- a/src/test/java/com/catchtable/coupon/service/CouponServiceTest.java +++ b/src/test/java/com/catchtable/coupon/service/CouponServiceTest.java @@ -85,7 +85,8 @@ private Coupon createCoupon(Long id, User user, CouponTemplate template, CouponS @Test @DisplayName("쿠폰 템플릿 생성 성공 - 관리자") void createTemplateSuccess() { - given(userRepository.findById(1L)).willReturn(Optional.of(createAdminUser())); + given(userRepository.getAdminOrThrow(1L, ErrorCode.ADMIN_ONLY_COUPON_CREATE)) + .willReturn(createAdminUser()); given(couponTemplateRepository.save(any(CouponTemplate.class))).willAnswer(invocation -> { CouponTemplate t = invocation.getArgument(0); setField(t, "id", 1L); @@ -104,7 +105,8 @@ void createTemplateSuccess() { @Test @DisplayName("쿠폰 템플릿 생성 실패 - 일반 사용자 권한 없음") void createTemplateFailNotAdmin() { - given(userRepository.findById(2L)).willReturn(Optional.of(createUser(2L))); + given(userRepository.getAdminOrThrow(2L, ErrorCode.ADMIN_ONLY_COUPON_CREATE)) + .willThrow(new CustomException(ErrorCode.ADMIN_ONLY_COUPON_CREATE)); var request = new com.catchtable.coupon.dto.create.CouponTemplateCreateRequest( "10% 할인", 10, 100, LocalDateTime.now(), LocalDateTime.now().plusDays(30)); @@ -123,7 +125,7 @@ void issueCouponSuccess() { User user = createUser(1L); CouponTemplate template = createTemplate(10, LocalDateTime.now().plusDays(30)); - given(userRepository.findById(1L)).willReturn(Optional.of(user)); + given(userRepository.getById(1L)).willReturn(user); given(couponTemplateRepository.findByIdWithLock(1L)).willReturn(Optional.of(template)); given(couponRepository.existsByUserIdAndCouponTemplateId(1L, 1L)).willReturn(false); given(couponRepository.save(any(Coupon.class))).willAnswer(invocation -> { @@ -143,7 +145,7 @@ void issueCouponFailDuplicate() { User user = createUser(1L); CouponTemplate template = createTemplate(10, LocalDateTime.now().plusDays(30)); - given(userRepository.findById(1L)).willReturn(Optional.of(user)); + given(userRepository.getById(1L)).willReturn(user); given(couponTemplateRepository.findByIdWithLock(1L)).willReturn(Optional.of(template)); given(couponRepository.existsByUserIdAndCouponTemplateId(1L, 1L)).willReturn(true); @@ -159,7 +161,7 @@ void issueCouponFailExhausted() { User user = createUser(1L); CouponTemplate template = createTemplate(0, LocalDateTime.now().plusDays(30)); - given(userRepository.findById(1L)).willReturn(Optional.of(user)); + given(userRepository.getById(1L)).willReturn(user); given(couponTemplateRepository.findByIdWithLock(1L)).willReturn(Optional.of(template)); given(couponRepository.existsByUserIdAndCouponTemplateId(1L, 1L)).willReturn(false); diff --git a/src/test/java/com/catchtable/reservation/controller/ReservationControllerTest.java b/src/test/java/com/catchtable/reservation/controller/ReservationControllerTest.java index 7351d35..c04a8bf 100644 --- a/src/test/java/com/catchtable/reservation/controller/ReservationControllerTest.java +++ b/src/test/java/com/catchtable/reservation/controller/ReservationControllerTest.java @@ -50,18 +50,18 @@ void setUp() { @Test @DisplayName("예약 생성 성공 - 201") void createReservationSuccess() throws Exception { - given(reservationService.create(any())) + given(reservationService.create(eq(1L), any())) .willReturn(new ReservationCreateResponseDto(1L, ReservationStatus.PENDING)); String requestBody = """ { "remainId": 1, - "userId": 1, "member": 4 } """; mockMvc.perform(post("/api/v1/reservations") + .header("X-User-Id", "1") .contentType(MediaType.APPLICATION_JSON) .content(requestBody)) .andExpect(status().isCreated()) @@ -74,12 +74,12 @@ void createReservationValidationFail() throws Exception { String requestBody = """ { "remainId": 1, - "userId": 1, "member": 0 } """; mockMvc.perform(post("/api/v1/reservations") + .header("X-User-Id", "1") .contentType(MediaType.APPLICATION_JSON) .content(requestBody)) .andExpect(status().isBadRequest()) @@ -95,7 +95,7 @@ void getReservationNotFound() throws Exception { .willThrow(new CustomException(ErrorCode.RESERVATION_NOT_FOUND)); mockMvc.perform(get("/api/v1/reservations/999") - .param("userId", "1")) + .header("X-User-Id", "1")) .andExpect(status().isNotFound()) .andExpect(jsonPath("$.status").value(404)); } @@ -107,7 +107,7 @@ void getReservationNotOwner() throws Exception { .willThrow(new CustomException(ErrorCode.NOT_RESERVATION_OWNER)); mockMvc.perform(get("/api/v1/reservations/1") - .param("userId", "999")) + .header("X-User-Id", "999")) .andExpect(status().isForbidden()) .andExpect(jsonPath("$.status").value(403)); } @@ -121,7 +121,7 @@ void cancelReservationAlreadyCanceled() throws Exception { .when(reservationService).cancelReservation(eq(1L), eq(1L)); mockMvc.perform(delete("/api/v1/reservations/1") - .param("userId", "1")) + .header("X-User-Id", "1")) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.status").value(400)); } diff --git a/src/test/java/com/catchtable/reservation/service/ReservationCouponTest.java b/src/test/java/com/catchtable/reservation/service/ReservationCouponTest.java index 68e8f67..d2d1fbe 100644 --- a/src/test/java/com/catchtable/reservation/service/ReservationCouponTest.java +++ b/src/test/java/com/catchtable/reservation/service/ReservationCouponTest.java @@ -6,6 +6,7 @@ import com.catchtable.coupon.repository.CouponRepository; import com.catchtable.coupon.service.CouponService; import com.catchtable.global.exception.ErrorCode; +import com.catchtable.notification.service.VacancyNotificationEmailService; import com.catchtable.remain.entity.StoreRemain; import com.catchtable.remain.repository.StoreRemainRepository; import com.catchtable.reservation.dto.create.ReservationCreateRequestDto; @@ -24,6 +25,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.context.ApplicationEventPublisher; import java.time.LocalDate; import java.time.LocalDateTime; @@ -49,6 +51,10 @@ class ReservationCouponTest { private CouponService couponService; @Mock private CouponRepository couponRepository; + @Mock + private VacancyNotificationEmailService vacancyNotificationService; + @Mock + private ApplicationEventPublisher eventPublisher; @InjectMocks private ReservationService reservationService; @@ -115,15 +121,14 @@ void setUp() { void createReservationWithCoupon() { given(userRepository.findById(1L)).willReturn(Optional.of(user)); given(storeRemainRepository.findByIdWithStore(1L)).willReturn(Optional.of(storeRemain)); - given(couponRepository.findById(1L)).willReturn(Optional.of(coupon)); given(reservationRepository.save(any(Reservation.class))).willAnswer(invocation -> { Reservation r = invocation.getArgument(0); setField(r, "id", 1L); return r; }); - ReservationCreateRequestDto request = new ReservationCreateRequestDto(1L, 1L, 4, 1L); - ReservationCreateResponseDto response = reservationService.create(request); + ReservationCreateRequestDto request = new ReservationCreateRequestDto(1L, 4, 1L); + ReservationCreateResponseDto response = reservationService.create(1L, request); assertThat(response.id()).isEqualTo(1L); verify(couponService).useCoupon(1L, 1L); @@ -140,8 +145,8 @@ void createReservationWithoutCoupon() { return r; }); - ReservationCreateRequestDto request = new ReservationCreateRequestDto(1L, 1L, 4, null); - ReservationCreateResponseDto response = reservationService.create(request); + ReservationCreateRequestDto request = new ReservationCreateRequestDto(1L, 4, null); + ReservationCreateResponseDto response = reservationService.create(1L, request); assertThat(response.id()).isEqualTo(1L); verify(couponService, never()).useCoupon(any(), any()); @@ -212,6 +217,7 @@ void updateReservationReturnsCoupon() { setField(newStoreRemain, "id", 2L); given(reservationRepository.findById(1L)).willReturn(Optional.of(oldReservation)); + given(userRepository.findById(1L)).willReturn(Optional.of(user)); given(storeRemainRepository.findByIdWithStore(2L)).willReturn(Optional.of(newStoreRemain)); given(reservationRepository.save(any(Reservation.class))).willAnswer(invocation -> { Reservation r = invocation.getArgument(0); @@ -222,7 +228,7 @@ void updateReservationReturnsCoupon() { var request = new com.catchtable.reservation.dto.update.ReservationUpdateRequestDto(2L, 2, null); reservationService.updateReservation(1L, 1L, request); - assertThat(oldReservation.getStatus()).isEqualTo(ReservationStatus.CANCELED); + assertThat(oldReservation.getStatus()).isEqualTo(ReservationStatus.REPLACED); verify(couponService).returnCoupon(1L); } From eb39bec8ba355d8a91511d5419cbf81060703614 Mon Sep 17 00:00:00 2001 From: kimjb Date: Fri, 1 May 2026 11:36:19 +0900 Subject: [PATCH 17/30] =?UTF-8?q?Feat:=20=EA=B4=80=EB=A6=AC=EC=9E=90=20?= =?UTF-8?q?=EC=BF=A0=ED=8F=B0=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- node_modules/.package-lock.json | 69 + node_modules/csstype/LICENSE | 19 + node_modules/csstype/README.md | 291 + node_modules/csstype/index.d.ts | 22569 ++++++++++++ node_modules/csstype/index.js.flow | 6863 ++++ node_modules/csstype/package.json | 70 + node_modules/goober/LICENSE | 21 + node_modules/goober/README.md | 857 + node_modules/goober/dist/goober.cjs | 1 + node_modules/goober/dist/goober.esm.js | 1 + node_modules/goober/dist/goober.modern.js | 1 + node_modules/goober/dist/goober.umd.js | 1 + .../goober/global/dist/goober-global.cjs | 1 + .../goober/global/dist/goober-global.esm.js | 1 + .../global/dist/goober-global.modern.js | 1 + .../goober/global/dist/goober-global.umd.js | 1 + node_modules/goober/global/global.d.ts | 25 + node_modules/goober/global/package.json | 42 + .../__snapshots__/integration.test.js.snap | 9 + .../global/src/__tests__/global.test.js | 22 + .../global/src/__tests__/integration.test.js | 56 + node_modules/goober/global/src/index.js | 26 + node_modules/goober/goober.d.ts | 101 + node_modules/goober/macro/index.js | 43 + node_modules/goober/macro/package.json | 22 + node_modules/goober/package.json | 154 + node_modules/goober/prefixer/README.md | 20 + .../goober/prefixer/autoprefixer.d.ts | 7 + .../prefixer/dist/goober-autoprefixer.cjs | 1 + .../prefixer/dist/goober-autoprefixer.esm.js | 1 + .../dist/goober-autoprefixer.modern.js | 1 + .../prefixer/dist/goober-autoprefixer.umd.js | 1 + node_modules/goober/prefixer/package.json | 44 + node_modules/goober/prefixer/src/index.js | 28 + .../dist/goober-should-forward-prop.cjs | 1 + .../dist/goober-should-forward-prop.esm.js | 1 + .../dist/goober-should-forward-prop.modern.js | 1 + .../dist/goober-should-forward-prop.umd.js | 1 + .../goober/should-forward-prop/package.json | 41 + .../should-forward-prop.d.ts | 9 + .../src/__tests__/shouldForwardProp.js | 25 + .../goober/should-forward-prop/src/index.js | 19 + node_modules/goober/src/__tests__/css.test.js | 114 + .../goober/src/__tests__/index.test.js | 14 + .../goober/src/__tests__/integrations.test.js | 246 + .../goober/src/__tests__/styled.test.js | 159 + .../goober/src/core/__tests__/astish.test.js | 219 + .../goober/src/core/__tests__/compile.test.js | 70 + .../src/core/__tests__/get-sheet.test.js | 70 + .../goober/src/core/__tests__/hash.test.js | 126 + .../goober/src/core/__tests__/parse.test.js | 327 + .../goober/src/core/__tests__/to-hash.test.js | 17 + .../goober/src/core/__tests__/update.test.js | 64 + node_modules/goober/src/core/astish.js | 28 + node_modules/goober/src/core/compile.js | 41 + node_modules/goober/src/core/get-sheet.js | 27 + node_modules/goober/src/core/hash.js | 67 + node_modules/goober/src/core/parse.js | 60 + node_modules/goober/src/core/to-hash.js | 15 + node_modules/goober/src/core/update.js | 25 + node_modules/goober/src/css.js | 40 + node_modules/goober/src/index.js | 3 + node_modules/goober/src/styled.js | 73 + node_modules/goober/typings.json | 5 + node_modules/react-dom/LICENSE | 21 + node_modules/react-dom/README.md | 60 + .../cjs/react-dom-client.development.js | 28121 +++++++++++++++ .../cjs/react-dom-client.production.js | 16049 +++++++++ .../cjs/react-dom-profiling.development.js | 28503 ++++++++++++++++ .../cjs/react-dom-profiling.profiling.js | 18068 ++++++++++ ...t-dom-server-legacy.browser.development.js | 9877 ++++++ ...ct-dom-server-legacy.browser.production.js | 6603 ++++ ...eact-dom-server-legacy.node.development.js | 9877 ++++++ ...react-dom-server-legacy.node.production.js | 6692 ++++ .../react-dom-server.browser.development.js | 10601 ++++++ .../react-dom-server.browser.production.js | 7410 ++++ .../cjs/react-dom-server.bun.development.js | 9605 ++++++ .../cjs/react-dom-server.bun.production.js | 6745 ++++ .../cjs/react-dom-server.edge.development.js | 10620 ++++++ .../cjs/react-dom-server.edge.production.js | 7512 ++++ .../cjs/react-dom-server.node.development.js | 10802 ++++++ .../cjs/react-dom-server.node.production.js | 7707 +++++ .../cjs/react-dom-test-utils.development.js | 24 + .../cjs/react-dom-test-utils.production.js | 21 + .../react-dom/cjs/react-dom.development.js | 424 + .../react-dom/cjs/react-dom.production.js | 210 + .../cjs/react-dom.react-server.development.js | 340 + .../cjs/react-dom.react-server.production.js | 152 + node_modules/react-dom/client.js | 38 + node_modules/react-dom/client.react-server.js | 5 + node_modules/react-dom/index.js | 38 + node_modules/react-dom/package.json | 117 + node_modules/react-dom/profiling.js | 38 + .../react-dom/profiling.react-server.js | 5 + .../react-dom/react-dom.react-server.js | 7 + node_modules/react-dom/server.browser.js | 16 + node_modules/react-dom/server.bun.js | 17 + node_modules/react-dom/server.edge.js | 17 + node_modules/react-dom/server.js | 3 + node_modules/react-dom/server.node.js | 18 + node_modules/react-dom/server.react-server.js | 5 + node_modules/react-dom/static.browser.js | 12 + node_modules/react-dom/static.edge.js | 12 + node_modules/react-dom/static.js | 3 + node_modules/react-dom/static.node.js | 14 + node_modules/react-dom/static.react-server.js | 5 + node_modules/react-dom/test-utils.js | 7 + node_modules/react-hot-toast/LICENSE | 21 + node_modules/react-hot-toast/README.md | 72 + node_modules/react-hot-toast/dist/index.d.ts | 130 + node_modules/react-hot-toast/dist/index.js | 179 + .../react-hot-toast/dist/index.js.map | 1 + node_modules/react-hot-toast/dist/index.mjs | 179 + .../react-hot-toast/dist/index.mjs.map | 1 + .../react-hot-toast/headless/index.d.ts | 93 + .../react-hot-toast/headless/index.js | 2 + .../react-hot-toast/headless/index.js.map | 1 + .../react-hot-toast/headless/index.mjs | 2 + .../react-hot-toast/headless/index.mjs.map | 1 + node_modules/react-hot-toast/package.json | 103 + .../src/components/checkmark.tsx | 61 + .../react-hot-toast/src/components/error.tsx | 71 + .../react-hot-toast/src/components/loader.tsx | 26 + .../src/components/toast-bar.tsx | 111 + .../src/components/toast-icon.tsx | 77 + .../src/components/toaster.tsx | 143 + .../react-hot-toast/src/core/store.ts | 232 + .../react-hot-toast/src/core/toast.ts | 159 + .../react-hot-toast/src/core/types.ts | 97 + .../react-hot-toast/src/core/use-toaster.ts | 145 + .../react-hot-toast/src/core/utils.ts | 19 + .../react-hot-toast/src/headless/index.ts | 21 + node_modules/react-hot-toast/src/index.ts | 13 + node_modules/react/LICENSE | 21 + node_modules/react/README.md | 37 + .../cjs/react-compiler-runtime.development.js | 24 + .../cjs/react-compiler-runtime.production.js | 16 + .../cjs/react-compiler-runtime.profiling.js | 16 + .../cjs/react-jsx-dev-runtime.development.js | 338 + .../cjs/react-jsx-dev-runtime.production.js | 14 + .../cjs/react-jsx-dev-runtime.profiling.js | 14 + ...sx-dev-runtime.react-server.development.js | 370 + ...jsx-dev-runtime.react-server.production.js | 40 + .../cjs/react-jsx-runtime.development.js | 352 + .../react/cjs/react-jsx-runtime.production.js | 34 + .../react/cjs/react-jsx-runtime.profiling.js | 34 + ...ct-jsx-runtime.react-server.development.js | 370 + ...act-jsx-runtime.react-server.production.js | 40 + node_modules/react/cjs/react.development.js | 1284 + node_modules/react/cjs/react.production.js | 542 + .../cjs/react.react-server.development.js | 848 + .../cjs/react.react-server.production.js | 423 + node_modules/react/compiler-runtime.js | 14 + node_modules/react/index.js | 7 + node_modules/react/jsx-dev-runtime.js | 7 + .../react/jsx-dev-runtime.react-server.js | 7 + node_modules/react/jsx-runtime.js | 7 + .../react/jsx-runtime.react-server.js | 7 + node_modules/react/package.json | 51 + node_modules/react/react.react-server.js | 7 + node_modules/scheduler/LICENSE | 21 + node_modules/scheduler/README.md | 9 + .../scheduler-unstable_mock.development.js | 414 + .../cjs/scheduler-unstable_mock.production.js | 406 + ...cheduler-unstable_post_task.development.js | 150 + ...scheduler-unstable_post_task.production.js | 140 + .../scheduler/cjs/scheduler.development.js | 364 + .../cjs/scheduler.native.development.js | 350 + .../cjs/scheduler.native.production.js | 330 + .../scheduler/cjs/scheduler.production.js | 340 + node_modules/scheduler/index.js | 7 + node_modules/scheduler/index.native.js | 7 + node_modules/scheduler/package.json | 27 + node_modules/scheduler/unstable_mock.js | 7 + node_modules/scheduler/unstable_post_task.js | 7 + package-lock.json | 74 + package.json | 5 + .../chatbot/controller/ChatbotController.java | 6 +- .../coupon/controller/CouponController.java | 8 + .../read/CouponTemplateActiveResponse.java | 27 + .../repository/CouponTemplateRepository.java | 14 + .../coupon/service/CouponService.java | 10 + .../catchtable/global/common/SuccessCode.java | 1 + .../service/ReservationService.java | 4 +- .../review/controller/ReviewController.java | 8 +- 185 files changed, 239311 insertions(+), 8 deletions(-) create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/csstype/LICENSE create mode 100644 node_modules/csstype/README.md create mode 100644 node_modules/csstype/index.d.ts create mode 100644 node_modules/csstype/index.js.flow create mode 100644 node_modules/csstype/package.json create mode 100644 node_modules/goober/LICENSE create mode 100644 node_modules/goober/README.md create mode 100644 node_modules/goober/dist/goober.cjs create mode 100644 node_modules/goober/dist/goober.esm.js create mode 100644 node_modules/goober/dist/goober.modern.js create mode 100644 node_modules/goober/dist/goober.umd.js create mode 100644 node_modules/goober/global/dist/goober-global.cjs create mode 100644 node_modules/goober/global/dist/goober-global.esm.js create mode 100644 node_modules/goober/global/dist/goober-global.modern.js create mode 100644 node_modules/goober/global/dist/goober-global.umd.js create mode 100644 node_modules/goober/global/global.d.ts create mode 100644 node_modules/goober/global/package.json create mode 100644 node_modules/goober/global/src/__tests__/__snapshots__/integration.test.js.snap create mode 100644 node_modules/goober/global/src/__tests__/global.test.js create mode 100644 node_modules/goober/global/src/__tests__/integration.test.js create mode 100644 node_modules/goober/global/src/index.js create mode 100644 node_modules/goober/goober.d.ts create mode 100644 node_modules/goober/macro/index.js create mode 100644 node_modules/goober/macro/package.json create mode 100644 node_modules/goober/package.json create mode 100644 node_modules/goober/prefixer/README.md create mode 100644 node_modules/goober/prefixer/autoprefixer.d.ts create mode 100644 node_modules/goober/prefixer/dist/goober-autoprefixer.cjs create mode 100644 node_modules/goober/prefixer/dist/goober-autoprefixer.esm.js create mode 100644 node_modules/goober/prefixer/dist/goober-autoprefixer.modern.js create mode 100644 node_modules/goober/prefixer/dist/goober-autoprefixer.umd.js create mode 100644 node_modules/goober/prefixer/package.json create mode 100644 node_modules/goober/prefixer/src/index.js create mode 100644 node_modules/goober/should-forward-prop/dist/goober-should-forward-prop.cjs create mode 100644 node_modules/goober/should-forward-prop/dist/goober-should-forward-prop.esm.js create mode 100644 node_modules/goober/should-forward-prop/dist/goober-should-forward-prop.modern.js create mode 100644 node_modules/goober/should-forward-prop/dist/goober-should-forward-prop.umd.js create mode 100644 node_modules/goober/should-forward-prop/package.json create mode 100644 node_modules/goober/should-forward-prop/should-forward-prop.d.ts create mode 100644 node_modules/goober/should-forward-prop/src/__tests__/shouldForwardProp.js create mode 100644 node_modules/goober/should-forward-prop/src/index.js create mode 100644 node_modules/goober/src/__tests__/css.test.js create mode 100644 node_modules/goober/src/__tests__/index.test.js create mode 100644 node_modules/goober/src/__tests__/integrations.test.js create mode 100644 node_modules/goober/src/__tests__/styled.test.js create mode 100644 node_modules/goober/src/core/__tests__/astish.test.js create mode 100644 node_modules/goober/src/core/__tests__/compile.test.js create mode 100644 node_modules/goober/src/core/__tests__/get-sheet.test.js create mode 100644 node_modules/goober/src/core/__tests__/hash.test.js create mode 100644 node_modules/goober/src/core/__tests__/parse.test.js create mode 100644 node_modules/goober/src/core/__tests__/to-hash.test.js create mode 100644 node_modules/goober/src/core/__tests__/update.test.js create mode 100644 node_modules/goober/src/core/astish.js create mode 100644 node_modules/goober/src/core/compile.js create mode 100644 node_modules/goober/src/core/get-sheet.js create mode 100644 node_modules/goober/src/core/hash.js create mode 100644 node_modules/goober/src/core/parse.js create mode 100644 node_modules/goober/src/core/to-hash.js create mode 100644 node_modules/goober/src/core/update.js create mode 100644 node_modules/goober/src/css.js create mode 100644 node_modules/goober/src/index.js create mode 100644 node_modules/goober/src/styled.js create mode 100644 node_modules/goober/typings.json create mode 100644 node_modules/react-dom/LICENSE create mode 100644 node_modules/react-dom/README.md create mode 100644 node_modules/react-dom/cjs/react-dom-client.development.js create mode 100644 node_modules/react-dom/cjs/react-dom-client.production.js create mode 100644 node_modules/react-dom/cjs/react-dom-profiling.development.js create mode 100644 node_modules/react-dom/cjs/react-dom-profiling.profiling.js create mode 100644 node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js create mode 100644 node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js create mode 100644 node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js create mode 100644 node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js create mode 100644 node_modules/react-dom/cjs/react-dom-server.browser.development.js create mode 100644 node_modules/react-dom/cjs/react-dom-server.browser.production.js create mode 100644 node_modules/react-dom/cjs/react-dom-server.bun.development.js create mode 100644 node_modules/react-dom/cjs/react-dom-server.bun.production.js create mode 100644 node_modules/react-dom/cjs/react-dom-server.edge.development.js create mode 100644 node_modules/react-dom/cjs/react-dom-server.edge.production.js create mode 100644 node_modules/react-dom/cjs/react-dom-server.node.development.js create mode 100644 node_modules/react-dom/cjs/react-dom-server.node.production.js create mode 100644 node_modules/react-dom/cjs/react-dom-test-utils.development.js create mode 100644 node_modules/react-dom/cjs/react-dom-test-utils.production.js create mode 100644 node_modules/react-dom/cjs/react-dom.development.js create mode 100644 node_modules/react-dom/cjs/react-dom.production.js create mode 100644 node_modules/react-dom/cjs/react-dom.react-server.development.js create mode 100644 node_modules/react-dom/cjs/react-dom.react-server.production.js create mode 100644 node_modules/react-dom/client.js create mode 100644 node_modules/react-dom/client.react-server.js create mode 100644 node_modules/react-dom/index.js create mode 100644 node_modules/react-dom/package.json create mode 100644 node_modules/react-dom/profiling.js create mode 100644 node_modules/react-dom/profiling.react-server.js create mode 100644 node_modules/react-dom/react-dom.react-server.js create mode 100644 node_modules/react-dom/server.browser.js create mode 100644 node_modules/react-dom/server.bun.js create mode 100644 node_modules/react-dom/server.edge.js create mode 100644 node_modules/react-dom/server.js create mode 100644 node_modules/react-dom/server.node.js create mode 100644 node_modules/react-dom/server.react-server.js create mode 100644 node_modules/react-dom/static.browser.js create mode 100644 node_modules/react-dom/static.edge.js create mode 100644 node_modules/react-dom/static.js create mode 100644 node_modules/react-dom/static.node.js create mode 100644 node_modules/react-dom/static.react-server.js create mode 100644 node_modules/react-dom/test-utils.js create mode 100644 node_modules/react-hot-toast/LICENSE create mode 100644 node_modules/react-hot-toast/README.md create mode 100644 node_modules/react-hot-toast/dist/index.d.ts create mode 100644 node_modules/react-hot-toast/dist/index.js create mode 100644 node_modules/react-hot-toast/dist/index.js.map create mode 100644 node_modules/react-hot-toast/dist/index.mjs create mode 100644 node_modules/react-hot-toast/dist/index.mjs.map create mode 100644 node_modules/react-hot-toast/headless/index.d.ts create mode 100644 node_modules/react-hot-toast/headless/index.js create mode 100644 node_modules/react-hot-toast/headless/index.js.map create mode 100644 node_modules/react-hot-toast/headless/index.mjs create mode 100644 node_modules/react-hot-toast/headless/index.mjs.map create mode 100644 node_modules/react-hot-toast/package.json create mode 100644 node_modules/react-hot-toast/src/components/checkmark.tsx create mode 100644 node_modules/react-hot-toast/src/components/error.tsx create mode 100644 node_modules/react-hot-toast/src/components/loader.tsx create mode 100644 node_modules/react-hot-toast/src/components/toast-bar.tsx create mode 100644 node_modules/react-hot-toast/src/components/toast-icon.tsx create mode 100644 node_modules/react-hot-toast/src/components/toaster.tsx create mode 100644 node_modules/react-hot-toast/src/core/store.ts create mode 100644 node_modules/react-hot-toast/src/core/toast.ts create mode 100644 node_modules/react-hot-toast/src/core/types.ts create mode 100644 node_modules/react-hot-toast/src/core/use-toaster.ts create mode 100644 node_modules/react-hot-toast/src/core/utils.ts create mode 100644 node_modules/react-hot-toast/src/headless/index.ts create mode 100644 node_modules/react-hot-toast/src/index.ts create mode 100644 node_modules/react/LICENSE create mode 100644 node_modules/react/README.md create mode 100644 node_modules/react/cjs/react-compiler-runtime.development.js create mode 100644 node_modules/react/cjs/react-compiler-runtime.production.js create mode 100644 node_modules/react/cjs/react-compiler-runtime.profiling.js create mode 100644 node_modules/react/cjs/react-jsx-dev-runtime.development.js create mode 100644 node_modules/react/cjs/react-jsx-dev-runtime.production.js create mode 100644 node_modules/react/cjs/react-jsx-dev-runtime.profiling.js create mode 100644 node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js create mode 100644 node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js create mode 100644 node_modules/react/cjs/react-jsx-runtime.development.js create mode 100644 node_modules/react/cjs/react-jsx-runtime.production.js create mode 100644 node_modules/react/cjs/react-jsx-runtime.profiling.js create mode 100644 node_modules/react/cjs/react-jsx-runtime.react-server.development.js create mode 100644 node_modules/react/cjs/react-jsx-runtime.react-server.production.js create mode 100644 node_modules/react/cjs/react.development.js create mode 100644 node_modules/react/cjs/react.production.js create mode 100644 node_modules/react/cjs/react.react-server.development.js create mode 100644 node_modules/react/cjs/react.react-server.production.js create mode 100644 node_modules/react/compiler-runtime.js create mode 100644 node_modules/react/index.js create mode 100644 node_modules/react/jsx-dev-runtime.js create mode 100644 node_modules/react/jsx-dev-runtime.react-server.js create mode 100644 node_modules/react/jsx-runtime.js create mode 100644 node_modules/react/jsx-runtime.react-server.js create mode 100644 node_modules/react/package.json create mode 100644 node_modules/react/react.react-server.js create mode 100644 node_modules/scheduler/LICENSE create mode 100644 node_modules/scheduler/README.md create mode 100644 node_modules/scheduler/cjs/scheduler-unstable_mock.development.js create mode 100644 node_modules/scheduler/cjs/scheduler-unstable_mock.production.js create mode 100644 node_modules/scheduler/cjs/scheduler-unstable_post_task.development.js create mode 100644 node_modules/scheduler/cjs/scheduler-unstable_post_task.production.js create mode 100644 node_modules/scheduler/cjs/scheduler.development.js create mode 100644 node_modules/scheduler/cjs/scheduler.native.development.js create mode 100644 node_modules/scheduler/cjs/scheduler.native.production.js create mode 100644 node_modules/scheduler/cjs/scheduler.production.js create mode 100644 node_modules/scheduler/index.js create mode 100644 node_modules/scheduler/index.native.js create mode 100644 node_modules/scheduler/package.json create mode 100644 node_modules/scheduler/unstable_mock.js create mode 100644 node_modules/scheduler/unstable_post_task.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/main/java/com/catchtable/coupon/dto/read/CouponTemplateActiveResponse.java diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000..e64c1b6 --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,69 @@ +{ + "name": "backend", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/goober": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.18.tgz", + "integrity": "sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==", + "license": "MIT", + "peerDependencies": { + "csstype": "^3.0.10" + } + }, + "node_modules/react": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.5" + } + }, + "node_modules/react-hot-toast": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.6.0.tgz", + "integrity": "sha512-bH+2EBMZ4sdyou/DPrfgIouFpcRLCJ+HoCA32UoAYHn6T3Ur5yfcDCeSr5mwldl6pFOsiocmrXMuoCJ1vV8bWg==", + "license": "MIT", + "dependencies": { + "csstype": "^3.1.3", + "goober": "^2.1.16" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT", + "peer": true + } + } +} diff --git a/node_modules/csstype/LICENSE b/node_modules/csstype/LICENSE new file mode 100644 index 0000000..ac06f62 --- /dev/null +++ b/node_modules/csstype/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2017-2018 Fredrik Nicol + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/csstype/README.md b/node_modules/csstype/README.md new file mode 100644 index 0000000..9b3391a --- /dev/null +++ b/node_modules/csstype/README.md @@ -0,0 +1,291 @@ +# CSSType + +[![npm](https://img.shields.io/npm/v/csstype.svg)](https://www.npmjs.com/package/csstype) + +TypeScript and Flow definitions for CSS, generated by [data from MDN](https://github.com/mdn/data). It provides autocompletion and type checking for CSS properties and values. + +**TypeScript** + +```ts +import type * as CSS from 'csstype'; + +const style: CSS.Properties = { + colour: 'white', // Type error on property + textAlign: 'middle', // Type error on value +}; +``` + +**Flow** + +```js +// @flow strict +import * as CSS from 'csstype'; + +const style: CSS.Properties<> = { + colour: 'white', // Type error on property + textAlign: 'middle', // Type error on value +}; +``` + +_Further examples below will be in TypeScript!_ + +## Getting started + +```sh +$ npm install csstype +``` + +## Table of content + +- [Style types](#style-types) +- [At-rule types](#at-rule-types) +- [Pseudo types](#pseudo-types) +- [Generics](#generics) +- [Usage](#usage) +- [What should I do when I get type errors?](#what-should-i-do-when-i-get-type-errors) +- [Version 3.0](#version-30) +- [Contributing](#contributing) + +## Style types + +Properties are categorized in different uses and in several technical variations to provide typings that suits as many as possible. + +| | Default | `Hyphen` | `Fallback` | `HyphenFallback` | +| -------------- | -------------------- | -------------------------- | ---------------------------- | ---------------------------------- | +| **All** | `Properties` | `PropertiesHyphen` | `PropertiesFallback` | `PropertiesHyphenFallback` | +| **`Standard`** | `StandardProperties` | `StandardPropertiesHyphen` | `StandardPropertiesFallback` | `StandardPropertiesHyphenFallback` | +| **`Vendor`** | `VendorProperties` | `VendorPropertiesHyphen` | `VendorPropertiesFallback` | `VendorPropertiesHyphenFallback` | +| **`Obsolete`** | `ObsoleteProperties` | `ObsoletePropertiesHyphen` | `ObsoletePropertiesFallback` | `ObsoletePropertiesHyphenFallback` | +| **`Svg`** | `SvgProperties` | `SvgPropertiesHyphen` | `SvgPropertiesFallback` | `SvgPropertiesHyphenFallback` | + +Categories: + +- **All** - Includes `Standard`, `Vendor`, `Obsolete` and `Svg` +- **`Standard`** - Current properties and extends subcategories `StandardLonghand` and `StandardShorthand` _(e.g. `StandardShorthandProperties`)_ +- **`Vendor`** - Vendor prefixed properties and extends subcategories `VendorLonghand` and `VendorShorthand` _(e.g. `VendorShorthandProperties`)_ +- **`Obsolete`** - Removed or deprecated properties +- **`Svg`** - SVG-specific properties + +Variations: + +- **Default** - JavaScript (camel) cased property names +- **`Hyphen`** - CSS (kebab) cased property names +- **`Fallback`** - Also accepts array of values e.g. `string | string[]` + +## At-rule types + +At-rule interfaces with descriptors. + +**TypeScript**: These will be found in the `AtRule` namespace, e.g. `AtRule.Viewport`. +**Flow**: These will be prefixed with `AtRule$`, e.g. `AtRule$Viewport`. + +| | Default | `Hyphen` | `Fallback` | `HyphenFallback` | +| -------------------- | -------------- | -------------------- | ---------------------- | ---------------------------- | +| **`@counter-style`** | `CounterStyle` | `CounterStyleHyphen` | `CounterStyleFallback` | `CounterStyleHyphenFallback` | +| **`@font-face`** | `FontFace` | `FontFaceHyphen` | `FontFaceFallback` | `FontFaceHyphenFallback` | +| **`@viewport`** | `Viewport` | `ViewportHyphen` | `ViewportFallback` | `ViewportHyphenFallback` | + +## Pseudo types + +String literals of pseudo classes and pseudo elements + +- `Pseudos` + + Extends: + - `AdvancedPseudos` + + Function-like pseudos e.g. `:not(:first-child)`. The string literal contains the value excluding the parenthesis: `:not`. These are separated because they require an argument that results in infinite number of variations. + + - `SimplePseudos` + + Plain pseudos e.g. `:hover` that can only be **one** variation. + +## Generics + +All interfaces has two optional generic argument to define length and time: `CSS.Properties` + +- **Length** is the first generic parameter and defaults to `string | 0` because `0` is the only [length where the unit identifier is optional](https://drafts.csswg.org/css-values-3/#lengths). You can specify this, e.g. `string | number`, for platforms and libraries that accepts any numeric value as length with a specific unit. + ```tsx + const style: CSS.Properties = { + width: 100, + }; + ``` +- **Time** is the second generic argument and defaults to `string`. You can specify this, e.g. `string | number`, for platforms and libraries that accepts any numeric value as length with a specific unit. + ```tsx + const style: CSS.Properties = { + transitionDuration: 1000, + }; + ``` + +## Usage + +```ts +import type * as CSS from 'csstype'; + +const style: CSS.Properties = { + width: '10px', + margin: '1em', +}; +``` + +In some cases, like for CSS-in-JS libraries, an array of values is a way to provide fallback values in CSS. Using `CSS.PropertiesFallback` instead of `CSS.Properties` will add the possibility to use any property value as an array of values. + +```ts +import type * as CSS from 'csstype'; + +const style: CSS.PropertiesFallback = { + display: ['-webkit-flex', 'flex'], + color: 'white', +}; +``` + +There's even string literals for pseudo selectors and elements. + +```ts +import type * as CSS from 'csstype'; + +const pseudos: { [P in CSS.SimplePseudos]?: CSS.Properties } = { + ':hover': { + display: 'flex', + }, +}; +``` + +Hyphen cased (kebab cased) properties are provided in `CSS.PropertiesHyphen` and `CSS.PropertiesHyphenFallback`. It's not **not** added by default in `CSS.Properties`. To allow both of them, you can simply extend with `CSS.PropertiesHyphen` or/and `CSS.PropertiesHyphenFallback`. + +```ts +import type * as CSS from 'csstype'; + +interface Style extends CSS.Properties, CSS.PropertiesHyphen {} + +const style: Style = { + 'flex-grow': 1, + 'flex-shrink': 0, + 'font-weight': 'normal', + backgroundColor: 'white', +}; +``` + +Adding type checked CSS properties to a `HTMLElement`. + +```ts +import type * as CSS from 'csstype'; + +const style: CSS.Properties = { + color: 'red', + margin: '1em', +}; + +let button = document.createElement('button'); + +Object.assign(button.style, style); +``` + +## What should I do when I get type errors? + +The goal is to have as perfect types as possible and we're trying to do our best. But with CSS Custom Properties, the CSS specification changing frequently and vendors implementing their own specifications with new releases sometimes causes type errors even if it should work. Here's some steps you could take to get it fixed: + +_If you're using CSS Custom Properties you can step directly to step 3._ + +1. **First of all, make sure you're doing it right.** A type error could also indicate that you're not :wink: + - Some CSS specs that some vendors has implemented could have been officially rejected or haven't yet received any official acceptance and are therefor not included + - If you're using TypeScript, [type widening](https://blog.mariusschulz.com/2017/02/04/TypeScript-2-1-literal-type-widening) could be the reason you get `Type 'string' is not assignable to...` errors + +2. **Have a look in [issues](https://github.com/frenic/csstype/issues) to see if an issue already has been filed. If not, create a new one.** To help us out, please refer to any information you have found. +3. Fix the issue locally with **TypeScript** (Flow further down): + - The recommended way is to use **module augmentation**. Here's a few examples: + + ```ts + // My css.d.ts file + import type * as CSS from 'csstype'; + + declare module 'csstype' { + interface Properties { + // Add a missing property + WebkitRocketLauncher?: string; + + // Add a CSS Custom Property + '--theme-color'?: 'black' | 'white'; + + // Allow namespaced CSS Custom Properties + [index: `--theme-${string}`]: any; + + // Allow any CSS Custom Properties + [index: `--${string}`]: any; + + // ...or allow any other property + [index: string]: any; + } + } + ``` + + - The alternative way is to use **type assertion**. Here's a few examples: + + ```ts + const style: CSS.Properties = { + // Add a missing property + ['WebkitRocketLauncher' as any]: 'launching', + + // Add a CSS Custom Property + ['--theme-color' as any]: 'black', + }; + ``` + + Fix the issue locally with **Flow**: + - Use **type assertion**. Here's a few examples: + + ```js + const style: $Exact> = { + // Add a missing property + [('WebkitRocketLauncher': any)]: 'launching', + + // Add a CSS Custom Property + [('--theme-color': any)]: 'black', + }; + ``` + +## Version 3.2 + +- **No longer compatible with version 2** + Conflicts may occur when both version ^3.2.0 and ^2.0.0 are installed. Potential fix for Npm would be to force resolution in `package.json`: + ```json + { + "overrides": { + "csstype": "^3.2.0" + } + } + ``` + +## Version 3.1 + +- **Data types are exposed** + TypeScript: `DataType.Color` + Flow: `DataType$Color` + +## Version 3.0 + +- **All property types are exposed with namespace** + TypeScript: `Property.AlignContent` (was `AlignContentProperty` before) + Flow: `Property$AlignContent` +- **All at-rules are exposed with namespace** + TypeScript: `AtRule.FontFace` (was `FontFace` before) + Flow: `AtRule$FontFace` +- **Data types are NOT exposed** + E.g. `Color` and `Box`. Because the generation of data types may suddenly be removed or renamed. +- **TypeScript hack for autocompletion** + Uses `(string & {})` for literal string unions and `(number & {})` for literal number unions ([related issue](https://github.com/microsoft/TypeScript/issues/29729)). Utilize `PropertyValue` to unpack types from e.g. `(string & {})` to `string`. +- **New generic for time** + Read more on the ["Generics"](#generics) section. +- **Flow types improvements** + Flow Strict enabled and exact types are used. + +## Contributing + +**Never modify `index.d.ts` and `index.js.flow` directly. They are generated automatically and committed so that we can easily follow any change it results in.** Therefor it's important that you run `$ git config merge.ours.driver true` after you've forked and cloned. That setting prevents merge conflicts when doing rebase. + +### Commands + +- `npm run build` Generates typings and type checks them +- `npm run watch` Runs build on each save +- `npm run test` Runs the tests +- `npm run lazy` Type checks, lints and formats everything diff --git a/node_modules/csstype/index.d.ts b/node_modules/csstype/index.d.ts new file mode 100644 index 0000000..da0affd --- /dev/null +++ b/node_modules/csstype/index.d.ts @@ -0,0 +1,22569 @@ +export {}; + +export type PropertyValue = + TValue extends Array ? Array : TValue extends infer TUnpacked & {} ? TUnpacked : TValue; + +export type Fallback = { [P in keyof T]: T[P] | readonly NonNullable[] }; + +export interface StandardLonghandProperties { + /** + * This feature is not Baseline because it does not work in some of the most widely-used browsers. + * + * **Syntax**: `auto | ` + * + * **Initial value**: `auto` + * + * | Chrome | Firefox | Safari | Edge | IE | + * | :----: | :-----: | :------: | :----: | :-: | + * | **93** | **92** | **15.4** | **93** | No | + * + * @see https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/accent-color + */ + accentColor?: Property.AccentColor | undefined; + /** + * This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015. + * + * **Syntax**: `normal | | | ? ` + * + * **Initial value**: `normal` + * + * | Chrome | Firefox | Safari | Edge | IE | + * | :------: | :-----: | :-----: | :----: | :----: | + * | **29** | **28** | **9** | **12** | **11** | + * | 21 _-x-_ | | 7 _-x-_ | | | + * + * @see https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/align-content + */ + alignContent?: Property.AlignContent | undefined; + /** + * This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015. + * + * **Syntax**: `normal | stretch | | [ ? ] | anchor-center` + * + * **Initial value**: `normal` + * + * | Chrome | Firefox | Safari | Edge | IE | + * | :------: | :-----: | :-----: | :----: | :----: | + * | **29** | **20** | **9** | **12** | **11** | + * | 21 _-x-_ | | 7 _-x-_ | | | + * + * @see https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/align-items + */ + alignItems?: Property.AlignItems | undefined; + /** + * This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015. + * + * **Syntax**: `auto | normal | stretch | | ? | anchor-center` + * + * **Initial value**: `auto` + * + * | Chrome | Firefox | Safari | Edge | IE | + * | :------: | :-----: | :-----: | :----: | :----: | + * | **29** | **20** | **9** | **12** | **10** | + * | 21 _-x-_ | | 7 _-x-_ | | | + * + * @see https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/align-self + */ + alignSelf?: Property.AlignSelf | undefined; + /** + * **Syntax**: `[ normal | | | ? ]#` + * + * **Initial value**: `normal` + */ + alignTracks?: Property.AlignTracks | undefined; + /** + * This feature is not Baseline because it does not work in some of the most widely-used browsers. + * + * **Syntax**: `baseline | alphabetic | ideographic | middle | central | mathematical | text-before-edge | text-after-edge` + * + * **Initial value**: `baseline` + * + * | Chrome | Firefox | Safari | Edge | IE | + * | :----: | :-----: | :-----: | :----: | :-: | + * | **1** | No | **5.1** | **79** | No | + * + * @see https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/alignment-baseline + */ + alignmentBaseline?: Property.AlignmentBaseline | undefined; + /** + * This feature is not Baseline because it does not work in some of the most widely-used browsers. + * + * **Syntax**: `none | #` + * + * **Initial value**: `none` + * + * | Chrome | Firefox | Safari | Edge | IE | + * | :-----: | :---------: | :----: | :-----: | :-: | + * | **125** | **preview** | **26** | **125** | No | + * + * @see https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/anchor-name + */ + anchorName?: Property.AnchorName | undefined; + /** + * **Syntax**: `none | all | #` + * + * **Initial value**: `none` + * + * | Chrome | Firefox | Safari | Edge | IE | + * | :-----: | :---------: | :----: | :-----: | :-: | + * | **131** | **preview** | **26** | **131** | No | + */ + anchorScope?: Property.AnchorScope | undefined; + /** + * Since July 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers. + * + * **Syntax**: `#` + * + * **Initial value**: `replace` + * + * | Chrome | Firefox | Safari | Edge | IE | + * | :-----: | :-----: | :----: | :-----: | :-: | + * | **112** | **115** | **16** | **112** | No | + * + * @see https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/animation-composition + */ + animationComposition?: Property.AnimationComposition | undefined; + /** + * This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015. + * + * **Syntax**: `

+ goober +

+ +🥜 goober, a less than 1KB css-in-js solution. + +[![Backers on Open Collective](https://opencollective.com/goober/backers/badge.svg)](#backers) +[![Sponsors on Open Collective](https://opencollective.com/goober/sponsors/badge.svg)](#sponsors) + +[![version](https://img.shields.io/npm/v/goober)](https://www.npmjs.com/package/goober) +[![status](https://travis-ci.org/cristianbote/goober.svg?branch=master)](https://travis-ci.org/cristianbote/goober) +[![gzip size](https://img.badgesize.io/https://unpkg.com/goober@latest/dist/goober.modern.js?compression=gzip)](https://unpkg.com/goober) +[![downloads](https://img.shields.io/npm/dm/goober)](https://www.npmjs.com/package/goober) +[![coverage](https://img.shields.io/codecov/c/github/cristianbote/goober.svg?maxAge=2592000)](https://codecov.io/github/cristianbote/goober?branch=master) +[![Slack](https://img.shields.io/badge/slack-join-orange)](https://join.slack.com/t/gooberdev/shared_invite/enQtOTM5NjUyOTcwNzI1LWUwNzg0NTQwODY1NDJmMzQ2NzdlODI4YTM3NWUwYjlkY2ZkNGVmMTFlNGMwZGUyOWQyZmI4OTYwYmRiMzE0NGQ) + +# 🪒 The Great Shave Off Challenge + +Can you shave off bytes from goober? Do it and you're gonna get paid! [More info here](https://goober.rocks/the-great-shave-off) + +# Motivation + +I've always wondered if you could get a working solution for css-in-js with a smaller footprint. While I was working on a side project I wanted to use styled-components, or more accurately the `styled` pattern. Looking at the JavaScript bundle sizes, I quickly realized that I would have to include ~12kB([styled-components](https://github.com/styled-components/styled-components)) or ~11kB([emotion](https://github.com/emotion-js/emotion)) just so I can use the `styled` paradigm. So, I embarked on a mission to create a smaller alternative for these well established APIs. + +# Why the peanuts emoji? + +It's a pun on the tagline. + +> css-in-js at the cost of peanuts! +> 🥜goober + +# Talks and Podcasts + +* [React Round Up](https://reactroundup.com/wrangle-your-css-in-js-for-peanuts-using-goober-ft-cristian-bote-rru-177) 👉 https://reactroundup.com/wrangle-your-css-in-js-for-peanuts-using-goober-ft-cristian-bote-rru-177 +* ReactDay Berlin 2019 👉 https://www.youtube.com/watch?v=k4-AVy3acqk +* [PodRocket](https://podrocket.logrocket.com/) by [LogRocket](https://logrocket.com/) 👉 https://podrocket.logrocket.com/goober +* [ngParty](https://www.ngparty.cz/) 👉 https://www.youtube.com/watch?v=XKFvOBDPeB0 + +# Table of contents + +- [Usage](#usage) +- [Examples](#examples) +- [Tradeoffs](#comparison-and-tradeoffs) +- [SSR](#ssr) +- [Benchmarks](#benchmarks) + - [Browser](#browser) + - [SSR](#ssr-1) +- [API](#api) + - [styled](#styledtagname-string--function-forwardref-function) + - [setup](#setuppragma-function-prefixer-function-theme-function-forwardprops-function) + - [With prefixer](#with-prefixer) + - [With theme](#with-theme) + - [With forwardProps](#with-forwardProps) + - [css](#csstaggedtemplate) + - [targets](#targets) + - [extractCss](#extractcsstarget) + - [createGlobalStyles](#createglobalstyles) + - [keyframes](#keyframes) + - [shouldForwardProp](#shouldForwardProp) +- [Integrations](#integrations) + - [Babel Plugin](#babel-plugin) + - [Babel Macro Plugin](#babel-macro-plugin) + - [Next.js](#nextjs) + - [Gatsby](#gatsby) + - [Preact CLI Plugin](#preact-cli-plugin) + - [CSS Prop](#css-prop) +- [Features](#features) + - [Sharing Style](#sharing-style) + - [Autoprefixer](#autoprefixer) + - [TypeScript](#typescript) + - [Content Security Policy (CSP)](#content-security-policy-csp)- +- [Browser Support](#browser-support) +- [Contributing](#contributing) + +# Usage + +The API is inspired by emotion `styled` function. Meaning, you call it with your `tagName`, and it returns a vDOM component for that tag. Note, `setup` needs to be ran before the `styled` function is used. + +```jsx +import { h } from 'preact'; +import { styled, setup } from 'goober'; + +// Should be called here, and just once +setup(h); + +const Icon = styled('span')` + display: flex; + flex: 1; + color: red; +`; + +const Button = styled('button')` + background: dodgerblue; + color: white; + border: ${Math.random()}px solid white; + + &:focus, + &:hover { + padding: 1em; + } + + .otherClass { + margin: 0; + } + + ${Icon} { + color: black; + } +`; +``` + +# Examples + +- [Vanilla](https://codesandbox.io/s/qlywyp7z4q) +- [React](https://codesandbox.io/s/k0mnp40n7v) +- [Preact](https://codesandbox.io/s/r15wj2qm7o) +- [SSR with Preact](https://codesandbox.io/s/7m9zzl6746) +- [Fre](https://codesandbox.io/s/fre-goober-ffqjv) + +# Comparison and tradeoffs + +In this section I would like to compare goober, as objectively as I can, with the latest versions of two most well known css-in-js packages: styled-components and emotion. + +I've used the following markers to reflect the state of each feature: + +- ✅ Supported +- 🟡 Partially supported +- 🛑 Not supported + +Here we go: + +| Feature name | Goober | Styled Components | Emotion | +| ---------------------- | ------- | ----------------- | ------- | +| Base bundle size | 1.25 kB | 12.6 kB | 7.4 kB | +| Framework agnostic | ✅ | 🛑 | 🛑 | +| Render with target \*1 | ✅ | 🛑 | 🛑 | +| `css` api | ✅ | ✅ | ✅ | +| `css` prop | ✅ | ✅ | ✅ | +| `styled` | ✅ | ✅ | ✅ | +| `styled.` | ✅ \*2 | ✅ | ✅ | +| default export | 🛑 | ✅ | ✅ | +| `as` | ✅ | ✅ | ✅ | +| `.withComponent` | 🛑 | ✅ | ✅ | +| `.attrs` | 🛑 | ✅ | 🛑 | +| `shouldForwardProp` | ✅ | ✅ | ✅ | +| `keyframes` | ✅ | ✅ | ✅ | +| Labels | 🛑 | 🛑 | ✅ | +| ClassNames | 🛑 | 🛑 | ✅ | +| Global styles | ✅ | ✅ | ✅ | +| SSR | ✅ | ✅ | ✅ | +| Theming | ✅ | ✅ | ✅ | +| Tagged Templates | ✅ | ✅ | ✅ | +| Object styles | ✅ | ✅ | ✅ | +| Dynamic styles | ✅ | ✅ | ✅ | + +Footnotes + +- [1] `goober` can render in _any_ dom target. Meaning you can use `goober` to define scoped styles in any context. Really useful for web-components. +- [2] Supported only via `babel-plugin-transform-goober` + +# SSR + +You can get the critical CSS for SSR via `extractCss`. Take a look at this example: [CodeSandbox: SSR with Preact and goober](https://codesandbox.io/s/7m9zzl6746) and read the full explanation for `extractCSS` and `targets` below. + +# Benchmarks + +The results are included inside the build output as well. + +## Browser + +Coming soon! + +## SSR + +The benchmark is testing the following scenario: + +```jsx +import styled from ''; + +// Create the dynamic styled component +const Foo = styled('div')((props) => ({ + opacity: props.counter > 0.5 ? 1 : 0, + '@media (min-width: 1px)': { + rule: 'all' + }, + '&:hover': { + another: 1, + display: 'space' + } +})); + +// Serialize the component +renderToString(); +``` + +The results are: + +``` +goober x 200,437 ops/sec ±1.93% (87 runs sampled) +styled-components@5.2.1 x 12,650 ops/sec ±9.09% (48 runs sampled) +emotion@11.0.0 x 104,229 ops/sec ±2.06% (88 runs sampled) + +Fastest is: goober +``` + +# API + +As you can see, goober supports most of the CSS syntax. If you find any issues, please submit a ticket, or open a PR with a fix. + +### `styled(tagName: String | Function, forwardRef?: Function)` + +- `@param {String|Function} tagName` The name of the DOM element you'd like the styles to be applied to +- `@param {Function} forwardRef` Forward ref function. Usually `React.forwardRef` +- `@returns {Function}` Returns the tag template function. + +```js +import { styled } from 'goober'; + +const Btn = styled('button')` + border-radius: 4px; +`; +``` + +#### Different ways of customizing the styles + +##### Tagged templates functions + +```js +import { styled } from 'goober'; + +const Btn = styled('button')` + border-radius: ${(props) => props.size}px; +`; + +; +``` + +##### Function that returns a string + +```js +import { styled } from 'goober'; + +const Btn = styled('button')( + (props) => ` + border-radius: ${props.size}px; +` +); + +; +``` + +##### JSON/Object + +```js +import { styled } from 'goober'; + +const Btn = styled('button')((props) => ({ + borderRadius: props.size + 'px' +})); + +; +``` + +##### Arrays + +```js +import { styled } from 'goober'; + +const Btn = styled('button')([ + { color: 'tomato' }, + ({ isPrimary }) => ({ background: isPrimary ? 'cyan' : 'gray' }) +]); + +; // This will render the `Button` with `background: gray;` +; // This will render the `Button` with `background: cyan;` +``` + +##### Forward ref function + +As goober is JSX library agnostic, you need to pass in the forward ref function for the library you are using. Here's how you do it for React. + +```js +const Title = styled('h1', React.forwardRef)` + font-weight: bold; + color: dodgerblue; +`; +``` + +### `setup(pragma: Function, prefixer?: Function, theme?: Function, forwardProps?: Function)` + +The call to `setup()` should occur only once. It should be called in the entry file of your project. + +Given the fact that `react` uses `createElement` for the transformed elements and `preact` uses `h`, `setup` should be called with the proper _pragma_ function. This was added to reduce the bundled size and being able to bundle an esmodule version. At the moment, it's the best tradeoff I can think of. + +```js +import React from 'react'; +import { setup } from 'goober'; + +setup(React.createElement); +``` + +#### With prefixer + +```js +import React from 'react'; +import { setup } from 'goober'; + +const customPrefixer = (key, value) => `${key}: ${value};\n`; + +setup(React.createElement, customPrefixer); +``` + +#### With theme + +```js +import React, { createContext, useContext, createElement } from 'react'; +import { setup, styled } from 'goober'; + +const theme = { primary: 'blue' }; +const ThemeContext = createContext(theme); +const useTheme = () => useContext(ThemeContext); + +setup(createElement, undefined, useTheme); + +const ContainerWithTheme = styled('div')` + color: ${(props) => props.theme.primary}; +`; +``` + +#### With forwardProps + +The `forwardProps` function offers a way to achieve the same `shouldForwardProps` functionality as emotion and styled-components (with transient props) offer. The difference here is that the function receives the whole props and you are in charge of removing the props that should not end up in the DOM. + +This is a super useful functionality when paired with theme object, variants, or any other customisation one might need. + +```js +import React from 'react'; +import { setup, styled } from 'goober'; + +setup(React.createElement, undefined, undefined, (props) => { + for (let prop in props) { + // Or any other conditions. + // This could also check if this is a dev build and not remove the props + if (prop === 'size') { + delete props[prop]; + } + } +}); +``` + +The functionality of "transient props" (with a "\$" prefix) can be implemented as follows: + +```js +import React from 'react'; +import { setup, styled } from 'goober'; + +setup(React.createElement, undefined, undefined, (props) => { + for (let prop in props) { + if (prop[0] === '$') { + delete props[prop]; + } + } +}); +``` + +Alternatively you can use `goober/should-forward-prop` addon to pass only the filter function and not have to deal with the full `props` object. + +```js +import React from 'react'; +import { setup, styled } from 'goober'; +import { shouldForwardProp } from 'goober/should-forward-prop'; + +setup( + React.createElement, + undefined, + undefined, + // This package accepts a `filter` function. If you return false that prop + // won't be included in the forwarded props. + shouldForwardProp((prop) => { + return prop !== 'size'; + }) +); +``` + +### `css(taggedTemplate)` + +- `@returns {String}` Returns the className. + +To create a className, you need to call `css` with your style rules in a tagged template. + +```js +import { css } from "goober"; + +const BtnClassName = css` + border-radius: 4px; +`; + +// vanilla JS +const btn = document.querySelector("#btn"); +// BtnClassName === 'g016232' +btn.classList.add(BtnClassName); + +// JSX +// BtnClassName === 'g016232' +const App => +``` + +#### Different ways of customizing `css` + +##### Passing props to `css` tagged templates + +```js +import { css } from 'goober'; + +// JSX +const CustomButton = (props) => ( + +); +``` + +##### Using `css` with JSON/Object + +```js +import { css } from 'goober'; +const BtnClassName = (props) => + css({ + background: props.color, + borderRadius: props.radius + 'px' + }); +``` + +**Notice:** using `css` with object can reduce your bundle size. + +We can also declare styles at the top of the file by wrapping `css` into a function that we call to get the className. + +```js +import { css } from 'goober'; + +const BtnClassName = (props) => css` + border-radius: ${props.size}px; +`; + +// vanilla JS +// BtnClassName({size:20}) -> g016360 +const btn = document.querySelector('#btn'); +btn.classList.add(BtnClassName({ size: 20 })); + +// JSX +// BtnClassName({size:20}) -> g016360 +const App = () => ; +``` + +The difference between calling `css` directly and wrapping into a function is the timing of its execution. The former is when the component(file) is imported, the latter is when it is actually rendered. + +If you use `extractCSS` for SSR, you may prefer to use the latter, or the `styled` API to avoid inconsistent results. + +### `targets` + +By default, goober will append a style tag to the `` of a document. You might want to target a different node, for instance, when you want to use goober with web components (so you'd want it to append style tags to individual shadowRoots). For this purpose, you can `.bind` a new target to the `styled` and `css` methods: + +```js +import * as goober from 'goober'; +const target = document.getElementById('target'); +const css = goober.css.bind({ target: target }); +const styled = goober.styled.bind({ target: target }); +``` + +If you don't provide a target, goober always defaults to `` and in environments without a DOM (think certain SSR solutions), it will just use a plain string cache to store generated styles which you can extract with `extractCSS`(see below). + +### `extractCss(target?)` + +- `@returns {String}` + +Returns the ``; + +// Note: To be able to `hydrate` the styles you should use the proper `id` so `goober` can pick it up and use it as the target from now on +``` + +### `createGlobalStyles` + +To define your global styles you need to create a `GlobalStyles` component and use it as part of your tree. The `createGlobalStyles` is available at `goober/global` addon. + +```js +import { createGlobalStyles } from 'goober/global'; + +const GlobalStyles = createGlobalStyles` + html, + body { + background: light; + } + + * { + box-sizing: border-box; + } +`; + +export default function App() { + return ( +
+ + + +
+ ) +} +``` + +#### How about using `glob` function directly? + +Before the global addon, `goober/global`, there was a method named `glob` that was part of the main package that would do the same thing, more or less. Having only that method to define global styles usually led to missing global styles from the extracted css, since the pattern did not enforce the evaluation of the styles at render time. The `glob` method is still exported from `goober/global`, in case you have a hard dependency on it. It still has the same API: + +```js +import { glob } from 'goober'; + +glob` + html, + body { + background: light; + } + + * { + box-sizing: border-box; + } +`; +``` + +### `keyframes` + +`keyframes` is a helpful method to define reusable animations that can be decoupled from the main style declaration and shared across components. + +```js +import { keyframes } from 'goober'; + +const rotate = keyframes` + from, to { + transform: rotate(0deg); + } + + 50% { + transform: rotate(180deg); + } +`; + +const Wicked = styled('div')` + background: tomato; + color: white; + animation: ${rotate} 1s ease-in-out; +`; +``` + +### `shouldForwardProp` + +To implement the `shouldForwardProp` without the need to provide the full loop over `props` you can use the `goober/should-forward-prop` addon. + +```js +import { h } from 'preact'; +import { setup } from 'goober'; +import { shouldForwardProp } from 'goober/should-forward-prop'; + +setup( + h, + undefined, + undefined, + shouldForwardProp((prop) => { + // Do NOT forward props that start with `$` symbol + return prop['0'] !== '$'; + }) +); +``` + +# Integrations + +## Babel plugin + +You're in love with the `styled.div` syntax? Fear no more! We got you covered with a babel plugin that will take your lovely syntax from `styled.tag` and translate it to goober's `styled("tag")` call. + +```sh +npm i --save-dev babel-plugin-transform-goober +# or +yarn add --dev babel-plugin-transform-goober +``` + +Visit the package in here for more info (https://github.com/cristianbote/goober/tree/master/packages/babel-plugin-transform-goober) + +## Babel macro plugin + +A babel-plugin-macros macro for [🥜goober][goober], rewriting `styled.div` syntax to `styled('div')` calls. + +### Usage + +Once you've configured [babel-plugin-macros](https://github.com/kentcdodds/babel-plugin-macros), change your imports from `goober` to `goober/macro`. + +Now you can create your components using `styled.*` syntax:. + +```js +import { styled } from 'goober/macro'; + +const Button = styled.button` + margin: 0; + padding: 1rem; + font-size: 1rem; + background-color: tomato; +`; +``` + +## [Next.js](https://github.com/vercel/next.js) + +Want to use `goober` with Next.js? We've got you covered! Follow the example below or from the main [examples](https://github.com/vercel/next.js/tree/canary/examples/with-goober) directory. + +```sh +npx create-next-app --example with-goober with-goober-app +# or +yarn create next-app --example with-goober with-goober-app +``` + +## [Gatsby](https://github.com/gatsbyjs/gatsby) + +Want to use `goober` with Gatsby? We've got you covered! We have our own plugin to deal with styling your Gatsby projects. + +```sh +npm i --save goober gatsby-plugin-goober +# or +yarn add goober gatsby-plugin-goober +``` + +## Preact CLI plugin + +If you use Goober with Preact CLI, you can use [preact-cli-goober-ssr](https://github.com/gerhardsletten/preact-cli-goober-ssr) + +```sh +npm i --save-dev preact-cli-goober-ssr +# or +yarn add --dev preact-cli-goober-ssr + +# preact.config.js +const gooberPlugin = require('preact-cli-goober-ssr') + +export default (config, env) => { + gooberPlugin(config, env) +} +``` + +When you build your Preact application, this will run `extractCss` on your pre-rendered pages and add critical styles for each page. + +## CSS Prop + +You can use a custom `css` prop to pass in styles on HTML elements with this Babel plugin. + +Installation: + +```sh +npm install --save-dev @agney/babel-plugin-goober-css-prop +``` + +List the plugin in `.babelrc`: + +``` +{ + "plugins": [ + "@agney/babel-plugin-goober-css-prop" + ] +} +``` + +Usage: + +```javascript +
+

Goober

+
+``` + +# Features + +- [x] Basic CSS parsing +- [x] Nested rules with pseudo selectors +- [x] Nested styled components +- [x] [Extending Styles](#sharing-style) +- [x] Media queries (@media) +- [x] Keyframes (@keyframes) +- [x] Smart (lazy) client-side hydration +- [x] Styling any component + - via `` const Btn = ({className}) => {...}; const TomatoBtn = styled(Btn)`color: tomato;` `` +- [x] Vanilla (via `css` function) +- [x] `globalStyle` (via `glob`) so one would be able to create global styles +- [x] target/extract from elements other than `` +- [x] [vendor prefixing](#autoprefixer) + +# Content Security Policy (CSP) + +goober supports Content Security Policy nonces for inline styles. Set `window.__nonce__` before loading the library: + +```js + +``` + +The nonce will be added to goober's `", + currentlyRenderingBoundaryHasStylesToHoist = !1, + destinationHasCapacity = !0, + stylesheetFlushingQueue = [], + styleTagResourceOpen1 = ' data-precedence="', + styleTagResourceOpen2 = '" data-href="', + spaceSeparator = " ", + styleTagResourceOpen3 = '">', + styleTagResourceClose = "", + completedShellIdAttributeStart = ' id="', + arrayFirstOpenBracket = "[", + arraySubsequentOpenBracket = ",[", + arrayInterstitial = ",", + arrayCloseBracket = "]", + PENDING$1 = 0, + PRELOADED = 1, + PREAMBLE = 2, + LATE = 3, + regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g, + regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g, + doctypeChunk = "", + bind = Function.prototype.bind, + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), + emptyContextObject = {}; + Object.freeze(emptyContextObject); + var rendererSigil = {}; + var currentActiveSnapshot = null, + didWarnAboutNoopUpdateForComponent = {}, + didWarnAboutDeprecatedWillMount = {}; + var didWarnAboutUninitializedState = new Set(); + var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set(); + var didWarnAboutLegacyLifecyclesAndDerivedState = new Set(); + var didWarnAboutDirectlyAssigningPropsToState = new Set(); + var didWarnAboutUndefinedDerivedState = new Set(); + var didWarnAboutContextTypes$1 = new Set(); + var didWarnAboutChildContextTypes = new Set(); + var didWarnAboutInvalidateContextType = new Set(); + var didWarnOnInvalidCallback = new Set(); + var classComponentUpdater = { + enqueueSetState: function (inst, payload, callback) { + var internals = inst._reactInternals; + null === internals.queue + ? warnNoop(inst, "setState") + : (internals.queue.push(payload), + void 0 !== callback && + null !== callback && + warnOnInvalidCallback(callback)); + }, + enqueueReplaceState: function (inst, payload, callback) { + inst = inst._reactInternals; + inst.replace = !0; + inst.queue = [payload]; + void 0 !== callback && + null !== callback && + warnOnInvalidCallback(callback); + }, + enqueueForceUpdate: function (inst, callback) { + null === inst._reactInternals.queue + ? warnNoop(inst, "forceUpdate") + : void 0 !== callback && + null !== callback && + warnOnInvalidCallback(callback); + } + }, + emptyTreeContext = { id: 1, overflow: "" }, + clz32 = Math.clz32 ? Math.clz32 : clz32Fallback, + log = Math.log, + LN2 = Math.LN2, + SuspenseException = Error( + "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`." + ), + suspendedThenable = null, + objectIs = "function" === typeof Object.is ? Object.is : is, + currentlyRenderingComponent = null, + currentlyRenderingTask = null, + currentlyRenderingRequest = null, + currentlyRenderingKeyPath = null, + firstWorkInProgressHook = null, + workInProgressHook = null, + isReRender = !1, + didScheduleRenderPhaseUpdate = !1, + localIdCounter = 0, + actionStateCounter = 0, + actionStateMatchingIndex = -1, + thenableIndexCounter = 0, + thenableState = null, + renderPhaseUpdates = null, + numberOfReRenders = 0, + isInHookUserCodeInDev = !1, + currentHookNameInDev, + HooksDispatcher = { + readContext: readContext, + use: function (usable) { + if (null !== usable && "object" === typeof usable) { + if ("function" === typeof usable.then) + return unwrapThenable(usable); + if (usable.$$typeof === REACT_CONTEXT_TYPE) + return readContext(usable); + } + throw Error( + "An unsupported type was passed to use(): " + String(usable) + ); + }, + useContext: function (context) { + currentHookNameInDev = "useContext"; + resolveCurrentlyRenderingComponent(); + return context._currentValue2; + }, + useMemo: useMemo, + useReducer: useReducer, + useRef: function (initialValue) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + var previousRef = workInProgressHook.memoizedState; + return null === previousRef + ? ((initialValue = { current: initialValue }), + Object.seal(initialValue), + (workInProgressHook.memoizedState = initialValue)) + : previousRef; + }, + useState: function (initialState) { + currentHookNameInDev = "useState"; + return useReducer(basicStateReducer, initialState); + }, + useInsertionEffect: noop, + useLayoutEffect: noop, + useCallback: function (callback, deps) { + return useMemo(function () { + return callback; + }, deps); + }, + useImperativeHandle: noop, + useEffect: noop, + useDebugValue: noop, + useDeferredValue: function (value, initialValue) { + resolveCurrentlyRenderingComponent(); + return void 0 !== initialValue ? initialValue : value; + }, + useTransition: function () { + resolveCurrentlyRenderingComponent(); + return [!1, unsupportedStartTransition]; + }, + useId: function () { + var treeId = currentlyRenderingTask.treeContext; + var overflow = treeId.overflow; + treeId = treeId.id; + treeId = + (treeId & ~(1 << (32 - clz32(treeId) - 1))).toString(32) + overflow; + var resumableState = currentResumableState; + if (null === resumableState) + throw Error( + "Invalid hook call. Hooks can only be called inside of the body of a function component." + ); + overflow = localIdCounter++; + treeId = "_" + resumableState.idPrefix + "R_" + treeId; + 0 < overflow && (treeId += "H" + overflow.toString(32)); + return treeId + "_"; + }, + useSyncExternalStore: function ( + subscribe, + getSnapshot, + getServerSnapshot + ) { + if (void 0 === getServerSnapshot) + throw Error( + "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering." + ); + return getServerSnapshot(); + }, + useOptimistic: function (passthrough) { + resolveCurrentlyRenderingComponent(); + return [passthrough, unsupportedSetOptimisticState]; + }, + useActionState: useActionState, + useFormState: useActionState, + useHostTransitionStatus: function () { + resolveCurrentlyRenderingComponent(); + return NotPending; + }, + useMemoCache: function (size) { + for (var data = Array(size), i = 0; i < size; i++) + data[i] = REACT_MEMO_CACHE_SENTINEL; + return data; + }, + useCacheRefresh: function () { + return unsupportedRefresh; + }, + useEffectEvent: function () { + return throwOnUseEffectEventCall; + } + }, + currentResumableState = null, + currentTaskInDEV = null, + DefaultAsyncDispatcher = { + getCacheForType: function () { + throw Error("Not implemented."); + }, + cacheSignal: function () { + throw Error("Not implemented."); + }, + getOwner: function () { + return null === currentTaskInDEV + ? null + : currentTaskInDEV.componentStack; + } + }, + disabledDepth = 0, + prevLog, + prevInfo, + prevWarn, + prevError, + prevGroup, + prevGroupCollapsed, + prevGroupEnd; + disabledLog.__reactDisabledLog = !0; + var prefix, + suffix, + reentry = !1; + var componentFrameCache = new ( + "function" === typeof WeakMap ? WeakMap : Map + )(); + var callComponent = { + react_stack_bottom_frame: function (Component, props, secondArg) { + return Component(props, secondArg); + } + }, + callComponentInDEV = + callComponent.react_stack_bottom_frame.bind(callComponent), + callRender = { + react_stack_bottom_frame: function (instance) { + return instance.render(); + } + }, + callRenderInDEV = callRender.react_stack_bottom_frame.bind(callRender), + callLazyInit = { + react_stack_bottom_frame: function (lazy) { + var init = lazy._init; + return init(lazy._payload); + } + }, + callLazyInitInDEV = + callLazyInit.react_stack_bottom_frame.bind(callLazyInit), + lastResetTime = 0; + if ( + "object" === typeof performance && + "function" === typeof performance.now + ) { + var localPerformance = performance; + var getCurrentTime = function () { + return localPerformance.now(); + }; + } else { + var localDate = Date; + getCurrentTime = function () { + return localDate.now(); + }; + } + var CLIENT_RENDERED = 4, + PENDING = 0, + COMPLETED = 1, + FLUSHED = 2, + ABORTED = 3, + ERRORED = 4, + POSTPONED = 5, + CLOSED = 14, + currentRequest = null, + didWarnAboutBadClass = {}, + didWarnAboutContextTypes = {}, + didWarnAboutContextTypeOnFunctionComponent = {}, + didWarnAboutGetDerivedStateOnFunctionComponent = {}, + didWarnAboutReassigningProps = !1, + didWarnAboutGenerators = !1, + didWarnAboutMaps = !1, + flushedByteSize = 0, + flushingPartialBoundaries = !1; + exports.renderToStaticMarkup = function (children, options) { + return renderToStringImpl( + children, + options, + !0, + 'The server used "renderToStaticMarkup" which does not support Suspense. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' + ); + }; + exports.renderToString = function (children, options) { + return renderToStringImpl( + children, + options, + !1, + 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' + ); + }; + exports.version = "19.2.5"; + })(); diff --git a/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js b/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js new file mode 100644 index 0000000..8bc2fa9 --- /dev/null +++ b/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js @@ -0,0 +1,6603 @@ +/** + * @license React + * react-dom-server-legacy.browser.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* + + + JS Implementation of MurmurHash3 (r136) (as of May 20, 2011) + + Copyright (c) 2011 Gary Court + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ +"use strict"; +var React = require("react"), + ReactDOM = require("react-dom"); +function formatProdErrorMessage(code) { + var url = "https://react.dev/errors/" + code; + if (1 < arguments.length) { + url += "?args[]=" + encodeURIComponent(arguments[1]); + for (var i = 2; i < arguments.length; i++) + url += "&args[]=" + encodeURIComponent(arguments[i]); + } + return ( + "Minified React error #" + + code + + "; visit " + + url + + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings." + ); +} +var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_SCOPE_TYPE = Symbol.for("react.scope"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"), + REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"), + REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), + MAYBE_ITERATOR_SYMBOL = Symbol.iterator; +function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) return null; + maybeIterable = + (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || + maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; +} +var isArrayImpl = Array.isArray; +function murmurhash3_32_gc(key, seed) { + var remainder = key.length & 3; + var bytes = key.length - remainder; + var h1 = seed; + for (seed = 0; seed < bytes; ) { + var k1 = + (key.charCodeAt(seed) & 255) | + ((key.charCodeAt(++seed) & 255) << 8) | + ((key.charCodeAt(++seed) & 255) << 16) | + ((key.charCodeAt(++seed) & 255) << 24); + ++seed; + k1 = + (3432918353 * (k1 & 65535) + + (((3432918353 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295; + k1 = (k1 << 15) | (k1 >>> 17); + k1 = + (461845907 * (k1 & 65535) + (((461845907 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295; + h1 ^= k1; + h1 = (h1 << 13) | (h1 >>> 19); + h1 = (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295; + h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16); + } + k1 = 0; + switch (remainder) { + case 3: + k1 ^= (key.charCodeAt(seed + 2) & 255) << 16; + case 2: + k1 ^= (key.charCodeAt(seed + 1) & 255) << 8; + case 1: + (k1 ^= key.charCodeAt(seed) & 255), + (k1 = + (3432918353 * (k1 & 65535) + + (((3432918353 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295), + (k1 = (k1 << 15) | (k1 >>> 17)), + (h1 ^= + (461845907 * (k1 & 65535) + + (((461845907 * (k1 >>> 16)) & 65535) << 16)) & + 4294967295); + } + h1 ^= key.length; + h1 ^= h1 >>> 16; + h1 = + (2246822507 * (h1 & 65535) + (((2246822507 * (h1 >>> 16)) & 65535) << 16)) & + 4294967295; + h1 ^= h1 >>> 13; + h1 = + (3266489909 * (h1 & 65535) + (((3266489909 * (h1 >>> 16)) & 65535) << 16)) & + 4294967295; + return (h1 ^ (h1 >>> 16)) >>> 0; +} +var assign = Object.assign, + hasOwnProperty = Object.prototype.hasOwnProperty, + VALID_ATTRIBUTE_NAME_REGEX = RegExp( + "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" + ), + illegalAttributeNameCache = {}, + validatedAttributeNameCache = {}; +function isAttributeNameSafe(attributeName) { + if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) + return !0; + if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1; + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) + return (validatedAttributeNameCache[attributeName] = !0); + illegalAttributeNameCache[attributeName] = !0; + return !1; +} +var unitlessNumbers = new Set( + "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split( + " " + ) + ), + aliases = new Map([ + ["acceptCharset", "accept-charset"], + ["htmlFor", "for"], + ["httpEquiv", "http-equiv"], + ["crossOrigin", "crossorigin"], + ["accentHeight", "accent-height"], + ["alignmentBaseline", "alignment-baseline"], + ["arabicForm", "arabic-form"], + ["baselineShift", "baseline-shift"], + ["capHeight", "cap-height"], + ["clipPath", "clip-path"], + ["clipRule", "clip-rule"], + ["colorInterpolation", "color-interpolation"], + ["colorInterpolationFilters", "color-interpolation-filters"], + ["colorProfile", "color-profile"], + ["colorRendering", "color-rendering"], + ["dominantBaseline", "dominant-baseline"], + ["enableBackground", "enable-background"], + ["fillOpacity", "fill-opacity"], + ["fillRule", "fill-rule"], + ["floodColor", "flood-color"], + ["floodOpacity", "flood-opacity"], + ["fontFamily", "font-family"], + ["fontSize", "font-size"], + ["fontSizeAdjust", "font-size-adjust"], + ["fontStretch", "font-stretch"], + ["fontStyle", "font-style"], + ["fontVariant", "font-variant"], + ["fontWeight", "font-weight"], + ["glyphName", "glyph-name"], + ["glyphOrientationHorizontal", "glyph-orientation-horizontal"], + ["glyphOrientationVertical", "glyph-orientation-vertical"], + ["horizAdvX", "horiz-adv-x"], + ["horizOriginX", "horiz-origin-x"], + ["imageRendering", "image-rendering"], + ["letterSpacing", "letter-spacing"], + ["lightingColor", "lighting-color"], + ["markerEnd", "marker-end"], + ["markerMid", "marker-mid"], + ["markerStart", "marker-start"], + ["overlinePosition", "overline-position"], + ["overlineThickness", "overline-thickness"], + ["paintOrder", "paint-order"], + ["panose-1", "panose-1"], + ["pointerEvents", "pointer-events"], + ["renderingIntent", "rendering-intent"], + ["shapeRendering", "shape-rendering"], + ["stopColor", "stop-color"], + ["stopOpacity", "stop-opacity"], + ["strikethroughPosition", "strikethrough-position"], + ["strikethroughThickness", "strikethrough-thickness"], + ["strokeDasharray", "stroke-dasharray"], + ["strokeDashoffset", "stroke-dashoffset"], + ["strokeLinecap", "stroke-linecap"], + ["strokeLinejoin", "stroke-linejoin"], + ["strokeMiterlimit", "stroke-miterlimit"], + ["strokeOpacity", "stroke-opacity"], + ["strokeWidth", "stroke-width"], + ["textAnchor", "text-anchor"], + ["textDecoration", "text-decoration"], + ["textRendering", "text-rendering"], + ["transformOrigin", "transform-origin"], + ["underlinePosition", "underline-position"], + ["underlineThickness", "underline-thickness"], + ["unicodeBidi", "unicode-bidi"], + ["unicodeRange", "unicode-range"], + ["unitsPerEm", "units-per-em"], + ["vAlphabetic", "v-alphabetic"], + ["vHanging", "v-hanging"], + ["vIdeographic", "v-ideographic"], + ["vMathematical", "v-mathematical"], + ["vectorEffect", "vector-effect"], + ["vertAdvY", "vert-adv-y"], + ["vertOriginX", "vert-origin-x"], + ["vertOriginY", "vert-origin-y"], + ["wordSpacing", "word-spacing"], + ["writingMode", "writing-mode"], + ["xmlnsXlink", "xmlns:xlink"], + ["xHeight", "x-height"] + ]), + matchHtmlRegExp = /["'&<>]/; +function escapeTextForBrowser(text) { + if ( + "boolean" === typeof text || + "number" === typeof text || + "bigint" === typeof text + ) + return "" + text; + text = "" + text; + var match = matchHtmlRegExp.exec(text); + if (match) { + var html = "", + index, + lastIndex = 0; + for (index = match.index; index < text.length; index++) { + switch (text.charCodeAt(index)) { + case 34: + match = """; + break; + case 38: + match = "&"; + break; + case 39: + match = "'"; + break; + case 60: + match = "<"; + break; + case 62: + match = ">"; + break; + default: + continue; + } + lastIndex !== index && (html += text.slice(lastIndex, index)); + lastIndex = index + 1; + html += match; + } + text = lastIndex !== index ? html + text.slice(lastIndex, index) : html; + } + return text; +} +var uppercasePattern = /([A-Z])/g, + msPattern = /^ms-/, + isJavaScriptProtocol = + /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i; +function sanitizeURL(url) { + return isJavaScriptProtocol.test("" + url) + ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" + : url; +} +var ReactSharedInternals = + React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + ReactDOMSharedInternals = + ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + sharedNotPendingObject = { + pending: !1, + data: null, + method: null, + action: null + }, + previousDispatcher = ReactDOMSharedInternals.d; +ReactDOMSharedInternals.d = { + f: previousDispatcher.f, + r: previousDispatcher.r, + D: prefetchDNS, + C: preconnect, + L: preload, + m: preloadModule, + X: preinitScript, + S: preinitStyle, + M: preinitModuleScript +}; +var PRELOAD_NO_CREDS = [], + currentlyFlushingRenderState = null, + scriptRegex = /(<\/|<)(s)(cript)/gi; +function scriptReplacer(match, prefix, s, suffix) { + return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix; +} +function createResumableState( + identifierPrefix, + externalRuntimeConfig, + bootstrapScriptContent, + bootstrapScripts, + bootstrapModules +) { + return { + idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix, + nextFormID: 0, + streamingFormat: 0, + bootstrapScriptContent: bootstrapScriptContent, + bootstrapScripts: bootstrapScripts, + bootstrapModules: bootstrapModules, + instructions: 0, + hasBody: !1, + hasHtml: !1, + unknownResources: {}, + dnsResources: {}, + connectResources: { default: {}, anonymous: {}, credentials: {} }, + imageResources: {}, + styleResources: {}, + scriptResources: {}, + moduleUnknownResources: {}, + moduleScriptResources: {} + }; +} +function createFormatContext( + insertionMode, + selectedValue, + tagScope, + viewTransition +) { + return { + insertionMode: insertionMode, + selectedValue: selectedValue, + tagScope: tagScope, + viewTransition: viewTransition + }; +} +function getChildFormatContext(parentContext, type, props) { + var subtreeScope = parentContext.tagScope & -25; + switch (type) { + case "noscript": + return createFormatContext(2, null, subtreeScope | 1, null); + case "select": + return createFormatContext( + 2, + null != props.value ? props.value : props.defaultValue, + subtreeScope, + null + ); + case "svg": + return createFormatContext(4, null, subtreeScope, null); + case "picture": + return createFormatContext(2, null, subtreeScope | 2, null); + case "math": + return createFormatContext(5, null, subtreeScope, null); + case "foreignObject": + return createFormatContext(2, null, subtreeScope, null); + case "table": + return createFormatContext(6, null, subtreeScope, null); + case "thead": + case "tbody": + case "tfoot": + return createFormatContext(7, null, subtreeScope, null); + case "colgroup": + return createFormatContext(9, null, subtreeScope, null); + case "tr": + return createFormatContext(8, null, subtreeScope, null); + case "head": + if (2 > parentContext.insertionMode) + return createFormatContext(3, null, subtreeScope, null); + break; + case "html": + if (0 === parentContext.insertionMode) + return createFormatContext(1, null, subtreeScope, null); + } + return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode + ? createFormatContext(2, null, subtreeScope, null) + : parentContext.tagScope !== subtreeScope + ? createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + subtreeScope, + null + ) + : parentContext; +} +function getSuspenseViewTransition(parentViewTransition) { + return null === parentViewTransition + ? null + : { + update: parentViewTransition.update, + enter: "none", + exit: "none", + share: parentViewTransition.update, + name: parentViewTransition.autoName, + autoName: parentViewTransition.autoName, + nameIdx: 0 + }; +} +function getSuspenseFallbackFormatContext(resumableState, parentContext) { + parentContext.tagScope & 32 && (resumableState.instructions |= 128); + return createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + parentContext.tagScope | 12, + getSuspenseViewTransition(parentContext.viewTransition) + ); +} +function getSuspenseContentFormatContext(resumableState, parentContext) { + resumableState = getSuspenseViewTransition(parentContext.viewTransition); + var subtreeScope = parentContext.tagScope | 16; + null !== resumableState && + "none" !== resumableState.share && + (subtreeScope |= 64); + return createFormatContext( + parentContext.insertionMode, + parentContext.selectedValue, + subtreeScope, + resumableState + ); +} +var styleNameCache = new Map(); +function pushStyleAttribute(target, style) { + if ("object" !== typeof style) throw Error(formatProdErrorMessage(62)); + var isFirst = !0, + styleName; + for (styleName in style) + if (hasOwnProperty.call(style, styleName)) { + var styleValue = style[styleName]; + if ( + null != styleValue && + "boolean" !== typeof styleValue && + "" !== styleValue + ) { + if (0 === styleName.indexOf("--")) { + var nameChunk = escapeTextForBrowser(styleName); + styleValue = escapeTextForBrowser(("" + styleValue).trim()); + } else + (nameChunk = styleNameCache.get(styleName)), + void 0 === nameChunk && + ((nameChunk = escapeTextForBrowser( + styleName + .replace(uppercasePattern, "-$1") + .toLowerCase() + .replace(msPattern, "-ms-") + )), + styleNameCache.set(styleName, nameChunk)), + (styleValue = + "number" === typeof styleValue + ? 0 === styleValue || unitlessNumbers.has(styleName) + ? "" + styleValue + : styleValue + "px" + : escapeTextForBrowser(("" + styleValue).trim())); + isFirst + ? ((isFirst = !1), + target.push(' style="', nameChunk, ":", styleValue)) + : target.push(";", nameChunk, ":", styleValue); + } + } + isFirst || target.push('"'); +} +function pushBooleanAttribute(target, name, value) { + value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(" ", name, '=""'); +} +function pushStringAttribute(target, name, value) { + "function" !== typeof value && + "symbol" !== typeof value && + "boolean" !== typeof value && + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); +} +var actionJavaScriptURL = escapeTextForBrowser( + "javascript:throw new Error('React form unexpectedly submitted.')" +); +function pushAdditionalFormField(value, key) { + this.push('"); +} +function validateAdditionalFormField(value) { + if ("string" !== typeof value) throw Error(formatProdErrorMessage(480)); +} +function getCustomFormFields(resumableState, formAction) { + if ("function" === typeof formAction.$$FORM_ACTION) { + var id = resumableState.nextFormID++; + resumableState = resumableState.idPrefix + id; + try { + var customFields = formAction.$$FORM_ACTION(resumableState); + if (customFields) { + var formData = customFields.data; + null != formData && formData.forEach(validateAdditionalFormField); + } + return customFields; + } catch (x) { + if ("object" === typeof x && null !== x && "function" === typeof x.then) + throw x; + } + } + return null; +} +function pushFormActionAttribute( + target, + resumableState, + renderState, + formAction, + formEncType, + formMethod, + formTarget, + name +) { + var formData = null; + if ("function" === typeof formAction) { + var customFields = getCustomFormFields(resumableState, formAction); + null !== customFields + ? ((name = customFields.name), + (formAction = customFields.action || ""), + (formEncType = customFields.encType), + (formMethod = customFields.method), + (formTarget = customFields.target), + (formData = customFields.data)) + : (target.push(" ", "formAction", '="', actionJavaScriptURL, '"'), + (formTarget = formMethod = formEncType = formAction = name = null), + injectFormReplayingRuntime(resumableState, renderState)); + } + null != name && pushAttribute(target, "name", name); + null != formAction && pushAttribute(target, "formAction", formAction); + null != formEncType && pushAttribute(target, "formEncType", formEncType); + null != formMethod && pushAttribute(target, "formMethod", formMethod); + null != formTarget && pushAttribute(target, "formTarget", formTarget); + return formData; +} +function pushAttribute(target, name, value) { + switch (name) { + case "className": + pushStringAttribute(target, "class", value); + break; + case "tabIndex": + pushStringAttribute(target, "tabindex", value); + break; + case "dir": + case "role": + case "viewBox": + case "width": + case "height": + pushStringAttribute(target, name, value); + break; + case "style": + pushStyleAttribute(target, value); + break; + case "src": + case "href": + if ("" === value) break; + case "action": + case "formAction": + if ( + null == value || + "function" === typeof value || + "symbol" === typeof value || + "boolean" === typeof value + ) + break; + value = sanitizeURL("" + value); + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "defaultValue": + case "defaultChecked": + case "innerHTML": + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "ref": + break; + case "autoFocus": + case "multiple": + case "muted": + pushBooleanAttribute(target, name.toLowerCase(), value); + break; + case "xlinkHref": + if ( + "function" === typeof value || + "symbol" === typeof value || + "boolean" === typeof value + ) + break; + value = sanitizeURL("" + value); + target.push(" ", "xlink:href", '="', escapeTextForBrowser(value), '"'); + break; + case "contentEditable": + case "spellCheck": + case "draggable": + case "value": + case "autoReverse": + case "externalResourcesRequired": + case "focusable": + case "preserveAlpha": + "function" !== typeof value && + "symbol" !== typeof value && + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "inert": + case "allowFullScreen": + case "async": + case "autoPlay": + case "controls": + case "default": + case "defer": + case "disabled": + case "disablePictureInPicture": + case "disableRemotePlayback": + case "formNoValidate": + case "hidden": + case "loop": + case "noModule": + case "noValidate": + case "open": + case "playsInline": + case "readOnly": + case "required": + case "reversed": + case "scoped": + case "seamless": + case "itemScope": + value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(" ", name, '=""'); + break; + case "capture": + case "download": + !0 === value + ? target.push(" ", name, '=""') + : !1 !== value && + "function" !== typeof value && + "symbol" !== typeof value && + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "cols": + case "rows": + case "size": + case "span": + "function" !== typeof value && + "symbol" !== typeof value && + !isNaN(value) && + 1 <= value && + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "rowSpan": + case "start": + "function" === typeof value || + "symbol" === typeof value || + isNaN(value) || + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + break; + case "xlinkActuate": + pushStringAttribute(target, "xlink:actuate", value); + break; + case "xlinkArcrole": + pushStringAttribute(target, "xlink:arcrole", value); + break; + case "xlinkRole": + pushStringAttribute(target, "xlink:role", value); + break; + case "xlinkShow": + pushStringAttribute(target, "xlink:show", value); + break; + case "xlinkTitle": + pushStringAttribute(target, "xlink:title", value); + break; + case "xlinkType": + pushStringAttribute(target, "xlink:type", value); + break; + case "xmlBase": + pushStringAttribute(target, "xml:base", value); + break; + case "xmlLang": + pushStringAttribute(target, "xml:lang", value); + break; + case "xmlSpace": + pushStringAttribute(target, "xml:space", value); + break; + default: + if ( + !(2 < name.length) || + ("o" !== name[0] && "O" !== name[0]) || + ("n" !== name[1] && "N" !== name[1]) + ) + if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) { + switch (typeof value) { + case "function": + case "symbol": + return; + case "boolean": + var prefix$8 = name.toLowerCase().slice(0, 5); + if ("data-" !== prefix$8 && "aria-" !== prefix$8) return; + } + target.push(" ", name, '="', escapeTextForBrowser(value), '"'); + } + } +} +function pushInnerHTML(target, innerHTML, children) { + if (null != innerHTML) { + if (null != children) throw Error(formatProdErrorMessage(60)); + if ("object" !== typeof innerHTML || !("__html" in innerHTML)) + throw Error(formatProdErrorMessage(61)); + innerHTML = innerHTML.__html; + null !== innerHTML && void 0 !== innerHTML && target.push("" + innerHTML); + } +} +function flattenOptionChildren(children) { + var content = ""; + React.Children.forEach(children, function (child) { + null != child && (content += child); + }); + return content; +} +function injectFormReplayingRuntime(resumableState, renderState) { + if (0 === (resumableState.instructions & 16)) { + resumableState.instructions |= 16; + var preamble = renderState.preamble, + bootstrapChunks = renderState.bootstrapChunks; + (preamble.htmlChunks || preamble.headChunks) && 0 === bootstrapChunks.length + ? (bootstrapChunks.push(renderState.startInlineScript), + pushCompletedShellIdAttribute(bootstrapChunks, resumableState), + bootstrapChunks.push( + ">", + 'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});', + "\x3c/script>" + )) + : bootstrapChunks.unshift( + renderState.startInlineScript, + ">", + 'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});', + "\x3c/script>" + ); + } +} +function pushLinkImpl(target, props) { + target.push(startChunkForTag("link")); + for (var propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(399, "link")); + default: + pushAttribute(target, propKey, propValue); + } + } + target.push("/>"); + return null; +} +var styleRegex = /(<\/|<)(s)(tyle)/gi; +function styleReplacer(match, prefix, s, suffix) { + return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix; +} +function pushSelfClosing(target, props, tag) { + target.push(startChunkForTag(tag)); + for (var propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(399, tag)); + default: + pushAttribute(target, propKey, propValue); + } + } + target.push("/>"); + return null; +} +function pushTitleImpl(target, props) { + target.push(startChunkForTag("title")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(">"); + props = Array.isArray(children) + ? 2 > children.length + ? children[0] + : null + : children; + "function" !== typeof props && + "symbol" !== typeof props && + null !== props && + void 0 !== props && + target.push(escapeTextForBrowser("" + props)); + pushInnerHTML(target, innerHTML, children); + target.push(endChunkForTag("title")); + return null; +} +function pushScriptImpl(target, props) { + target.push(startChunkForTag("script")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(">"); + pushInnerHTML(target, innerHTML, children); + "string" === typeof children && + target.push(("" + children).replace(scriptRegex, scriptReplacer)); + target.push(endChunkForTag("script")); + return null; +} +function pushStartSingletonElement(target, props, tag) { + target.push(startChunkForTag(tag)); + var innerHTML = (tag = null), + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + tag = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(">"); + pushInnerHTML(target, innerHTML, tag); + return tag; +} +function pushStartGenericElement(target, props, tag) { + target.push(startChunkForTag(tag)); + var innerHTML = (tag = null), + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + tag = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + } + } + target.push(">"); + pushInnerHTML(target, innerHTML, tag); + return "string" === typeof tag + ? (target.push(escapeTextForBrowser(tag)), null) + : tag; +} +var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/, + validatedTagCache = new Map(); +function startChunkForTag(tag) { + var tagStartChunk = validatedTagCache.get(tag); + if (void 0 === tagStartChunk) { + if (!VALID_TAG_REGEX.test(tag)) + throw Error(formatProdErrorMessage(65, tag)); + tagStartChunk = "<" + tag; + validatedTagCache.set(tag, tagStartChunk); + } + return tagStartChunk; +} +function pushStartInstance( + target$jscomp$0, + type, + props, + resumableState, + renderState, + preambleState, + hoistableState, + formatContext, + textEmbedded +) { + switch (type) { + case "div": + case "span": + case "svg": + case "path": + break; + case "a": + target$jscomp$0.push(startChunkForTag("a")); + var children = null, + innerHTML = null, + propKey; + for (propKey in props) + if (hasOwnProperty.call(props, propKey)) { + var propValue = props[propKey]; + if (null != propValue) + switch (propKey) { + case "children": + children = propValue; + break; + case "dangerouslySetInnerHTML": + innerHTML = propValue; + break; + case "href": + "" === propValue + ? pushStringAttribute(target$jscomp$0, "href", "") + : pushAttribute(target$jscomp$0, propKey, propValue); + break; + default: + pushAttribute(target$jscomp$0, propKey, propValue); + } + } + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML, children); + if ("string" === typeof children) { + target$jscomp$0.push(escapeTextForBrowser(children)); + var JSCompiler_inline_result = null; + } else JSCompiler_inline_result = children; + return JSCompiler_inline_result; + case "g": + case "p": + case "li": + break; + case "select": + target$jscomp$0.push(startChunkForTag("select")); + var children$jscomp$0 = null, + innerHTML$jscomp$0 = null, + propKey$jscomp$0; + for (propKey$jscomp$0 in props) + if (hasOwnProperty.call(props, propKey$jscomp$0)) { + var propValue$jscomp$0 = props[propKey$jscomp$0]; + if (null != propValue$jscomp$0) + switch (propKey$jscomp$0) { + case "children": + children$jscomp$0 = propValue$jscomp$0; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$0 = propValue$jscomp$0; + break; + case "defaultValue": + case "value": + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$0, + propValue$jscomp$0 + ); + } + } + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0); + return children$jscomp$0; + case "option": + var selectedValue = formatContext.selectedValue; + target$jscomp$0.push(startChunkForTag("option")); + var children$jscomp$1 = null, + value = null, + selected = null, + innerHTML$jscomp$1 = null, + propKey$jscomp$1; + for (propKey$jscomp$1 in props) + if (hasOwnProperty.call(props, propKey$jscomp$1)) { + var propValue$jscomp$1 = props[propKey$jscomp$1]; + if (null != propValue$jscomp$1) + switch (propKey$jscomp$1) { + case "children": + children$jscomp$1 = propValue$jscomp$1; + break; + case "selected": + selected = propValue$jscomp$1; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$1 = propValue$jscomp$1; + break; + case "value": + value = propValue$jscomp$1; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$1, + propValue$jscomp$1 + ); + } + } + if (null != selectedValue) { + var stringValue = + null !== value + ? "" + value + : flattenOptionChildren(children$jscomp$1); + if (isArrayImpl(selectedValue)) + for (var i = 0; i < selectedValue.length; i++) { + if ("" + selectedValue[i] === stringValue) { + target$jscomp$0.push(' selected=""'); + break; + } + } + else + "" + selectedValue === stringValue && + target$jscomp$0.push(' selected=""'); + } else selected && target$jscomp$0.push(' selected=""'); + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1); + return children$jscomp$1; + case "textarea": + target$jscomp$0.push(startChunkForTag("textarea")); + var value$jscomp$0 = null, + defaultValue = null, + children$jscomp$2 = null, + propKey$jscomp$2; + for (propKey$jscomp$2 in props) + if (hasOwnProperty.call(props, propKey$jscomp$2)) { + var propValue$jscomp$2 = props[propKey$jscomp$2]; + if (null != propValue$jscomp$2) + switch (propKey$jscomp$2) { + case "children": + children$jscomp$2 = propValue$jscomp$2; + break; + case "value": + value$jscomp$0 = propValue$jscomp$2; + break; + case "defaultValue": + defaultValue = propValue$jscomp$2; + break; + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(91)); + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$2, + propValue$jscomp$2 + ); + } + } + null === value$jscomp$0 && + null !== defaultValue && + (value$jscomp$0 = defaultValue); + target$jscomp$0.push(">"); + if (null != children$jscomp$2) { + if (null != value$jscomp$0) throw Error(formatProdErrorMessage(92)); + if (isArrayImpl(children$jscomp$2)) { + if (1 < children$jscomp$2.length) + throw Error(formatProdErrorMessage(93)); + value$jscomp$0 = "" + children$jscomp$2[0]; + } + value$jscomp$0 = "" + children$jscomp$2; + } + "string" === typeof value$jscomp$0 && + "\n" === value$jscomp$0[0] && + target$jscomp$0.push("\n"); + null !== value$jscomp$0 && + target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0)); + return null; + case "input": + target$jscomp$0.push(startChunkForTag("input")); + var name = null, + formAction = null, + formEncType = null, + formMethod = null, + formTarget = null, + value$jscomp$1 = null, + defaultValue$jscomp$0 = null, + checked = null, + defaultChecked = null, + propKey$jscomp$3; + for (propKey$jscomp$3 in props) + if (hasOwnProperty.call(props, propKey$jscomp$3)) { + var propValue$jscomp$3 = props[propKey$jscomp$3]; + if (null != propValue$jscomp$3) + switch (propKey$jscomp$3) { + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(399, "input")); + case "name": + name = propValue$jscomp$3; + break; + case "formAction": + formAction = propValue$jscomp$3; + break; + case "formEncType": + formEncType = propValue$jscomp$3; + break; + case "formMethod": + formMethod = propValue$jscomp$3; + break; + case "formTarget": + formTarget = propValue$jscomp$3; + break; + case "defaultChecked": + defaultChecked = propValue$jscomp$3; + break; + case "defaultValue": + defaultValue$jscomp$0 = propValue$jscomp$3; + break; + case "checked": + checked = propValue$jscomp$3; + break; + case "value": + value$jscomp$1 = propValue$jscomp$3; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$3, + propValue$jscomp$3 + ); + } + } + var formData = pushFormActionAttribute( + target$jscomp$0, + resumableState, + renderState, + formAction, + formEncType, + formMethod, + formTarget, + name + ); + null !== checked + ? pushBooleanAttribute(target$jscomp$0, "checked", checked) + : null !== defaultChecked && + pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked); + null !== value$jscomp$1 + ? pushAttribute(target$jscomp$0, "value", value$jscomp$1) + : null !== defaultValue$jscomp$0 && + pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0); + target$jscomp$0.push("/>"); + null != formData && + formData.forEach(pushAdditionalFormField, target$jscomp$0); + return null; + case "button": + target$jscomp$0.push(startChunkForTag("button")); + var children$jscomp$3 = null, + innerHTML$jscomp$2 = null, + name$jscomp$0 = null, + formAction$jscomp$0 = null, + formEncType$jscomp$0 = null, + formMethod$jscomp$0 = null, + formTarget$jscomp$0 = null, + propKey$jscomp$4; + for (propKey$jscomp$4 in props) + if (hasOwnProperty.call(props, propKey$jscomp$4)) { + var propValue$jscomp$4 = props[propKey$jscomp$4]; + if (null != propValue$jscomp$4) + switch (propKey$jscomp$4) { + case "children": + children$jscomp$3 = propValue$jscomp$4; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$2 = propValue$jscomp$4; + break; + case "name": + name$jscomp$0 = propValue$jscomp$4; + break; + case "formAction": + formAction$jscomp$0 = propValue$jscomp$4; + break; + case "formEncType": + formEncType$jscomp$0 = propValue$jscomp$4; + break; + case "formMethod": + formMethod$jscomp$0 = propValue$jscomp$4; + break; + case "formTarget": + formTarget$jscomp$0 = propValue$jscomp$4; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$4, + propValue$jscomp$4 + ); + } + } + var formData$jscomp$0 = pushFormActionAttribute( + target$jscomp$0, + resumableState, + renderState, + formAction$jscomp$0, + formEncType$jscomp$0, + formMethod$jscomp$0, + formTarget$jscomp$0, + name$jscomp$0 + ); + target$jscomp$0.push(">"); + null != formData$jscomp$0 && + formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3); + if ("string" === typeof children$jscomp$3) { + target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3)); + var JSCompiler_inline_result$jscomp$0 = null; + } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3; + return JSCompiler_inline_result$jscomp$0; + case "form": + target$jscomp$0.push(startChunkForTag("form")); + var children$jscomp$4 = null, + innerHTML$jscomp$3 = null, + formAction$jscomp$1 = null, + formEncType$jscomp$1 = null, + formMethod$jscomp$1 = null, + formTarget$jscomp$1 = null, + propKey$jscomp$5; + for (propKey$jscomp$5 in props) + if (hasOwnProperty.call(props, propKey$jscomp$5)) { + var propValue$jscomp$5 = props[propKey$jscomp$5]; + if (null != propValue$jscomp$5) + switch (propKey$jscomp$5) { + case "children": + children$jscomp$4 = propValue$jscomp$5; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$3 = propValue$jscomp$5; + break; + case "action": + formAction$jscomp$1 = propValue$jscomp$5; + break; + case "encType": + formEncType$jscomp$1 = propValue$jscomp$5; + break; + case "method": + formMethod$jscomp$1 = propValue$jscomp$5; + break; + case "target": + formTarget$jscomp$1 = propValue$jscomp$5; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$5, + propValue$jscomp$5 + ); + } + } + var formData$jscomp$1 = null, + formActionName = null; + if ("function" === typeof formAction$jscomp$1) { + var customFields = getCustomFormFields( + resumableState, + formAction$jscomp$1 + ); + null !== customFields + ? ((formAction$jscomp$1 = customFields.action || ""), + (formEncType$jscomp$1 = customFields.encType), + (formMethod$jscomp$1 = customFields.method), + (formTarget$jscomp$1 = customFields.target), + (formData$jscomp$1 = customFields.data), + (formActionName = customFields.name)) + : (target$jscomp$0.push( + " ", + "action", + '="', + actionJavaScriptURL, + '"' + ), + (formTarget$jscomp$1 = + formMethod$jscomp$1 = + formEncType$jscomp$1 = + formAction$jscomp$1 = + null), + injectFormReplayingRuntime(resumableState, renderState)); + } + null != formAction$jscomp$1 && + pushAttribute(target$jscomp$0, "action", formAction$jscomp$1); + null != formEncType$jscomp$1 && + pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1); + null != formMethod$jscomp$1 && + pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1); + null != formTarget$jscomp$1 && + pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1); + target$jscomp$0.push(">"); + null !== formActionName && + (target$jscomp$0.push('"), + null != formData$jscomp$1 && + formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0)); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4); + if ("string" === typeof children$jscomp$4) { + target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4)); + var JSCompiler_inline_result$jscomp$1 = null; + } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4; + return JSCompiler_inline_result$jscomp$1; + case "menuitem": + target$jscomp$0.push(startChunkForTag("menuitem")); + for (var propKey$jscomp$6 in props) + if (hasOwnProperty.call(props, propKey$jscomp$6)) { + var propValue$jscomp$6 = props[propKey$jscomp$6]; + if (null != propValue$jscomp$6) + switch (propKey$jscomp$6) { + case "children": + case "dangerouslySetInnerHTML": + throw Error(formatProdErrorMessage(400)); + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$6, + propValue$jscomp$6 + ); + } + } + target$jscomp$0.push(">"); + return null; + case "object": + target$jscomp$0.push(startChunkForTag("object")); + var children$jscomp$5 = null, + innerHTML$jscomp$4 = null, + propKey$jscomp$7; + for (propKey$jscomp$7 in props) + if (hasOwnProperty.call(props, propKey$jscomp$7)) { + var propValue$jscomp$7 = props[propKey$jscomp$7]; + if (null != propValue$jscomp$7) + switch (propKey$jscomp$7) { + case "children": + children$jscomp$5 = propValue$jscomp$7; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$4 = propValue$jscomp$7; + break; + case "data": + var sanitizedValue = sanitizeURL("" + propValue$jscomp$7); + if ("" === sanitizedValue) break; + target$jscomp$0.push( + " ", + "data", + '="', + escapeTextForBrowser(sanitizedValue), + '"' + ); + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$7, + propValue$jscomp$7 + ); + } + } + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5); + if ("string" === typeof children$jscomp$5) { + target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5)); + var JSCompiler_inline_result$jscomp$2 = null; + } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5; + return JSCompiler_inline_result$jscomp$2; + case "title": + var noscriptTagInScope = formatContext.tagScope & 1, + isFallback = formatContext.tagScope & 4; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$3 = pushTitleImpl( + target$jscomp$0, + props + ); + else + isFallback + ? (JSCompiler_inline_result$jscomp$3 = null) + : (pushTitleImpl(renderState.hoistableChunks, props), + (JSCompiler_inline_result$jscomp$3 = void 0)); + return JSCompiler_inline_result$jscomp$3; + case "link": + var noscriptTagInScope$jscomp$0 = formatContext.tagScope & 1, + isFallback$jscomp$0 = formatContext.tagScope & 4, + rel = props.rel, + href = props.href, + precedence = props.precedence; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$0 || + null != props.itemProp || + "string" !== typeof rel || + "string" !== typeof href || + "" === href + ) { + pushLinkImpl(target$jscomp$0, props); + var JSCompiler_inline_result$jscomp$4 = null; + } else if ("stylesheet" === props.rel) + if ( + "string" !== typeof precedence || + null != props.disabled || + props.onLoad || + props.onError + ) + JSCompiler_inline_result$jscomp$4 = pushLinkImpl( + target$jscomp$0, + props + ); + else { + var styleQueue = renderState.styles.get(precedence), + resourceState = resumableState.styleResources.hasOwnProperty(href) + ? resumableState.styleResources[href] + : void 0; + if (null !== resourceState) { + resumableState.styleResources[href] = null; + styleQueue || + ((styleQueue = { + precedence: escapeTextForBrowser(precedence), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence, styleQueue)); + var resource = { + state: 0, + props: assign({}, props, { + "data-precedence": props.precedence, + precedence: null + }) + }; + if (resourceState) { + 2 === resourceState.length && + adoptPreloadCredentials(resource.props, resourceState); + var preloadResource = renderState.preloads.stylesheets.get(href); + preloadResource && 0 < preloadResource.length + ? (preloadResource.length = 0) + : (resource.state = 1); + } + styleQueue.sheets.set(href, resource); + hoistableState && hoistableState.stylesheets.add(resource); + } else if (styleQueue) { + var resource$9 = styleQueue.sheets.get(href); + resource$9 && + hoistableState && + hoistableState.stylesheets.add(resource$9); + } + textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"); + JSCompiler_inline_result$jscomp$4 = null; + } + else + props.onLoad || props.onError + ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl( + target$jscomp$0, + props + )) + : (textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"), + (JSCompiler_inline_result$jscomp$4 = isFallback$jscomp$0 + ? null + : pushLinkImpl(renderState.hoistableChunks, props))); + return JSCompiler_inline_result$jscomp$4; + case "script": + var noscriptTagInScope$jscomp$1 = formatContext.tagScope & 1, + asyncProp = props.async; + if ( + "string" !== typeof props.src || + !props.src || + !asyncProp || + "function" === typeof asyncProp || + "symbol" === typeof asyncProp || + props.onLoad || + props.onError || + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$1 || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$5 = pushScriptImpl( + target$jscomp$0, + props + ); + else { + var key = props.src; + if ("module" === props.type) { + var resources = resumableState.moduleScriptResources; + var preloads = renderState.preloads.moduleScripts; + } else + (resources = resumableState.scriptResources), + (preloads = renderState.preloads.scripts); + var resourceState$jscomp$0 = resources.hasOwnProperty(key) + ? resources[key] + : void 0; + if (null !== resourceState$jscomp$0) { + resources[key] = null; + var scriptProps = props; + if (resourceState$jscomp$0) { + 2 === resourceState$jscomp$0.length && + ((scriptProps = assign({}, props)), + adoptPreloadCredentials(scriptProps, resourceState$jscomp$0)); + var preloadResource$jscomp$0 = preloads.get(key); + preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0); + } + var resource$jscomp$0 = []; + renderState.scripts.add(resource$jscomp$0); + pushScriptImpl(resource$jscomp$0, scriptProps); + } + textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"); + JSCompiler_inline_result$jscomp$5 = null; + } + return JSCompiler_inline_result$jscomp$5; + case "style": + var noscriptTagInScope$jscomp$2 = formatContext.tagScope & 1, + precedence$jscomp$0 = props.precedence, + href$jscomp$0 = props.href, + nonce = props.nonce; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$2 || + null != props.itemProp || + "string" !== typeof precedence$jscomp$0 || + "string" !== typeof href$jscomp$0 || + "" === href$jscomp$0 + ) { + target$jscomp$0.push(startChunkForTag("style")); + var children$jscomp$6 = null, + innerHTML$jscomp$5 = null, + propKey$jscomp$8; + for (propKey$jscomp$8 in props) + if (hasOwnProperty.call(props, propKey$jscomp$8)) { + var propValue$jscomp$8 = props[propKey$jscomp$8]; + if (null != propValue$jscomp$8) + switch (propKey$jscomp$8) { + case "children": + children$jscomp$6 = propValue$jscomp$8; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$5 = propValue$jscomp$8; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$8, + propValue$jscomp$8 + ); + } + } + target$jscomp$0.push(">"); + var child = Array.isArray(children$jscomp$6) + ? 2 > children$jscomp$6.length + ? children$jscomp$6[0] + : null + : children$jscomp$6; + "function" !== typeof child && + "symbol" !== typeof child && + null !== child && + void 0 !== child && + target$jscomp$0.push(("" + child).replace(styleRegex, styleReplacer)); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6); + target$jscomp$0.push(endChunkForTag("style")); + var JSCompiler_inline_result$jscomp$6 = null; + } else { + var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0); + if ( + null !== + (resumableState.styleResources.hasOwnProperty(href$jscomp$0) + ? resumableState.styleResources[href$jscomp$0] + : void 0) + ) { + resumableState.styleResources[href$jscomp$0] = null; + styleQueue$jscomp$0 || + ((styleQueue$jscomp$0 = { + precedence: escapeTextForBrowser(precedence$jscomp$0), + rules: [], + hrefs: [], + sheets: new Map() + }), + renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0)); + var nonceStyle = renderState.nonce.style; + if (!nonceStyle || nonceStyle === nonce) { + styleQueue$jscomp$0.hrefs.push(escapeTextForBrowser(href$jscomp$0)); + var target = styleQueue$jscomp$0.rules, + children$jscomp$7 = null, + innerHTML$jscomp$6 = null, + propKey$jscomp$9; + for (propKey$jscomp$9 in props) + if (hasOwnProperty.call(props, propKey$jscomp$9)) { + var propValue$jscomp$9 = props[propKey$jscomp$9]; + if (null != propValue$jscomp$9) + switch (propKey$jscomp$9) { + case "children": + children$jscomp$7 = propValue$jscomp$9; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$6 = propValue$jscomp$9; + } + } + var child$jscomp$0 = Array.isArray(children$jscomp$7) + ? 2 > children$jscomp$7.length + ? children$jscomp$7[0] + : null + : children$jscomp$7; + "function" !== typeof child$jscomp$0 && + "symbol" !== typeof child$jscomp$0 && + null !== child$jscomp$0 && + void 0 !== child$jscomp$0 && + target.push( + ("" + child$jscomp$0).replace(styleRegex, styleReplacer) + ); + pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7); + } + } + styleQueue$jscomp$0 && + hoistableState && + hoistableState.styles.add(styleQueue$jscomp$0); + textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"); + JSCompiler_inline_result$jscomp$6 = void 0; + } + return JSCompiler_inline_result$jscomp$6; + case "meta": + var noscriptTagInScope$jscomp$3 = formatContext.tagScope & 1, + isFallback$jscomp$1 = formatContext.tagScope & 4; + if ( + 4 === formatContext.insertionMode || + noscriptTagInScope$jscomp$3 || + null != props.itemProp + ) + var JSCompiler_inline_result$jscomp$7 = pushSelfClosing( + target$jscomp$0, + props, + "meta" + ); + else + textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"), + (JSCompiler_inline_result$jscomp$7 = isFallback$jscomp$1 + ? null + : "string" === typeof props.charSet + ? pushSelfClosing(renderState.charsetChunks, props, "meta") + : "viewport" === props.name + ? pushSelfClosing(renderState.viewportChunks, props, "meta") + : pushSelfClosing(renderState.hoistableChunks, props, "meta")); + return JSCompiler_inline_result$jscomp$7; + case "listing": + case "pre": + target$jscomp$0.push(startChunkForTag(type)); + var children$jscomp$8 = null, + innerHTML$jscomp$7 = null, + propKey$jscomp$10; + for (propKey$jscomp$10 in props) + if (hasOwnProperty.call(props, propKey$jscomp$10)) { + var propValue$jscomp$10 = props[propKey$jscomp$10]; + if (null != propValue$jscomp$10) + switch (propKey$jscomp$10) { + case "children": + children$jscomp$8 = propValue$jscomp$10; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$7 = propValue$jscomp$10; + break; + default: + pushAttribute( + target$jscomp$0, + propKey$jscomp$10, + propValue$jscomp$10 + ); + } + } + target$jscomp$0.push(">"); + if (null != innerHTML$jscomp$7) { + if (null != children$jscomp$8) throw Error(formatProdErrorMessage(60)); + if ( + "object" !== typeof innerHTML$jscomp$7 || + !("__html" in innerHTML$jscomp$7) + ) + throw Error(formatProdErrorMessage(61)); + var html = innerHTML$jscomp$7.__html; + null !== html && + void 0 !== html && + ("string" === typeof html && 0 < html.length && "\n" === html[0] + ? target$jscomp$0.push("\n", html) + : target$jscomp$0.push("" + html)); + } + "string" === typeof children$jscomp$8 && + "\n" === children$jscomp$8[0] && + target$jscomp$0.push("\n"); + return children$jscomp$8; + case "img": + var pictureOrNoScriptTagInScope = formatContext.tagScope & 3, + src = props.src, + srcSet = props.srcSet; + if ( + !( + "lazy" === props.loading || + (!src && !srcSet) || + ("string" !== typeof src && null != src) || + ("string" !== typeof srcSet && null != srcSet) || + "low" === props.fetchPriority || + pictureOrNoScriptTagInScope + ) && + ("string" !== typeof src || + ":" !== src[4] || + ("d" !== src[0] && "D" !== src[0]) || + ("a" !== src[1] && "A" !== src[1]) || + ("t" !== src[2] && "T" !== src[2]) || + ("a" !== src[3] && "A" !== src[3])) && + ("string" !== typeof srcSet || + ":" !== srcSet[4] || + ("d" !== srcSet[0] && "D" !== srcSet[0]) || + ("a" !== srcSet[1] && "A" !== srcSet[1]) || + ("t" !== srcSet[2] && "T" !== srcSet[2]) || + ("a" !== srcSet[3] && "A" !== srcSet[3])) + ) { + null !== hoistableState && + formatContext.tagScope & 64 && + (hoistableState.suspenseyImages = !0); + var sizes = "string" === typeof props.sizes ? props.sizes : void 0, + key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src, + promotablePreloads = renderState.preloads.images, + resource$jscomp$1 = promotablePreloads.get(key$jscomp$0); + if (resource$jscomp$1) { + if ( + "high" === props.fetchPriority || + 10 > renderState.highImagePreloads.size + ) + promotablePreloads.delete(key$jscomp$0), + renderState.highImagePreloads.add(resource$jscomp$1); + } else if ( + !resumableState.imageResources.hasOwnProperty(key$jscomp$0) + ) { + resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS; + var input = props.crossOrigin; + var JSCompiler_inline_result$jscomp$8 = + "string" === typeof input + ? "use-credentials" === input + ? input + : "" + : void 0; + var headers = renderState.headers, + header; + headers && + 0 < headers.remainingCapacity && + "string" !== typeof props.srcSet && + ("high" === props.fetchPriority || + 500 > headers.highImagePreloads.length) && + ((header = getPreloadAsHeader(src, "image", { + imageSrcSet: props.srcSet, + imageSizes: props.sizes, + crossOrigin: JSCompiler_inline_result$jscomp$8, + integrity: props.integrity, + nonce: props.nonce, + type: props.type, + fetchPriority: props.fetchPriority, + referrerPolicy: props.refererPolicy + })), + 0 <= (headers.remainingCapacity -= header.length + 2)) + ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS), + headers.highImagePreloads && (headers.highImagePreloads += ", "), + (headers.highImagePreloads += header)) + : ((resource$jscomp$1 = []), + pushLinkImpl(resource$jscomp$1, { + rel: "preload", + as: "image", + href: srcSet ? void 0 : src, + imageSrcSet: srcSet, + imageSizes: sizes, + crossOrigin: JSCompiler_inline_result$jscomp$8, + integrity: props.integrity, + type: props.type, + fetchPriority: props.fetchPriority, + referrerPolicy: props.referrerPolicy + }), + "high" === props.fetchPriority || + 10 > renderState.highImagePreloads.size + ? renderState.highImagePreloads.add(resource$jscomp$1) + : (renderState.bulkPreloads.add(resource$jscomp$1), + promotablePreloads.set(key$jscomp$0, resource$jscomp$1))); + } + } + return pushSelfClosing(target$jscomp$0, props, "img"); + case "base": + case "area": + case "br": + case "col": + case "embed": + case "hr": + case "keygen": + case "param": + case "source": + case "track": + case "wbr": + return pushSelfClosing(target$jscomp$0, props, type); + case "annotation-xml": + case "color-profile": + case "font-face": + case "font-face-src": + case "font-face-uri": + case "font-face-format": + case "font-face-name": + case "missing-glyph": + break; + case "head": + if (2 > formatContext.insertionMode) { + var preamble = preambleState || renderState.preamble; + if (preamble.headChunks) + throw Error(formatProdErrorMessage(545, "``")); + null !== preambleState && target$jscomp$0.push("\x3c!--head--\x3e"); + preamble.headChunks = []; + var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement( + preamble.headChunks, + props, + "head" + ); + } else + JSCompiler_inline_result$jscomp$9 = pushStartGenericElement( + target$jscomp$0, + props, + "head" + ); + return JSCompiler_inline_result$jscomp$9; + case "body": + if (2 > formatContext.insertionMode) { + var preamble$jscomp$0 = preambleState || renderState.preamble; + if (preamble$jscomp$0.bodyChunks) + throw Error(formatProdErrorMessage(545, "``")); + null !== preambleState && target$jscomp$0.push("\x3c!--body--\x3e"); + preamble$jscomp$0.bodyChunks = []; + var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement( + preamble$jscomp$0.bodyChunks, + props, + "body" + ); + } else + JSCompiler_inline_result$jscomp$10 = pushStartGenericElement( + target$jscomp$0, + props, + "body" + ); + return JSCompiler_inline_result$jscomp$10; + case "html": + if (0 === formatContext.insertionMode) { + var preamble$jscomp$1 = preambleState || renderState.preamble; + if (preamble$jscomp$1.htmlChunks) + throw Error(formatProdErrorMessage(545, "``")); + null !== preambleState && target$jscomp$0.push("\x3c!--html--\x3e"); + preamble$jscomp$1.htmlChunks = [""]; + var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement( + preamble$jscomp$1.htmlChunks, + props, + "html" + ); + } else + JSCompiler_inline_result$jscomp$11 = pushStartGenericElement( + target$jscomp$0, + props, + "html" + ); + return JSCompiler_inline_result$jscomp$11; + default: + if (-1 !== type.indexOf("-")) { + target$jscomp$0.push(startChunkForTag(type)); + var children$jscomp$9 = null, + innerHTML$jscomp$8 = null, + propKey$jscomp$11; + for (propKey$jscomp$11 in props) + if (hasOwnProperty.call(props, propKey$jscomp$11)) { + var propValue$jscomp$11 = props[propKey$jscomp$11]; + if (null != propValue$jscomp$11) { + var attributeName = propKey$jscomp$11; + switch (propKey$jscomp$11) { + case "children": + children$jscomp$9 = propValue$jscomp$11; + break; + case "dangerouslySetInnerHTML": + innerHTML$jscomp$8 = propValue$jscomp$11; + break; + case "style": + pushStyleAttribute(target$jscomp$0, propValue$jscomp$11); + break; + case "suppressContentEditableWarning": + case "suppressHydrationWarning": + case "ref": + break; + case "className": + attributeName = "class"; + default: + if ( + isAttributeNameSafe(propKey$jscomp$11) && + "function" !== typeof propValue$jscomp$11 && + "symbol" !== typeof propValue$jscomp$11 && + !1 !== propValue$jscomp$11 + ) { + if (!0 === propValue$jscomp$11) propValue$jscomp$11 = ""; + else if ("object" === typeof propValue$jscomp$11) continue; + target$jscomp$0.push( + " ", + attributeName, + '="', + escapeTextForBrowser(propValue$jscomp$11), + '"' + ); + } + } + } + } + target$jscomp$0.push(">"); + pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9); + return children$jscomp$9; + } + } + return pushStartGenericElement(target$jscomp$0, props, type); +} +var endTagCache = new Map(); +function endChunkForTag(tag) { + var chunk = endTagCache.get(tag); + void 0 === chunk && ((chunk = ""), endTagCache.set(tag, chunk)); + return chunk; +} +function hoistPreambleState(renderState, preambleState) { + renderState = renderState.preamble; + null === renderState.htmlChunks && + preambleState.htmlChunks && + (renderState.htmlChunks = preambleState.htmlChunks); + null === renderState.headChunks && + preambleState.headChunks && + (renderState.headChunks = preambleState.headChunks); + null === renderState.bodyChunks && + preambleState.bodyChunks && + (renderState.bodyChunks = preambleState.bodyChunks); +} +function writeBootstrap(destination, renderState) { + renderState = renderState.bootstrapChunks; + for (var i = 0; i < renderState.length - 1; i++) + destination.push(renderState[i]); + return i < renderState.length + ? ((i = renderState[i]), (renderState.length = 0), destination.push(i)) + : !0; +} +function writeStartPendingSuspenseBoundary(destination, renderState, id) { + destination.push('\x3c!--$?--\x3e'); +} +function writeStartSegment(destination, renderState, formatContext, id) { + switch (formatContext.insertionMode) { + case 0: + case 1: + case 3: + case 2: + return ( + destination.push('