From 5e2a197f4d7bf1c6c43b18da38320a19e370f5c9 Mon Sep 17 00:00:00 2001 From: syyling Date: Mon, 27 May 2024 15:18:56 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[refactor]=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85,=20dto=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../record/application/dto/response/RecordResponse.java | 4 ++-- .../record/application/mapper/RecordMapper.java | 4 ++-- .../record/application/service/RecordGetService.java | 8 ++++---- .../record/presentation/RecordController.java | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/mookive/mookive_backend/record/application/dto/response/RecordResponse.java b/src/main/java/com/mookive/mookive_backend/record/application/dto/response/RecordResponse.java index 587ecb7..19bb661 100644 --- a/src/main/java/com/mookive/mookive_backend/record/application/dto/response/RecordResponse.java +++ b/src/main/java/com/mookive/mookive_backend/record/application/dto/response/RecordResponse.java @@ -54,12 +54,12 @@ public RecordCalendarResponse(String rating, String review, String title, String @Getter @NoArgsConstructor - public static class RecordHomeResponse{ + public static class RecordHomeByUserResponse{ private String poster; private String tmdbId; @Builder - public RecordHomeResponse(String poster, String tmdbId) { + public RecordHomeByUserResponse(String poster, String tmdbId) { this.poster = poster; this.tmdbId = tmdbId; } diff --git a/src/main/java/com/mookive/mookive_backend/record/application/mapper/RecordMapper.java b/src/main/java/com/mookive/mookive_backend/record/application/mapper/RecordMapper.java index a78945a..ac957ac 100644 --- a/src/main/java/com/mookive/mookive_backend/record/application/mapper/RecordMapper.java +++ b/src/main/java/com/mookive/mookive_backend/record/application/mapper/RecordMapper.java @@ -42,8 +42,8 @@ public static RecordResponse.RecordCalendarResponse mapToRecordCalendarResponse( .build(); } - public static RecordResponse.RecordHomeResponse mapToRecordHomeResponse(Movie movie) { - return RecordResponse.RecordHomeResponse.builder() + public static RecordResponse.RecordHomeByUserResponse mapToRecordHomeResponse(Movie movie) { + return RecordResponse.RecordHomeByUserResponse.builder() .poster(movie.getPoster()) .tmdbId(movie.getTmdbId()) .build(); diff --git a/src/main/java/com/mookive/mookive_backend/record/application/service/RecordGetService.java b/src/main/java/com/mookive/mookive_backend/record/application/service/RecordGetService.java index 242283c..75b7781 100644 --- a/src/main/java/com/mookive/mookive_backend/record/application/service/RecordGetService.java +++ b/src/main/java/com/mookive/mookive_backend/record/application/service/RecordGetService.java @@ -47,7 +47,7 @@ public RecordResponse.RecordDetailResponse getRecord(Long userId, Long movieId) } } - public List> getRecordByCalendar(String year, String month) { + public List> getRecordOfCalender(String year, String month) { String start = "01"; String end = "31"; LocalDate startDate = getLocalDate(year, month, start); LocalDate endDate = getLocalDate(year, month, end); @@ -86,13 +86,13 @@ private static LocalDate getLocalDate(String year, String month, String day) { return LocalDate.parse(localDate, formatter); } - public List getRecordByHome(Long userId) { - List recordHomeResponseList = new ArrayList<>(HOME_RECORDS); + public List getRecordOfHomeByUser(Long userId) { + List recordHomeResponseList = new ArrayList<>(HOME_RECORDS); List records = recordQueryService.findByUserIdOrderByUpdatedAtDesc(userId); for(int i=0; i> getRecordByCalendar(@RequestParam String year, @RequestParam String month) { - return recordGetService.getRecordByCalendar(year, month); + public List> getRecordOfCalender(@RequestParam String year, @RequestParam String month) { + return recordGetService.getRecordOfCalender(year, month); } @GetMapping("/record/home/recent/{userId}") - public List getRecordByHome(@PathVariable Long userId) { - return recordGetService.getRecordByHome(userId); + public List getRecordOfHomeByUser(@PathVariable Long userId) { + return recordGetService.getRecordOfHomeByUser(userId); } } From fd88e51555bc13b8323b1351ccc0260e46951410 Mon Sep 17 00:00:00 2001 From: syyling Date: Mon, 27 May 2024 16:17:51 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[feat]=20=ED=99=88=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EB=8B=A4=EB=A5=B8=20=EC=82=AC=EC=9A=A9=EC=9E=90=EA=B0=80=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=ED=95=9C=20=EC=98=81=ED=99=94=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/RecordResponse.java | 15 +++++- .../application/mapper/RecordMapper.java | 10 +++- .../application/service/RecordGetService.java | 48 ++++++++++++++++--- .../domain/repository/MovieMapping.java | 8 ++++ .../domain/repository/RecordRepository.java | 6 ++- .../domain/service/RecordQueryService.java | 13 ++++- .../record/presentation/RecordController.java | 6 +++ 7 files changed, 94 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/mookive/mookive_backend/record/domain/repository/MovieMapping.java diff --git a/src/main/java/com/mookive/mookive_backend/record/application/dto/response/RecordResponse.java b/src/main/java/com/mookive/mookive_backend/record/application/dto/response/RecordResponse.java index 19bb661..0f539ee 100644 --- a/src/main/java/com/mookive/mookive_backend/record/application/dto/response/RecordResponse.java +++ b/src/main/java/com/mookive/mookive_backend/record/application/dto/response/RecordResponse.java @@ -64,6 +64,19 @@ public RecordHomeByUserResponse(String poster, String tmdbId) { this.tmdbId = tmdbId; } } - + @Getter + @NoArgsConstructor + public static class RecordHomeResponse { + private String tmdbId; + private String title; + private String poster; + + @Builder + public RecordHomeResponse(String tmdbId, String title, String poster) { + this.tmdbId = tmdbId; + this.title = title; + this.poster = poster; + } + } } diff --git a/src/main/java/com/mookive/mookive_backend/record/application/mapper/RecordMapper.java b/src/main/java/com/mookive/mookive_backend/record/application/mapper/RecordMapper.java index ac957ac..665c7f6 100644 --- a/src/main/java/com/mookive/mookive_backend/record/application/mapper/RecordMapper.java +++ b/src/main/java/com/mookive/mookive_backend/record/application/mapper/RecordMapper.java @@ -42,10 +42,18 @@ public static RecordResponse.RecordCalendarResponse mapToRecordCalendarResponse( .build(); } - public static RecordResponse.RecordHomeByUserResponse mapToRecordHomeResponse(Movie movie) { + public static RecordResponse.RecordHomeByUserResponse mapToRecordHomeByUserResponse(Movie movie) { return RecordResponse.RecordHomeByUserResponse.builder() .poster(movie.getPoster()) .tmdbId(movie.getTmdbId()) .build(); } + + public static RecordResponse.RecordHomeResponse mapToRecordHomeResponse(Movie movie) { + return RecordResponse.RecordHomeResponse.builder() + .title(movie.getTitle()) + .poster(movie.getPoster()) + .tmdbId(movie.getTmdbId()) + .build(); + } } diff --git a/src/main/java/com/mookive/mookive_backend/record/application/service/RecordGetService.java b/src/main/java/com/mookive/mookive_backend/record/application/service/RecordGetService.java index 75b7781..ff6ba9c 100644 --- a/src/main/java/com/mookive/mookive_backend/record/application/service/RecordGetService.java +++ b/src/main/java/com/mookive/mookive_backend/record/application/service/RecordGetService.java @@ -7,15 +7,15 @@ import com.mookive.mookive_backend.record.application.dto.response.RecordResponse; import com.mookive.mookive_backend.record.application.mapper.RecordMapper; import com.mookive.mookive_backend.record.domain.entity.Record; +import com.mookive.mookive_backend.record.domain.repository.MovieMapping; import com.mookive.mookive_backend.record.domain.service.RecordQueryService; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; + import java.time.LocalDate; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; +import java.util.*; @Service @RequiredArgsConstructor @@ -25,7 +25,9 @@ public class RecordGetService { private final RecordQueryService recordQueryService; private final KeywordQueryService keywordQueryService; private final MovieQueryService movieQueryService; - private static final int HOME_RECORDS = 5; + + private static final int HOME_RECORDS_BY_USER = 5; + private static final int HOME_RECORDS = 10; public RecordResponse.RecordDetailResponse getRecord(Long userId, Long movieId) { Optional record = recordQueryService.findByUserIdAndMovieId(userId, movieId); @@ -87,14 +89,46 @@ private static LocalDate getLocalDate(String year, String month, String day) { } public List getRecordOfHomeByUser(Long userId) { - List recordHomeResponseList = new ArrayList<>(HOME_RECORDS); - List records = recordQueryService.findByUserIdOrderByUpdatedAtDesc(userId); + List recordHomeResponseList = new ArrayList<>(HOME_RECORDS_BY_USER); + List records = recordQueryService.findTop5ByUserIdOrderByUpdatedAtDesc(userId); for(int i=0; i getRecordOfHome(Long userId) { + List recordHomeResponseList = new ArrayList<>(); + HashMap movieIdMap = new HashMap<>(); + + List records = recordQueryService.findTop20ByOrderByUpdatedAtDesc(); + List recordByUserList = recordQueryService.findAllByUserId(userId); + List recordByUserMovieList = new ArrayList<>(); + for(MovieMapping movieMapping : recordByUserList) { + recordByUserMovieList.add(movieMapping.getMovie()); + } + + for(Record record : records) { + if(recordHomeResponseList.size() == HOME_RECORDS) break; + if(!Objects.equals(record.getUser().getId(), userId)) { + if(movieIdMap.containsKey(record.getMovie().getId()) || recordByUserMovieList.contains(record.getMovie())) { + continue; + } + else { + Long movieId = record.getMovie().getId(); + movieIdMap.put(movieId, 1); + Movie movie = movieQueryService.findById(movieId); + RecordResponse.RecordHomeResponse recordHomeResponse = RecordMapper.mapToRecordHomeResponse(movie); + recordHomeResponseList.add(recordHomeResponse); + } + } + } + return recordHomeResponseList; + } } diff --git a/src/main/java/com/mookive/mookive_backend/record/domain/repository/MovieMapping.java b/src/main/java/com/mookive/mookive_backend/record/domain/repository/MovieMapping.java new file mode 100644 index 0000000..0df4947 --- /dev/null +++ b/src/main/java/com/mookive/mookive_backend/record/domain/repository/MovieMapping.java @@ -0,0 +1,8 @@ +package com.mookive.mookive_backend.record.domain.repository; + +import com.mookive.mookive_backend.movie.domain.entity.Movie; + +public interface MovieMapping { + + Movie getMovie(); +} diff --git a/src/main/java/com/mookive/mookive_backend/record/domain/repository/RecordRepository.java b/src/main/java/com/mookive/mookive_backend/record/domain/repository/RecordRepository.java index 506797d..eacf847 100644 --- a/src/main/java/com/mookive/mookive_backend/record/domain/repository/RecordRepository.java +++ b/src/main/java/com/mookive/mookive_backend/record/domain/repository/RecordRepository.java @@ -13,5 +13,9 @@ public interface RecordRepository extends JpaRepository { List findByDateBetween(LocalDate startDate, LocalDate endDate); - List findByUserIdOrderByUpdatedAtDesc(Long userId); + List findTop5ByUserIdOrderByUpdatedAtDesc(Long userId); + + List findTop20ByOrderByUpdatedAtDesc(); + + List findAllByUserId(Long userId); } diff --git a/src/main/java/com/mookive/mookive_backend/record/domain/service/RecordQueryService.java b/src/main/java/com/mookive/mookive_backend/record/domain/service/RecordQueryService.java index 5109039..74ace15 100644 --- a/src/main/java/com/mookive/mookive_backend/record/domain/service/RecordQueryService.java +++ b/src/main/java/com/mookive/mookive_backend/record/domain/service/RecordQueryService.java @@ -1,6 +1,7 @@ package com.mookive.mookive_backend.record.domain.service; import com.mookive.mookive_backend.record.domain.entity.Record; +import com.mookive.mookive_backend.record.domain.repository.MovieMapping; import com.mookive.mookive_backend.record.domain.repository.RecordRepository; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; @@ -30,7 +31,15 @@ public List findByDateBetween(LocalDate startDate, LocalDate endDate) { return recordRepository.findByDateBetween(startDate, endDate); } - public List findByUserIdOrderByUpdatedAtDesc(Long userId) { - return recordRepository.findByUserIdOrderByUpdatedAtDesc(userId); + public List findTop5ByUserIdOrderByUpdatedAtDesc(Long userId) { + return recordRepository.findTop5ByUserIdOrderByUpdatedAtDesc(userId); + } + + public List findTop20ByOrderByUpdatedAtDesc() { + return recordRepository.findTop20ByOrderByUpdatedAtDesc(); + } + + public List findAllByUserId(Long userId) { + return recordRepository.findAllByUserId(userId); } } diff --git a/src/main/java/com/mookive/mookive_backend/record/presentation/RecordController.java b/src/main/java/com/mookive/mookive_backend/record/presentation/RecordController.java index 434f6f0..1b22045 100644 --- a/src/main/java/com/mookive/mookive_backend/record/presentation/RecordController.java +++ b/src/main/java/com/mookive/mookive_backend/record/presentation/RecordController.java @@ -7,6 +7,7 @@ import com.mookive.mookive_backend.record.application.service.RecordGetService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; + import java.util.List; @RestController @@ -42,4 +43,9 @@ public List getRecordOfHomeByUser(@Path return recordGetService.getRecordOfHomeByUser(userId); } + @GetMapping("/record/home/recent/exclusion/{userId}") + public List getRecordOfHome(@PathVariable Long userId) { + return recordGetService.getRecordOfHome(userId); + } + }