diff --git a/src/main/java/com/gamgyul_code/halmang_vision/bookmark/application/BookmarkService.java b/src/main/java/com/gamgyul_code/halmang_vision/bookmark/application/BookmarkService.java index 9fbd08b..caaf8c9 100644 --- a/src/main/java/com/gamgyul_code/halmang_vision/bookmark/application/BookmarkService.java +++ b/src/main/java/com/gamgyul_code/halmang_vision/bookmark/application/BookmarkService.java @@ -12,6 +12,7 @@ import com.gamgyul_code.halmang_vision.member.domain.MemberRepository; import com.gamgyul_code.halmang_vision.member.dto.ApiMember; import com.gamgyul_code.halmang_vision.spot.domain.Spot; +import com.gamgyul_code.halmang_vision.spot.domain.SpotCategory; import com.gamgyul_code.halmang_vision.spot.domain.SpotRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -28,13 +29,13 @@ public class BookmarkService { private final MemberRepository memberRepository; @Transactional - public void createSpotBookmark(long spotId, ApiMember apiMember) { + public void createSpotBookmark(long spotId, SpotCategory spotCategory, ApiMember apiMember) { Member member = apiMember.toMember(memberRepository); Spot spot = findSpotById(spotId); validateBookmarkExists(member, spot, false); - bookmarkRepository.save(bookmarkGenerator.generate(spot, member)); + bookmarkRepository.save(bookmarkGenerator.generate(spot, member, spotCategory)); } @Transactional diff --git a/src/main/java/com/gamgyul_code/halmang_vision/bookmark/domain/Bookmark.java b/src/main/java/com/gamgyul_code/halmang_vision/bookmark/domain/Bookmark.java index 409d79b..ecdfa75 100644 --- a/src/main/java/com/gamgyul_code/halmang_vision/bookmark/domain/Bookmark.java +++ b/src/main/java/com/gamgyul_code/halmang_vision/bookmark/domain/Bookmark.java @@ -3,12 +3,16 @@ import com.gamgyul_code.halmang_vision.global.utils.BaseTimeEntity; import com.gamgyul_code.halmang_vision.member.domain.Member; import com.gamgyul_code.halmang_vision.spot.domain.Spot; +import com.gamgyul_code.halmang_vision.spot.domain.SpotCategory; import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; +import jakarta.validation.constraints.NotNull; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; @@ -26,6 +30,10 @@ public class Bookmark extends BaseTimeEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Enumerated(value = EnumType.STRING) + @NotNull + SpotCategory spotCategory; + @ManyToOne @JoinColumn(name = "spot_id") private Spot spot; diff --git a/src/main/java/com/gamgyul_code/halmang_vision/bookmark/domain/BookmarkGenerator.java b/src/main/java/com/gamgyul_code/halmang_vision/bookmark/domain/BookmarkGenerator.java index 131fc65..53c51d3 100644 --- a/src/main/java/com/gamgyul_code/halmang_vision/bookmark/domain/BookmarkGenerator.java +++ b/src/main/java/com/gamgyul_code/halmang_vision/bookmark/domain/BookmarkGenerator.java @@ -2,15 +2,17 @@ import com.gamgyul_code.halmang_vision.member.domain.Member; import com.gamgyul_code.halmang_vision.spot.domain.Spot; +import com.gamgyul_code.halmang_vision.spot.domain.SpotCategory; import org.springframework.stereotype.Component; @Component public class BookmarkGenerator { - public Bookmark generate(Spot spot, Member member) { + public Bookmark generate(Spot spot, Member member, SpotCategory spotCategory) { return Bookmark.builder() .member(member) .spot(spot) + .spotCategory(spotCategory) .build(); } } diff --git a/src/main/java/com/gamgyul_code/halmang_vision/bookmark/presentation/BookmarkController.java b/src/main/java/com/gamgyul_code/halmang_vision/bookmark/presentation/BookmarkController.java index 87ee1d7..72fdcdb 100644 --- a/src/main/java/com/gamgyul_code/halmang_vision/bookmark/presentation/BookmarkController.java +++ b/src/main/java/com/gamgyul_code/halmang_vision/bookmark/presentation/BookmarkController.java @@ -3,6 +3,7 @@ import com.gamgyul_code.halmang_vision.bookmark.application.BookmarkService; import com.gamgyul_code.halmang_vision.global.utils.AuthPrincipal; import com.gamgyul_code.halmang_vision.member.dto.ApiMember; +import com.gamgyul_code.halmang_vision.spot.domain.SpotCategory; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -22,9 +23,10 @@ public class BookmarkController { private final BookmarkService bookmarkService; @Operation(summary = "관광지 북마크 생성", description = "해당 회원에게 관광지 북마크를 생성한다.") - @PostMapping("/spots/{spotId}") - public void createSpotBookmark(@PathVariable Long spotId, @Parameter(hidden = true) @AuthPrincipal ApiMember apiMember) { - bookmarkService.createSpotBookmark(spotId, apiMember); + @PostMapping("/spots/{spotId}/{spotCategory}") + public void createSpotBookmark(@PathVariable Long spotId, @PathVariable SpotCategory spotCategory, + @Parameter(hidden = true) @AuthPrincipal ApiMember apiMember) { + bookmarkService.createSpotBookmark(spotId, spotCategory, apiMember); } @Operation(summary = "관광지 북마크 삭제", description = "해당 회원에게 관광지 북마크를 삭제한다.") diff --git a/src/main/java/com/gamgyul_code/halmang_vision/spot/dto/SpotDto.java b/src/main/java/com/gamgyul_code/halmang_vision/spot/dto/SpotDto.java index 9a39839..bd0713d 100644 --- a/src/main/java/com/gamgyul_code/halmang_vision/spot/dto/SpotDto.java +++ b/src/main/java/com/gamgyul_code/halmang_vision/spot/dto/SpotDto.java @@ -168,6 +168,9 @@ public static class SpotTranslationDetailResponse { @Schema(description = "북마크 여부", example = "true") private boolean bookmarked; + @Schema(description = "관광지 카테고리", example = "HISTORY, LOVE") + private List spotCategories; + public static SpotTranslationDetailResponse fromEntity(SpotTranslation spotTranslation, boolean isBookmarked) { return SpotTranslationDetailResponse.builder() .spotTranslationId(spotTranslation.getId()) @@ -187,6 +190,7 @@ public static SpotTranslationDetailResponse fromEntity(SpotTranslation spotTrans .topographyStory(spotTranslation.getTopographyStory()) .caution(spotTranslation.getCaution()) .bookmarked(isBookmarked) + .spotCategories(spotTranslation.getSpot().getSpotCategory()) .build(); } } @@ -215,6 +219,9 @@ public static class SimpleSpotTranslationResponse { @Schema(description = "북마크 여부", example = "true") private boolean bookmarked; + @Schema(description = "관광지 카테고리", example = "HISTORY, LOVE") + private List spotCategories; + public static SimpleSpotTranslationResponse fromEntity(SpotTranslation spotTranslation, boolean isBookmarked) { return SimpleSpotTranslationResponse.builder() .spotTranslationId(spotTranslation.getId()) @@ -223,6 +230,7 @@ public static SimpleSpotTranslationResponse fromEntity(SpotTranslation spotTrans .imgUrl(spotTranslation.getSpot().getImgUrl()) .simpleExplanation(spotTranslation.getSimpleExplanation()) .bookmarked(isBookmarked) + .spotCategories(spotTranslation.getSpot().getSpotCategory()) .build(); } }