Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,51 +1,102 @@
package com.sesac.boheommong.domain.bookmark.controller;

import com.sesac.boheommong.domain.bookmark.dto.request.BookmarkRequestDto;
import com.sesac.boheommong.domain.bookmark.dto.response.BookmarkResponseDto;
import com.sesac.boheommong.domain.bookmark.service.BookmarkService;
import com.sesac.boheommong.domain.bookmark.swagger.*;
import com.sesac.boheommong.global.jwt.service.TokenProvider;
import com.sesac.boheommong.global.response.Response;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api")
@RequestMapping("/api/bookmarks")
@RequiredArgsConstructor
public class BookmarkController {

private final BookmarkService bookmarkService;
private final TokenProvider tokenProvider;

@GetMapping("/bookmarks/state")
/**
* 특정 상품이 북마크 되었는지 여부 조회
*/
@GetBookmarkState
@GetMapping("/state")
public Response<Boolean> getBookmarkState(
@RequestParam String loginEmail,
HttpServletRequest request,
@RequestParam Long productId
) {
String loginEmail = tokenProvider.getUserLoginEmail(request);
Boolean state = bookmarkService.getState(loginEmail, productId);
return Response.success(state);
}

@GetMapping("/bookmarks/user/{userId}")
public Response<List<BookmarkResponseDto>> getAllBookmarksByUser(@PathVariable Long userId) {
List<BookmarkResponseDto> results = bookmarkService.getAllBookmarksByUser(userId);
/**
* 로그인 유저의 모든 북마크 조회
*/
@GetAllBookmarks
@GetMapping
public Response<List<BookmarkResponseDto>> getAllBookmarks(HttpServletRequest request) {
String loginEmail = tokenProvider.getUserLoginEmail(request);
List<BookmarkResponseDto> results = bookmarkService.getAllBookmarksByLoginEmail(loginEmail);
return Response.success(results);
}

@PostMapping("/bookmarks")
public Response<BookmarkResponseDto> createBookmark(@RequestBody BookmarkRequestDto requestDto) {
BookmarkResponseDto created = bookmarkService.createBookmark(requestDto);
/**
* 북마크 추가/취소(Toggle)
*/
@PostToggleBookmark
@PostMapping("/products/{productId}/toggle")
public Response<Void> addOrCancelBookmark(
HttpServletRequest request,
@PathVariable("productId") Long productId
) {
String loginEmail = tokenProvider.getUserLoginEmail(request);
bookmarkService.addOrCancelBookmark(loginEmail, productId);
return Response.success();
}

/**
* 북마크 생성
*/
@PostCreateBookmark
@PostMapping
public Response<BookmarkResponseDto> createBookmark(
HttpServletRequest request,
@RequestParam Long productId
) {
String loginEmail = tokenProvider.getUserLoginEmail(request);
BookmarkResponseDto created = bookmarkService.createBookmark(loginEmail, productId);
return Response.success(created);
}

@GetMapping("/bookmarks/{bookmarkId}")
public Response<BookmarkResponseDto> getBookmark(@PathVariable Long bookmarkId) {
BookmarkResponseDto result = bookmarkService.getBookmark(bookmarkId);
/**
* 특정 북마크 단건 조회
*/
@GetBookmarkById
@GetMapping("/{bookmarkId}")
public Response<BookmarkResponseDto> getBookmark(
HttpServletRequest request,
@PathVariable Long bookmarkId
) {
String loginEmail = tokenProvider.getUserLoginEmail(request);
BookmarkResponseDto result = bookmarkService.getBookmark(loginEmail, bookmarkId);
return Response.success(result);
}

@DeleteMapping("/bookmarks/{bookmarkId}")
public Response<Void> deleteBookmark(@PathVariable Long bookmarkId) {
bookmarkService.deleteBookmark(bookmarkId);
/**
* 북마크 삭제(소프트 삭제)
*/
@DeleteBookmark
@DeleteMapping("/{bookmarkId}")
public Response<Void> deleteBookmark(
HttpServletRequest request,
@PathVariable Long bookmarkId
) {
String loginEmail = tokenProvider.getUserLoginEmail(request);
bookmarkService.deleteBookmark(loginEmail, bookmarkId);
return Response.success();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,12 @@
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@Entity
@Getter
@Table(name = "bookmarks", uniqueConstraints = {
@UniqueConstraint(columnNames = {"user_id", "product_id"})
})
@EntityListeners(AuditingEntityListener.class)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "bookmarks",
uniqueConstraints = @UniqueConstraint(columnNames = {"user_id", "product_id"}))
public class Bookmark extends BaseEntity {

@Id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import com.sesac.boheommong.domain.insurance.entity.InsuranceProduct;
import com.sesac.boheommong.domain.user.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
Expand All @@ -15,4 +17,9 @@ public interface BookmarkRepository extends JpaRepository<Bookmark, Long> {
Optional<Bookmark> findByUserAndProduct(User user, InsuranceProduct product);

List<Bookmark> findAllByUserOrderByCreatedAtDesc(User user);

@Query("SELECT b FROM Bookmark b " +
"WHERE b.user.userId = :userId AND b.product.productId = :productId")
Optional<Bookmark> findIncludingDeleted(@Param("userId") Long userId,
@Param("productId") Long productId);
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,48 @@
package com.sesac.boheommong.domain.bookmark.service;

import com.sesac.boheommong.domain.bookmark.dto.request.BookmarkRequestDto;
import com.sesac.boheommong.domain.bookmark.dto.response.BookmarkResponseDto;

import java.util.List;

public interface BookmarkService {

BookmarkResponseDto createBookmark(BookmarkRequestDto requestDto);
BookmarkResponseDto getBookmark(Long bookmarkId);
void deleteBookmark(Long bookmarkId);
Boolean getState(String Email, Long boardId);
List<BookmarkResponseDto> getAllBookmarksByUser(Long userId);
/**
* 특정 상품이 북마크 되었는지 여부를 반환
* @param loginEmail 로그인 이메일
* @param productId 상품 ID
* @return 북마크 되어 있다면 true, 아니면 false
*/
Boolean getState(String loginEmail, Long productId);

/**
* 로그인 이메일로 유저를 조회한 뒤 해당 유저의 모든 북마크 목록을 반환
* @param loginEmail 로그인 이메일
* @return BookmarkResponseDto 리스트
*/
List<BookmarkResponseDto> getAllBookmarksByLoginEmail(String loginEmail);

/**
* 북마크 생성
* @param loginEmail 로그인 이메일
* @param productId 북마크할 상품 ID
* @return 생성된 BookmarkResponseDto
*/
BookmarkResponseDto createBookmark(String loginEmail, Long productId);

/**
* 단일 북마크 조회
* @param loginEmail 로그인 이메일
* @param bookmarkId 북마크 ID
* @return 조회된 BookmarkResponseDto
*/
BookmarkResponseDto getBookmark(String loginEmail, Long bookmarkId);

/**
* 북마크 삭제 (소프트 삭제)
* @param loginEmail 로그인 이메일
* @param bookmarkId 북마크 ID
*/
void deleteBookmark(String loginEmail, Long bookmarkId);

void addOrCancelBookmark(String loginEmail, Long productId);
}
Loading