Skip to content

Commit

Permalink
✨ feat: 북마크된 공고 목록 조회 많은 순 조회 기능 개발 (#183)
Browse files Browse the repository at this point in the history
  • Loading branch information
xxoznge authored Feb 13, 2024
1 parent 5b450bb commit 1ecc95e
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.sponus.sponusbe.domain.bookmark.dto.BookmarkToggleRequest;
import com.sponus.sponusbe.domain.bookmark.dto.BookmarkToggleResponse;
import com.sponus.sponusbe.domain.bookmark.entity.BookmarkStatus;
import com.sponus.sponusbe.domain.bookmark.service.BookmarkQueryService;
import com.sponus.sponusbe.domain.organization.entity.Organization;
import com.sponus.sponusbe.domain.bookmark.service.BookmarkService;
import com.sponus.sponusbe.global.common.ApiResponse;
Expand All @@ -27,6 +28,7 @@
public class BookmarkController {

private final BookmarkService bookmarkService;
private final BookmarkQueryService bookmarkQueryService;

@PostMapping("/{organizationId}/bookmarked")
public ApiResponse<BookmarkToggleResponse> bookmarkToggle(
Expand All @@ -42,11 +44,15 @@ public ApiResponse<List<BookmarkGetResponse>> getBookmark(
@RequestParam(name = "sort") BookmarkStatus sortStatus
) {
if (sortStatus == BookmarkStatus.RECENT) {
return ApiResponse.onSuccess(bookmarkService.getRecentBookmark(authOrganization));
return ApiResponse.onSuccess(bookmarkQueryService.getRecentBookmark(authOrganization));
}

if (sortStatus == BookmarkStatus.VIEWED) {
return ApiResponse.onSuccess(bookmarkQueryService.getViewedBookmark(authOrganization));
}

if (sortStatus == BookmarkStatus.SAVED) {
return ApiResponse.onSuccess(bookmarkService.getSavedBookmark(authOrganization));
return ApiResponse.onSuccess(bookmarkQueryService.getSavedBookmark(authOrganization));
}
return ApiResponse.onSuccess(Collections.emptyList());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@
public record BookmarkGetResponse(
Long id,
Long writerId,
String writerName,
String title,
AnnouncementType type,
AnnouncementCategory category,
AnnouncementImageResponse mainImage,
LocalDateTime createdAt,
Long viewCount,
Long saveCount
) {

Expand All @@ -32,11 +34,13 @@ public static BookmarkGetResponse from(Announcement announcement, Bookmark bookm
return BookmarkGetResponse.builder()
.id(announcement.getId())
.writerId(announcement.getWriter().getId())
.writerName(announcement.getWriter().getName())
.title(announcement.getTitle())
.type(announcement.getType())
.category(announcement.getCategory())
.mainImage(AnnouncementImageResponse.from(mainImage))
.createdAt(bookmark.getCreatedAt())
.viewCount(announcement.getViewCount())
.saveCount(bookmark.getSaveCount())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public interface BookmarkRepository extends JpaRepository<Bookmark, Long> {

Optional<Bookmark> findByOrganizationAndAnnouncement(Organization organization, Announcement announcement);
List<Bookmark> findByOrganizationOrderByCreatedAtDesc(Organization organization);
List<Bookmark> findByOrganizationOrderByAnnouncementViewCountDesc(Organization organization);
List<Bookmark> findByOrganizationOrderBySaveCountDesc(Organization organization);

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.sponus.sponusbe.domain.bookmark.service;

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

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sponus.sponusbe.domain.announcement.repository.AnnouncementRepository;
import com.sponus.sponusbe.domain.bookmark.dto.BookmarkGetResponse;
import com.sponus.sponusbe.domain.bookmark.entity.Bookmark;
import com.sponus.sponusbe.domain.bookmark.repository.BookmarkRepository;
import com.sponus.sponusbe.domain.organization.entity.Organization;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Transactional(readOnly = true)
@Service
public class BookmarkQueryService {

private final BookmarkRepository bookmarkRepository;
private final AnnouncementRepository announcementRepository;

public List<BookmarkGetResponse> getRecentBookmark(Organization organization) {
return bookmarkRepository.findByOrganizationOrderByCreatedAtDesc(organization)
.stream()
.map(bookmark -> BookmarkGetResponse.from(bookmark.getAnnouncement(), bookmark))
.collect(Collectors.toList());
}

public List<BookmarkGetResponse> getViewedBookmark(Organization organization) {
List<Bookmark> bookmarks = bookmarkRepository.findByOrganizationOrderByAnnouncementViewCountDesc(organization);
return bookmarks.stream()
.map(bookmark -> BookmarkGetResponse.from(bookmark.getAnnouncement(), bookmark))
.collect(Collectors.toList());
}

public List<BookmarkGetResponse> getSavedBookmark(Organization organization) {
List<Bookmark> bookmarks = bookmarkRepository.findByOrganizationOrderBySaveCountDesc(organization);
return bookmarks.stream()
.map(bookmark -> BookmarkGetResponse.from(bookmark.getAnnouncement(), bookmark))
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.util.stream.Collectors;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sponus.sponusbe.domain.announcement.entity.Announcement;
import com.sponus.sponusbe.domain.announcement.exception.AnnouncementException;
Expand All @@ -17,14 +18,13 @@
import com.sponus.sponusbe.domain.organization.entity.Organization;
import com.sponus.sponusbe.domain.bookmark.repository.BookmarkRepository;

import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@RequiredArgsConstructor
@Service
@Transactional
@Service
public class BookmarkService {

private final BookmarkRepository bookmarkRepository;
Expand All @@ -46,18 +46,4 @@ public BookmarkToggleResponse bookmarkToggle(Organization organization, Bookmark
return BookmarkToggleResponse.from(bookmark, true); // 북마크가 안되어있는 경우 등록
}
}

public List<BookmarkGetResponse> getRecentBookmark(Organization organization) {
return bookmarkRepository.findByOrganizationOrderByCreatedAtDesc(organization)
.stream()
.map(bookmark -> BookmarkGetResponse.from(bookmark.getAnnouncement(), bookmark))
.collect(Collectors.toList());
}

public List<BookmarkGetResponse> getSavedBookmark(Organization organization) {
List<Bookmark> bookmarks = bookmarkRepository.findByOrganizationOrderBySaveCountDesc(organization);
return bookmarks.stream()
.map(bookmark -> BookmarkGetResponse.from(bookmark.getAnnouncement(), bookmark))
.collect(Collectors.toList());
}
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
package com.sponus.sponusbe.domain.report.service;

import static com.sponus.sponusbe.domain.propose.entity.QPropose.*;

import java.io.IOException;
import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import com.sponus.sponusbe.domain.announcement.entity.Announcement;
import com.sponus.sponusbe.domain.announcement.exception.AnnouncementErrorCode;
import com.sponus.sponusbe.domain.announcement.exception.AnnouncementException;
import com.sponus.sponusbe.domain.notification.service.FirebaseService;
import com.sponus.sponusbe.domain.organization.entity.Organization;
import com.sponus.sponusbe.domain.propose.entity.Propose;
Expand All @@ -28,11 +24,12 @@
import com.sponus.sponusbe.domain.report.repository.ReportRepository;
import com.sponus.sponusbe.domain.s3.S3Service;

import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Transactional
@Slf4j
@RequiredArgsConstructor
@Transactional
@Service
public class ReportService {

Expand Down

0 comments on commit 1ecc95e

Please sign in to comment.