diff --git a/src/main/java/Capstone/AutoScheduler/global/config/SecurityConfig.java b/src/main/java/Capstone/AutoScheduler/global/config/SecurityConfig.java index 05936c4..edf0899 100644 --- a/src/main/java/Capstone/AutoScheduler/global/config/SecurityConfig.java +++ b/src/main/java/Capstone/AutoScheduler/global/config/SecurityConfig.java @@ -34,7 +34,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti // Generator 관련 접근 .requestMatchers("/generator/", "/generator/{generatorId}", "/generator/list/{memberId}").permitAll() // Bookmark 관련 접근 - .requestMatchers("/bookmark/add/{memberId}/{generatorId}", "/bookmark/delete/{bookmarkId}" ).permitAll() + .requestMatchers("/bookmark/add/{memberId}/{generatorId}", "/bookmark/delete/{memberId}/{generatorId}" ).permitAll() // Crawling 관련 접근 .requestMatchers("/crawl", "/crawl-with-login").permitAll() // /crawl 경로 접근 허용 // 기타 관련 접근 diff --git a/src/main/java/Capstone/AutoScheduler/global/domain/entity/Generator.java b/src/main/java/Capstone/AutoScheduler/global/domain/entity/Generator.java index 6655ae3..ef29517 100644 --- a/src/main/java/Capstone/AutoScheduler/global/domain/entity/Generator.java +++ b/src/main/java/Capstone/AutoScheduler/global/domain/entity/Generator.java @@ -8,6 +8,7 @@ import lombok.*; +import javax.net.ssl.SSLSession; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -74,4 +75,13 @@ public void addEvent(Event event) { this.events.add(event); event.setGenerator(this); } + + public Bookmark getBookmarkByMember(Long memberId) { + return this.bookmarkList.stream() + .filter(bookmark -> bookmark.getMember().getMemberId().equals(memberId)) + .findFirst() + .orElse(null); // 해당 멤버의 북마크가 없을 경우 null 반환 + } + + } diff --git a/src/main/java/Capstone/AutoScheduler/global/repository/BookmarkRepository.java b/src/main/java/Capstone/AutoScheduler/global/repository/BookmarkRepository.java index 0cb7634..7107063 100644 --- a/src/main/java/Capstone/AutoScheduler/global/repository/BookmarkRepository.java +++ b/src/main/java/Capstone/AutoScheduler/global/repository/BookmarkRepository.java @@ -21,4 +21,7 @@ public interface BookmarkRepository extends JpaRepository { @Query("SELECT b.generator.generatorId FROM Bookmark b WHERE b.member.memberId = :memberId") List findBookmarkedGeneratorIdsByMemberId(@Param("memberId") Long memberId); + @Query("SELECT b.id FROM Bookmark b WHERE b.member.id = :memberId AND b.generator.generatorId = :generatorId") + Long findBookmarkIdByMemberAndGenerator(@Param("memberId") Long memberId, @Param("generatorId") Long generatorId); + } diff --git a/src/main/java/Capstone/AutoScheduler/global/service/BookmarkService/BookmarkQueryService.java b/src/main/java/Capstone/AutoScheduler/global/service/BookmarkService/BookmarkQueryService.java new file mode 100644 index 0000000..e1f47ed --- /dev/null +++ b/src/main/java/Capstone/AutoScheduler/global/service/BookmarkService/BookmarkQueryService.java @@ -0,0 +1,5 @@ +package Capstone.AutoScheduler.global.service.BookmarkService; + +public interface BookmarkQueryService { + Long findBookmarkIdByMemberAndGenerator(Long memberId, Long generatorId); +} diff --git a/src/main/java/Capstone/AutoScheduler/global/service/BookmarkService/BookmarkQueryServiceImpl.java b/src/main/java/Capstone/AutoScheduler/global/service/BookmarkService/BookmarkQueryServiceImpl.java new file mode 100644 index 0000000..3b2ee47 --- /dev/null +++ b/src/main/java/Capstone/AutoScheduler/global/service/BookmarkService/BookmarkQueryServiceImpl.java @@ -0,0 +1,20 @@ +package Capstone.AutoScheduler.global.service.BookmarkService; + +import Capstone.AutoScheduler.global.repository.BookmarkRepository; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +@Transactional +@Slf4j +public class BookmarkQueryServiceImpl implements BookmarkQueryService { + private final BookmarkRepository bookmarkRepository; + + @Override + public Long findBookmarkIdByMemberAndGenerator(Long memberId, Long generatorId) { + return bookmarkRepository.findBookmarkIdByMemberAndGenerator(memberId, generatorId); + } +} diff --git a/src/main/java/Capstone/AutoScheduler/global/web/controller/BookmarkController.java b/src/main/java/Capstone/AutoScheduler/global/web/controller/BookmarkController.java index 9dab4e1..7eb6742 100644 --- a/src/main/java/Capstone/AutoScheduler/global/web/controller/BookmarkController.java +++ b/src/main/java/Capstone/AutoScheduler/global/web/controller/BookmarkController.java @@ -5,6 +5,7 @@ import Capstone.AutoScheduler.global.converter.BookmarkConverter; import Capstone.AutoScheduler.global.domain.entity.Bookmark; import Capstone.AutoScheduler.global.service.BookmarkService.BookmarkCommandService; +import Capstone.AutoScheduler.global.service.BookmarkService.BookmarkQueryService; import Capstone.AutoScheduler.global.web.dto.Bookmark.BookmarkResponseDTO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -22,6 +23,7 @@ @Tag(name = "일정 생성기 북마크 API", description = "일정 생성기 북마크 추가/삭제/개수 조회 관련 API입니다.") public class BookmarkController { private final BookmarkCommandService bookmarkCommandService; + private final BookmarkQueryService bookmarkQueryService; // 북마크 추가 @PostMapping("/add/{memberId}/{generatorId}") @@ -35,12 +37,13 @@ public ApiResponse createBookmark( } // 북마크 삭제 - @DeleteMapping("/delete/{bookmarkId}") - @Operation(summary = "북마크 삭제 API", description = "bookmarks, bookmarkId") - public ApiResponse deleteBookmark( - @PathVariable(name = "bookmarkId") Long bookmarkId - ) { + @DeleteMapping("/delete/{memberId}/{generatorId}") + @Operation(summary = "북마크 삭제 API", description = "memberId와 generatorId를 이용해 북마크를 삭제합니다.") + public ApiResponse deleteBookmark(@PathVariable Long memberId, @PathVariable Long generatorId) { + Long bookmarkId = bookmarkQueryService.findBookmarkIdByMemberAndGenerator(memberId, generatorId); bookmarkCommandService.deleteBookmark(bookmarkId); + return ApiResponse.onSuccess(SuccessStatus.BOOKMARK_OK, BookmarkConverter.toDeleteBookmarkResultDTO(bookmarkId)); } + }