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,15 +1,19 @@
package com.example.FixLog.controller;

import com.example.FixLog.dto.PageResponseDto;
import com.example.FixLog.dto.Response;
import com.example.FixLog.dto.bookmark.request.BookmarkFolderCreateRequest;
import com.example.FixLog.dto.bookmark.request.BookmarkFolderUpdateRequest;
import com.example.FixLog.dto.bookmark.request.BookmarkMoveRequest;
import com.example.FixLog.dto.bookmark.response.BookmarkFolderCreateResponse;
import com.example.FixLog.dto.bookmark.response.BookmarkFolderPageResponse;
import com.example.FixLog.dto.bookmark.response.BookmarkFolderReadResponse;
import com.example.FixLog.dto.post.MyPostPageResponseDto;
import com.example.FixLog.service.BookmarkFolderService;
import com.example.FixLog.service.BookmarkService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.*;

@RestController
Expand All @@ -30,16 +34,6 @@ public ResponseEntity<?> createFolder(
return ResponseEntity.ok(Response.success("북마크 폴더 생성 성공", response));
}

// 북마크 폴더 목록 전체 조회
@GetMapping
public ResponseEntity<Response<BookmarkFolderPageResponse>> getFolders(
@RequestParam String requesterEmail,
@RequestParam int page
) {
BookmarkFolderPageResponse response = bookmarkFolderService.getFoldersByEmail(requesterEmail, page);
return ResponseEntity.ok(Response.success("북마크 폴더 목록 전체 조회 성공", response));
}

// 북마크 폴더 이름 수정
@PatchMapping("/{folder_id}")
public ResponseEntity<Response<Void>> updateFolderName(
Expand Down Expand Up @@ -73,5 +67,31 @@ public ResponseEntity<Response<Void>> deleteFolder(
return ResponseEntity.ok(Response.success("북마크 폴더 삭제 완료", null));
}

// 북마크 폴더 목록 전체 조회 - MVP
@GetMapping
public ResponseEntity<Response<PageResponseDto<BookmarkFolderReadResponse>>> getFolders(
@AuthenticationPrincipal UserDetails userDetails,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size
) {
String email = userDetails.getUsername();
PageResponseDto<BookmarkFolderReadResponse> response = bookmarkFolderService.getFoldersByEmail(email, page, size);
return ResponseEntity.ok(Response.success("북마크 폴더 목록 전체 조회 성공", response));
}

// 특정 폴더의 북마크 목록 조회 -MVP
@GetMapping("/{folderId}/bookmarks")
public ResponseEntity<Response<PageResponseDto<MyPostPageResponseDto>>> getBookmarksByFolder(
@PathVariable Long folderId,
@AuthenticationPrincipal UserDetails userDetails,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "6") int size,
@RequestParam(defaultValue = "0") int sort
) {
String email = userDetails.getUsername();
PageResponseDto<MyPostPageResponseDto> data = bookmarkService.getBookmarksInFolder(email, folderId, page, sort, size);
return ResponseEntity.ok(Response.success("특정 폴더의 북마크 목록 조회 성공", data));
}


}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,18 @@
import com.example.FixLog.domain.bookmark.Bookmark;
import com.example.FixLog.domain.bookmark.BookmarkFolder;
import com.example.FixLog.domain.post.Post;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.Optional;

