From 314694e96c8b00bab2da7925deff69a62af583e7 Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 01:57:51 +0900 Subject: [PATCH 01/14] =?UTF-8?q?[feat]=20=EC=9B=A8=EC=9D=B4=EB=B8=94?= =?UTF-8?q?=EC=A1=B4=20=EC=98=81=EC=97=85=20=EC=A0=95=EB=B3=B4=20=EC=97=94?= =?UTF-8?q?=ED=8B=B0=ED=8B=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/WaybleZoneOperatingHour.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java diff --git a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java new file mode 100644 index 00000000..c8afc280 --- /dev/null +++ b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java @@ -0,0 +1,35 @@ +package com.wayble.server.wayblezone.entity; + +import com.wayble.server.common.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Table(name = "wayble_zone_operating_hours") // 웨이블존 영업 정보 +public class WaybleZoneOperatingHour extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "wayble_zone_id", nullable = false) + private WaybleZone waybleZone; + + @Column(name = "day_of_week", nullable = false) + private String dayOfWeek; // 요일 정보 + + @Column(name = "start_time", nullable = false) + private String startTime; // 영업 시작 시간 + + @Column(name = "close_time", nullable = false) + private String closeTime; // 영업 종료 시간 +} \ No newline at end of file From db165f1e546ce6bb6046d459782758ceded7a988 Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 02:18:04 +0900 Subject: [PATCH 02/14] =?UTF-8?q?[feat]=20=EC=9B=A8=EC=9D=B4=EB=B8=94?= =?UTF-8?q?=EC=A1=B4=20=ED=8E=B8=EC=9D=98=20=EC=8B=9C=EC=84=A4=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?(=EC=8B=9C=EC=84=A4=20=EC=A0=95=EB=B3=B4=20=ED=8F=AC=ED=95=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wayblezone/entity/WaybleZoneFacility.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneFacility.java diff --git a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneFacility.java b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneFacility.java new file mode 100644 index 00000000..03224a42 --- /dev/null +++ b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneFacility.java @@ -0,0 +1,42 @@ +package com.wayble.server.wayblezone.entity; + +import jakarta.persistence.*; +import lombok.*; + + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name = "wayble_zone_facility") +public class WaybleZoneFacility { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + // 웨이블존 연관관계 (1:1로 가정 => 웨이블존당 시설 1세트) + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "wayble_zone_id", nullable = false) + private WaybleZone waybleZone; + + // 시설 정보 (있음/없음 여부) + @Column(nullable = false) + private boolean hasSlope; // 경사로 + + @Column(nullable = false) + private boolean hasNoDoorStep; // 문턱 + + @Column(nullable = false) + private boolean hasElevator; // 엘리베이터 + + @Column(nullable = false) + private boolean hasTableSeat; // 테이블석 + + @Column(nullable = false) + private boolean hasDisabledToilet; // 장애인 화장실 + + @Column(length = 20) + private String floorInfo; // 층수 정보 (ex: "1층", "B1", "2층") +} \ No newline at end of file From 86a76392ef44c9ffcda5c6976c816409d215ffac Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 02:21:19 +0900 Subject: [PATCH 03/14] =?UTF-8?q?[feat]=20=EB=82=B4=EA=B0=80(=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=EA=B0=80)=20=EC=A0=80=EC=9E=A5=ED=95=9C=20=EC=9E=A5?= =?UTF-8?q?=EC=86=8C=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wayble/server/user/entity/UserPlace.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/com/wayble/server/user/entity/UserPlace.java diff --git a/src/main/java/com/wayble/server/user/entity/UserPlace.java b/src/main/java/com/wayble/server/user/entity/UserPlace.java new file mode 100644 index 00000000..d174c59d --- /dev/null +++ b/src/main/java/com/wayble/server/user/entity/UserPlace.java @@ -0,0 +1,29 @@ +package com.wayble.server.user.entity; + +import com.wayble.server.common.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Table(name = "user_place") // 유져가 저장한 장소 +public class UserPlace extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "title", nullable = false) + private String title; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id", nullable = false) + private User user; +} \ No newline at end of file From f3865a466e7c768486d717c2927bd02c23616f6c Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 02:23:56 +0900 Subject: [PATCH 04/14] =?UTF-8?q?[feat]=20=EC=9C=A0=EC=A0=80=20=EC=9E=A5?= =?UTF-8?q?=EC=86=8C=EC=99=80=20=EC=9B=A8=EC=9D=B4=EB=B8=94=EC=A1=B4=20?= =?UTF-8?q?=EB=A7=A4=ED=95=91=20=EA=B4=80=EB=A0=A8=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/UserPlaceWaybleZoneMapping.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/com/wayble/server/user/entity/UserPlaceWaybleZoneMapping.java diff --git a/src/main/java/com/wayble/server/user/entity/UserPlaceWaybleZoneMapping.java b/src/main/java/com/wayble/server/user/entity/UserPlaceWaybleZoneMapping.java new file mode 100644 index 00000000..b746bdd1 --- /dev/null +++ b/src/main/java/com/wayble/server/user/entity/UserPlaceWaybleZoneMapping.java @@ -0,0 +1,29 @@ +package com.wayble.server.user.entity; + +import com.wayble.server.wayblezone.entity.WaybleZone; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Table(name = "user_place_wayble_zone_mapping") // 유저 장소와 웨이블존 다대다 매핑 +public class UserPlaceWaybleZoneMapping { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_place_id", nullable = false) + private UserPlace userPlace; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "wayble_zone_id", nullable = false) + private WaybleZone waybleZone; +} From 98d13c8717ef480f2feb6d4e0bfca640cee5357e Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 02:27:04 +0900 Subject: [PATCH 05/14] =?UTF-8?q?[refactor]=20=EC=9B=A8=EC=9D=B4=EB=B8=94?= =?UTF-8?q?=EC=A1=B4=20=ED=8E=B8=EC=9D=98=20=EC=8B=9C=EC=84=A4=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=97=94=ED=8B=B0=ED=8B=B0=EC=97=90=20BaseEntity?= =?UTF-8?q?=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wayble/server/wayblezone/entity/WaybleZoneFacility.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneFacility.java b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneFacility.java index 03224a42..f2014e93 100644 --- a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneFacility.java +++ b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneFacility.java @@ -1,5 +1,6 @@ package com.wayble.server.wayblezone.entity; +import com.wayble.server.common.entity.BaseEntity; import jakarta.persistence.*; import lombok.*; @@ -9,8 +10,8 @@ @Builder @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor(access = AccessLevel.PROTECTED) -@Table(name = "wayble_zone_facility") -public class WaybleZoneFacility { +@Table(name = "wayble_zone_facility") // 웨이블존 편의 시설 정보 +public class WaybleZoneFacility extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) From f74b518451a9d716dcfafbf6df4d237d23fc92a6 Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 02:47:18 +0900 Subject: [PATCH 06/14] =?UTF-8?q?[refactor]=20=EC=9B=A8=EC=9D=B4=EB=B8=94?= =?UTF-8?q?=EC=A1=B4=20=EC=97=94=ED=8B=B0=ED=8B=B0=EC=97=90=20=EB=A7=A4?= =?UTF-8?q?=ED=95=91=20=EA=B4=80=EA=B3=84=20=ED=95=84=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EB=88=84=EC=A0=81=20=ED=8F=89=EC=A0=90?= =?UTF-8?q?,=20=EB=A6=AC=EB=B7=B0=20=EC=88=98=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/wayblezone/entity/WaybleZone.java | 36 +++++++++---------- .../wayblezone/entity/WaybleZoneFacility.java | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZone.java b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZone.java index 04478f1a..9f36d70a 100644 --- a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZone.java +++ b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZone.java @@ -3,6 +3,7 @@ import com.wayble.server.common.entity.Address; import com.wayble.server.common.entity.BaseEntity; import com.wayble.server.review.entity.Review; +import com.wayble.server.user.entity.UserPlaceWaybleZoneMapping; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.SQLDelete; @@ -18,23 +19,29 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @SQLDelete(sql = "UPDATE wayble_zone SET deleted_at = now() WHERE id = ?") @SQLRestriction("deleted_at IS NULL") -@Table(name = "wayble_zone") +@Table(name = "wayble_zone") // 웨이블 존 public class WaybleZone extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - private String zoneName; + private String zoneName; // 가게 이름 - private String contactNumber; + private String contactNumber; // 가게 전화 번호 @Enumerated(EnumType.STRING) @Column(nullable = false) - private WaybleZoneType zoneType; + private WaybleZoneType zoneType; // 가게 타입 (음식점,카페,편의점) @Embedded - private Address address; + private Address address; // 주소 + + @Column(nullable = false) + private double rating = 0.0; // 누적 평균 평점 + + @Column(nullable = false) + private int reviewCount = 0; // 리뷰 수 @OneToMany(mappedBy = "waybleZone", cascade = CascadeType.ALL, orphanRemoval = true) private List waybleZoneImageList = new ArrayList<>(); @@ -42,19 +49,12 @@ public class WaybleZone extends BaseEntity { @OneToMany(mappedBy = "waybleZone", cascade = CascadeType.ALL, orphanRemoval = true) private List reviewList = new ArrayList<>(); - /** - * TODO: 영업 시간 구현 필요 - */ - - /** - * TODO: 장애 시설 정보 구현 필요 - */ + @OneToMany(mappedBy = "waybleZone", cascade = CascadeType.ALL, orphanRemoval = true) + private List operatingHours = new ArrayList<>(); - /** - * TODO: Review 관련 엔티티 구현 필요 - */ + @OneToOne(mappedBy = "waybleZone", cascade = CascadeType.ALL, orphanRemoval = true) + private WaybleZoneFacility facility; - /** - * TODO: 내가 저장한 장소 관련 엔티티 구현 필요 - */ + @OneToMany(mappedBy = "waybleZone", cascade = CascadeType.ALL, orphanRemoval = true) + private List userPlaceMappings = new ArrayList<>(); } diff --git a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneFacility.java b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneFacility.java index f2014e93..6c094364 100644 --- a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneFacility.java +++ b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneFacility.java @@ -10,7 +10,7 @@ @Builder @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor(access = AccessLevel.PROTECTED) -@Table(name = "wayble_zone_facility") // 웨이블존 편의 시설 정보 +@Table(name = "wayble_zone_facility") // 웨이블존 편의 시설 정보 public class WaybleZoneFacility extends BaseEntity { @Id From 5b56caaa7d0785fd3f99a7db1a0148b38407c6f8 Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 02:59:11 +0900 Subject: [PATCH 07/14] =?UTF-8?q?[refactor]=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EB=A0=88=ED=8F=AC=EC=A7=80=ED=86=A0=EB=A6=AC,=20Dto=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/review/dto/ReviewResponseDto.java | 14 ++++++++++++-- .../server/review/repository/ReviewRepository.java | 4 ++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/wayble/server/review/dto/ReviewResponseDto.java b/src/main/java/com/wayble/server/review/dto/ReviewResponseDto.java index d99466e9..db03dd8e 100644 --- a/src/main/java/com/wayble/server/review/dto/ReviewResponseDto.java +++ b/src/main/java/com/wayble/server/review/dto/ReviewResponseDto.java @@ -1,4 +1,14 @@ package com.wayble.server.review.dto; -public record ReviewResponseDto() { -} +import java.time.LocalDate; +import java.util.List; + +public record ReviewResponseDto( + Long reviewId, + String userNickname, + double rating, + String content, + LocalDate visitDate, + int likes, + List images +) {} diff --git a/src/main/java/com/wayble/server/review/repository/ReviewRepository.java b/src/main/java/com/wayble/server/review/repository/ReviewRepository.java index bffe95a4..94d4e08a 100644 --- a/src/main/java/com/wayble/server/review/repository/ReviewRepository.java +++ b/src/main/java/com/wayble/server/review/repository/ReviewRepository.java @@ -3,5 +3,9 @@ import com.wayble.server.review.entity.Review; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface ReviewRepository extends JpaRepository { + List findByWaybleZoneIdOrderByCreatedAtDesc(Long waybleZoneId); // 최신순 + List findByWaybleZoneIdOrderByRatingDesc(Long waybleZoneId); // 평점순 } From 5f10a45347299e0fbbec7c52702c593bf6ca15ce Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 03:04:26 +0900 Subject: [PATCH 08/14] =?UTF-8?q?[refactor]=20ReviewService=EC=97=90=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/review/service/ReviewService.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/main/java/com/wayble/server/review/service/ReviewService.java b/src/main/java/com/wayble/server/review/service/ReviewService.java index 060ed3bc..06e1f34d 100644 --- a/src/main/java/com/wayble/server/review/service/ReviewService.java +++ b/src/main/java/com/wayble/server/review/service/ReviewService.java @@ -2,6 +2,7 @@ import com.wayble.server.common.exception.ApplicationException; import com.wayble.server.review.dto.ReviewRegisterDto; +import com.wayble.server.review.dto.ReviewResponseDto; import com.wayble.server.review.entity.Review; import com.wayble.server.review.entity.ReviewImage; import com.wayble.server.review.repository.ReviewImageRepository; @@ -15,6 +16,9 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.stream.Collectors; + @Service @RequiredArgsConstructor public class ReviewService { @@ -43,4 +47,29 @@ public void registerReview(Long zoneId, ReviewRegisterDto dto, String token) { // visitDate 및 facilities 저장은 필요시 추가 구현 } + + public List getReviews(Long zoneId, String sort) { + WaybleZone zone = waybleZoneRepository.findById(zoneId) + .orElseThrow(() -> new ApplicationException(WaybleZoneErrorCase.WAYBLE_ZONE_NOT_FOUND)); + + List reviews = switch (sort) { + case "rating" -> reviewRepository.findByWaybleZoneIdOrderByRatingDesc(zoneId); + case "latest" -> reviewRepository.findByWaybleZoneIdOrderByCreatedAtDesc(zoneId); + default -> reviewRepository.findByWaybleZoneIdOrderByCreatedAtDesc(zoneId); + }; + + return reviews.stream() + .map(review -> new ReviewResponseDto( + review.getId(), + review.getUser().getNickname(), + review.getRating(), + review.getContent(), + review.getCreatedAt().toLocalDate(), + review.getLikeCount(), + review.getReviewImageList().stream() + .map(ReviewImage::getImageUrl) + .collect(Collectors.toList()) + )) + .collect(Collectors.toList()); + } } \ No newline at end of file From 659b88fbe6fa612c31ea59a5dcef6d12a0d07f18 Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 03:05:48 +0900 Subject: [PATCH 09/14] =?UTF-8?q?[refactor]=20ReviewController=EC=97=90=20?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/controller/ReviewController.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/com/wayble/server/review/controller/ReviewController.java b/src/main/java/com/wayble/server/review/controller/ReviewController.java index ee0ae4ac..510258ec 100644 --- a/src/main/java/com/wayble/server/review/controller/ReviewController.java +++ b/src/main/java/com/wayble/server/review/controller/ReviewController.java @@ -2,6 +2,7 @@ import com.wayble.server.common.response.CommonResponse; import com.wayble.server.review.dto.ReviewRegisterDto; +import com.wayble.server.review.dto.ReviewResponseDto; import com.wayble.server.review.service.ReviewService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -12,6 +13,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequiredArgsConstructor @RequestMapping("/api/v1/wayble-zones/{waybleZoneId}/reviews") @@ -38,4 +41,17 @@ public CommonResponse registerReview( reviewService.registerReview(waybleZoneId, dto, authorizationHeader); return CommonResponse.success("리뷰가 등록되었습니다."); } + + @GetMapping + @Operation(summary = "웨이블존 리뷰 목록 조회", description = "웨이블존에 대한 리뷰를 최신순 또는 평점순으로 조회합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 목록 조회 성공"), + @ApiResponse(responseCode = "404", description = "해당 웨이블존이 존재하지 않음") + }) + public CommonResponse> getReviews( + @PathVariable Long waybleZoneId, + @RequestParam(defaultValue = "latest") String sort + ) { + return CommonResponse.success(reviewService.getReviews(waybleZoneId, sort)); + } } \ No newline at end of file From a45694d560a045960f5d73ab2684fecd713a2fa0 Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 03:35:27 +0900 Subject: [PATCH 10/14] =?UTF-8?q?[fix]=20=EC=9B=A8=EC=9D=B4=EB=B8=94?= =?UTF-8?q?=EC=A1=B4=20api=20=EC=9D=91=EB=8B=B5=20=EC=8B=A4=ED=8C=A8?= =?UTF-8?q?=EC=8B=9C=20=EC=97=90=EB=9F=AC=20=EC=83=81=ED=83=9C=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wayble/server/wayblezone/exception/WaybleZoneErrorCase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/wayble/server/wayblezone/exception/WaybleZoneErrorCase.java b/src/main/java/com/wayble/server/wayblezone/exception/WaybleZoneErrorCase.java index df25ddf9..dd569ae0 100644 --- a/src/main/java/com/wayble/server/wayblezone/exception/WaybleZoneErrorCase.java +++ b/src/main/java/com/wayble/server/wayblezone/exception/WaybleZoneErrorCase.java @@ -8,7 +8,7 @@ @RequiredArgsConstructor public enum WaybleZoneErrorCase implements ErrorCase { - WAYBLE_ZONE_NOT_FOUND(400, 2001, "웨이블존을 찾을 수 없습니다."); + WAYBLE_ZONE_NOT_FOUND(404, 2001, "해당 웨이블존을 찾을 수 없습니다."); private final Integer httpStatusCode; private final Integer errorCode; From d4d45c727a33c0c92f34d806b8bdc4882073855e Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 03:57:07 +0900 Subject: [PATCH 11/14] =?UTF-8?q?[refactor]=20=EC=9B=A8=EC=9D=B4=EB=B8=94?= =?UTF-8?q?=EC=A1=B4=20=EC=98=81=EC=97=85=20=EC=A0=95=EB=B3=B4=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20=ED=83=80=EC=9E=85=20=EA=B0=9C=EC=84=A0=20=EB=B0=8F?= =?UTF-8?q?=20ReviewController=EC=97=90=20@Pattern=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/review/controller/ReviewController.java | 3 ++- .../wayblezone/entity/WaybleZoneOperatingHour.java | 10 +++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/wayble/server/review/controller/ReviewController.java b/src/main/java/com/wayble/server/review/controller/ReviewController.java index 510258ec..c56b818d 100644 --- a/src/main/java/com/wayble/server/review/controller/ReviewController.java +++ b/src/main/java/com/wayble/server/review/controller/ReviewController.java @@ -10,6 +10,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import jakarta.validation.Valid; +import jakarta.validation.constraints.Pattern; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -50,7 +51,7 @@ public CommonResponse registerReview( }) public CommonResponse> getReviews( @PathVariable Long waybleZoneId, - @RequestParam(defaultValue = "latest") String sort + @RequestParam(defaultValue = "latest") @Pattern(regexp = "^(latest|rating)$", message = "정렬 방식은 'latest' 또는 'rating'만 가능합니다.") String sort ) { return CommonResponse.success(reviewService.getReviews(waybleZoneId, sort)); } diff --git a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java index c8afc280..30e669f5 100644 --- a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java +++ b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java @@ -7,6 +7,9 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import java.time.DayOfWeek; +import java.time.LocalTime; + @Entity @Getter @@ -24,12 +27,13 @@ public class WaybleZoneOperatingHour extends BaseEntity { @JoinColumn(name = "wayble_zone_id", nullable = false) private WaybleZone waybleZone; + @Enumerated(EnumType.STRING) @Column(name = "day_of_week", nullable = false) - private String dayOfWeek; // 요일 정보 + private DayOfWeek dayOfWeek; // 요일 정보 @Column(name = "start_time", nullable = false) - private String startTime; // 영업 시작 시간 + private LocalTime startTime; // 영업 시작 시간 @Column(name = "close_time", nullable = false) - private String closeTime; // 영업 종료 시간 + private LocalTime closeTime; // 영업 종료 시간 } \ No newline at end of file From dadf282a28a9536d52527440dd4ff68cc6a7f8cc Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 04:19:49 +0900 Subject: [PATCH 12/14] =?UTF-8?q?[refactor]=20WaybleZoneOperatingHour?= =?UTF-8?q?=EC=97=90=20=EA=B2=80=EC=A6=9D=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EB=B0=8F=20=EC=A0=9C=EC=95=BD=20=EC=A1=B0=EA=B1=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/review/controller/ReviewController.java | 3 ++- .../wayblezone/entity/WaybleZoneOperatingHour.java | 14 +++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/wayble/server/review/controller/ReviewController.java b/src/main/java/com/wayble/server/review/controller/ReviewController.java index c56b818d..4c493c15 100644 --- a/src/main/java/com/wayble/server/review/controller/ReviewController.java +++ b/src/main/java/com/wayble/server/review/controller/ReviewController.java @@ -14,6 +14,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; + import java.util.List; @RestController @@ -51,7 +52,7 @@ public CommonResponse registerReview( }) public CommonResponse> getReviews( @PathVariable Long waybleZoneId, - @RequestParam(defaultValue = "latest") @Pattern(regexp = "^(latest|rating)$", message = "정렬 방식은 'latest' 또는 'rating'만 가능합니다.") String sort + @RequestParam(defaultValue = "latest") String sort ) { return CommonResponse.success(reviewService.getReviews(waybleZoneId, sort)); } diff --git a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java index 30e669f5..292a3afa 100644 --- a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java +++ b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java @@ -16,7 +16,8 @@ @Builder @AllArgsConstructor @NoArgsConstructor -@Table(name = "wayble_zone_operating_hours") // 웨이블존 영업 정보 +@Table(name = "wayble_zone_operating_hours", + uniqueConstraints = @UniqueConstraint(columnNames = {"wayble_zone_id", "day_of_week"})) // 웨이블존 영업 정보 public class WaybleZoneOperatingHour extends BaseEntity { @Id @@ -36,4 +37,15 @@ public class WaybleZoneOperatingHour extends BaseEntity { @Column(name = "close_time", nullable = false) private LocalTime closeTime; // 영업 종료 시간 + + @Column(name = "is_closed", nullable = false) + private Boolean isClosed = false; // 영업 여부 + + @PrePersist + @PreUpdate + private void validateTimes() { + if (!isClosed && startTime != null && closeTime != null && startTime.isAfter(closeTime)) { + throw new IllegalStateException("시작 시간은 종료 시간보다 앞서야 합니다."); + } + } } \ No newline at end of file From 38baa0948413f080a7a7908e7a8bbdbef3f4303a Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 04:26:09 +0900 Subject: [PATCH 13/14] =?UTF-8?q?[refactor]=20WaybleZoneOperatingHour?= =?UTF-8?q?=EC=97=90=20=ED=9C=B4=EB=AC=B4=EC=9D=BC=20=EC=8B=9C=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=ED=95=84=EB=93=9C=20=EC=B2=98=EB=A6=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/WaybleZoneOperatingHour.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java index 292a3afa..85a3f24f 100644 --- a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java +++ b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java @@ -44,8 +44,19 @@ public class WaybleZoneOperatingHour extends BaseEntity { @PrePersist @PreUpdate private void validateTimes() { - if (!isClosed && startTime != null && closeTime != null && startTime.isAfter(closeTime)) { - throw new IllegalStateException("시작 시간은 종료 시간보다 앞서야 합니다."); + if (isClosed) { + // 휴무일에는 시간 정보가 있어서는 안 됨 + if (startTime != null || closeTime != null) { + throw new IllegalStateException("휴무일에는 시간 정보가 있을 수 없습니다."); + } + } else { + // 영업일에는 시간 정보가 필수 + if (startTime == null || closeTime == null) { + throw new IllegalStateException("영업일에는 시작 시간과 종료 시간이 필요합니다."); + } + if (startTime.equals(closeTime)) { + throw new IllegalStateException("시작 시간과 종료 시간이 동일할 수 없습니다."); + } } } } \ No newline at end of file From de1620eb70c2bd70453fe96c00306223b04fdfbf Mon Sep 17 00:00:00 2001 From: seungin Date: Thu, 10 Jul 2025 04:33:10 +0900 Subject: [PATCH 14/14] =?UTF-8?q?[fix]=20=EC=98=81=EC=97=85=20=EC=97=AC?= =?UTF-8?q?=EB=B6=80=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/wayblezone/entity/WaybleZoneOperatingHour.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java index 85a3f24f..ad0482f4 100644 --- a/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java +++ b/src/main/java/com/wayble/server/wayblezone/entity/WaybleZoneOperatingHour.java @@ -41,6 +41,7 @@ public class WaybleZoneOperatingHour extends BaseEntity { @Column(name = "is_closed", nullable = false) private Boolean isClosed = false; // 영업 여부 + /* 필요하게 되면 나중에 사용 @PrePersist @PreUpdate private void validateTimes() { @@ -59,4 +60,5 @@ private void validateTimes() { } } } + */ } \ No newline at end of file