public interface BookmarkRepository extends JpaRepository<Bookmark, Long> {
Optional<Bookmark> findByFolderIdAndPostId(BookmarkFolder folderId, Post postId);

@EntityGraph(attributePaths = {"postId.postLikes"}) // 좋아요 수 때문
Page<Bookmark> findByFolderId(BookmarkFolder folder, Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import com.example.FixLog.domain.bookmark.BookmarkFolder;
import com.example.FixLog.domain.member.Member;
import com.example.FixLog.dto.PageResponseDto;
import com.example.FixLog.dto.bookmark.response.BookmarkFolderCreateResponse;
import com.example.FixLog.dto.bookmark.response.BookmarkFolderPageResponse;
import com.example.FixLog.dto.bookmark.response.BookmarkFolderReadResponse;
import com.example.FixLog.exception.CustomException;
import com.example.FixLog.exception.ErrorCode;
Expand Down Expand Up @@ -36,25 +36,13 @@ public BookmarkFolderCreateResponse createFolder(String folderName, String reque
}

// 북마크 폴더 목록 전체 조회
public BookmarkFolderPageResponse getFoldersByEmail(String email, int page) {
public PageResponseDto<BookmarkFolderReadResponse> getFoldersByEmail(String email, int page, int size) {
Member member = memberRepository.findByEmail(email)
.orElseThrow(() -> new CustomException(ErrorCode.USER_EMAIL_NOT_FOUND));

Pageable pageable = PageRequest.of(page - 1, 10); // 기본 size = 10
Pageable pageable = PageRequest.of(page, size);
Page<BookmarkFolder> folderPage = bookmarkFolderRepository.findAllByUserId(member, pageable);

List<BookmarkFolderReadResponse> content = folderPage.getContent().stream()
.map(folder -> new BookmarkFolderReadResponse(folder.getFolderId(), folder.getFolderName()))
.toList();

return new BookmarkFolderPageResponse(
content,
folderPage.getNumber() + 1,
folderPage.getSize(),
folderPage.getTotalPages(),
folderPage.getTotalElements()
);

return PageResponseDto.from(folderPage, folder -> new BookmarkFolderReadResponse(folder.getFolderId(), folder.getFolderName()));
}

// 북마크 폴더 이름 수정
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/com/example/FixLog/service/BookmarkService.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,34 @@
import com.example.FixLog.domain.bookmark.Bookmark;
import com.example.FixLog.domain.bookmark.BookmarkFolder;
import com.example.FixLog.domain.member.Member;
import com.example.FixLog.domain.post.Post;
import com.example.FixLog.dto.PageResponseDto;
import com.example.FixLog.dto.post.MyPostPageResponseDto;
import com.example.FixLog.exception.CustomException;
import com.example.FixLog.exception.ErrorCode;
import com.example.FixLog.repository.MemberRepository;
import com.example.FixLog.repository.bookmark.BookmarkFolderRepository;
import com.example.FixLog.repository.bookmark.BookmarkRepository;
import com.example.FixLog.repository.fork.ForkRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
public class BookmarkService {

private final BookmarkFolderRepository bookmarkFolderRepository;
private final BookmarkRepository bookmarkRepository;
private final MemberRepository memberRepository;
private final ForkRepository forkRepository;

// 북마크 폴더 이동
public void moveBookmarkToFolder(Long bookmarkId, Long newFolderId, String email) {
Expand All @@ -37,4 +50,33 @@ public void moveBookmarkToFolder(Long bookmarkId, Long newFolderId, String email

bookmark.moveToFolder(targetFolder);
}

// 특정 폴더의 북마크 목록
public PageResponseDto<MyPostPageResponseDto> getBookmarksInFolder(String email, Long folderId, int page, int sort, int size) {
Member member = memberRepository.findByEmail(email)
.orElseThrow(() -> new CustomException(ErrorCode.USER_EMAIL_NOT_FOUND));

BookmarkFolder folder = bookmarkFolderRepository.findById(folderId)
.orElseThrow(() -> new CustomException(ErrorCode.FOLDER_NOT_FOUND));

// 1: 오래된순, 0: 최신순
Sort.Direction direction = (sort == 1) ? Sort.Direction.ASC : Sort.Direction.DESC;
Pageable pageable = PageRequest.of(page, size, Sort.by(direction, "postId.createdAt"));

Page<Bookmark> bookmarkPage = bookmarkRepository.findByFolderId(folder, pageable);
List<Post> bookmarkedPosts = bookmarkPage.map(Bookmark::getPostId).getContent();

// fork count 한번에 조회
Map<Long, Integer> forkCountMap = forkRepository.countForksByOriginalPosts(bookmarkedPosts)
.stream()
.collect(Collectors.toMap(
row -> (Long) row[0],
row -> ((Long) row[1]).intValue()
));

return PageResponseDto.from(bookmarkPage.map(Bookmark::getPostId), post ->
MyPostPageResponseDto.from(post, forkCountMap.getOrDefault(post.getPostId(), 0))
);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class MainPageService {

public MainPageService(PostRepository postRepository, MemberService memberService) {
this.postRepository = postRepository;
this.memberService = memberService;
}

// 이미지 null일 때 default 사진으로 변경 (프로필 사진,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public MypagePostService(PostRepository postRepository, MemberRepository memberR
// 내가 쓴 글 보기
public PageResponseDto<MyPostPageResponseDto> getMyPosts(String email, int page, int sort, int size) {
Member member = memberRepository.findByEmail(email)
.orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND));
.orElseThrow(() -> new CustomException(ErrorCode.USER_EMAIL_NOT_FOUND));

// 1: 오래된순, 0: 최신순
Sort.Direction direction = (sort == 1) ? Sort.Direction.ASC : Sort.Direction.DESC;
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/example/FixLog/service/TagService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.example.FixLog.domain.member.Member;
import com.example.FixLog.domain.tag.Tag;
import com.example.FixLog.dto.UserIdDto;
import com.example.FixLog.dto.tag.TagDto;
import com.example.FixLog.dto.tag.TagResponseDto;
import com.example.FixLog.exception.CustomException;
Expand Down