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
Expand Up @@ -8,6 +8,8 @@
import org.atdev.artrip.domain.home.converter.HomeConverter;
import org.atdev.artrip.global.apipayload.code.status.ExhibitError;
import org.atdev.artrip.global.apipayload.exception.GeneralException;
import org.atdev.artrip.global.s3.service.S3Service;
import org.atdev.artrip.global.s3.web.dto.request.ImageResizeRequest;
import org.springframework.stereotype.Service;

@Service
Expand All @@ -16,20 +18,22 @@ public class ExhibitService {

private final ExhibitRepository exhibitRepository;
private final HomeConverter homeConverter;
private final S3Service s3Service;
private final FavoriteExhibitRepository favoriteExhibitRepository;


public ExhibitDetailResponse getExhibitDetail(Long exhibitId, Long userId) {
public ExhibitDetailResponse getExhibitDetail(Long exhibitId, Long userId, ImageResizeRequest resize) {

Exhibit exhibit = exhibitRepository.findById(exhibitId)
.orElseThrow(() -> new GeneralException(ExhibitError._EXHIBIT_NOT_FOUND));

String resizedPosterUrl = s3Service.buildResizeUrl(exhibit.getPosterUrl(), resize.getW(), resize.getH(), resize.getF());

boolean isFavorite = false;
if (userId != null ) {
isFavorite = favoriteExhibitRepository.existsActive(userId, exhibitId);
}

return homeConverter.toHomeExhibitResponse(exhibit, isFavorite);
return homeConverter.toHomeExhibitResponse(exhibit, isFavorite, resizedPosterUrl);
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
import org.atdev.artrip.global.apipayload.CommonResponse;
import org.atdev.artrip.global.apipayload.code.status.CommonError;
import org.atdev.artrip.global.apipayload.code.status.HomeError;
import org.atdev.artrip.global.s3.web.dto.request.ImageResizeRequest;
import org.atdev.artrip.global.swagger.ApiErrorResponses;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.ResponseEntity;
Expand Down Expand Up @@ -52,10 +54,12 @@ public ResponseEntity<CommonResponse<List<String>>> getGenres(){
@GetMapping("/{id}")
public ResponseEntity<CommonResponse<ExhibitDetailResponse>> getExhibit(
@PathVariable Long id,
@AuthenticationPrincipal UserDetails userDetails) {

@AuthenticationPrincipal UserDetails userDetails,
@ParameterObject ImageResizeRequest resize
){

Long userId = getUserId(userDetails);
ExhibitDetailResponse exhibit= exhibitService.getExhibitDetail(id, userId);
ExhibitDetailResponse exhibit= exhibitService.getExhibitDetail(id, userId, resize);

return ResponseEntity.ok(CommonResponse.onSuccess(exhibit));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public HomeListResponse toHomeExhibitListResponse(Exhibit exhibit, boolean isFav
.build();
}

public ExhibitDetailResponse toHomeExhibitResponse(Exhibit exhibit, boolean isFavorite) {
public ExhibitDetailResponse toHomeExhibitResponse(Exhibit exhibit, boolean isFavorite, String resizePosterUrl) {

var hall = exhibit.getExhibitHall();
String period = exhibit.getStartDate().format(formatter) + " - " + exhibit.getEndDate().format(formatter);
Expand All @@ -64,7 +64,7 @@ public ExhibitDetailResponse toHomeExhibitResponse(Exhibit exhibit, boolean isFa
.exhibitId(exhibit.getExhibitId())
.title(exhibit.getTitle())
.description(exhibit.getDescription())
.posterUrl(exhibit.getPosterUrl())
.posterUrl(resizePosterUrl)
.ticketUrl(exhibit.getTicketUrl())
.status(exhibit.getStatus())
.exhibitPeriod(period)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.atdev.artrip.domain.home.service;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.atdev.artrip.domain.auth.repository.UserRepository;
import org.atdev.artrip.domain.exhibit.data.Exhibit;
import org.atdev.artrip.domain.exhibit.web.dto.request.ExhibitFilterRequest;
Expand All @@ -19,6 +20,8 @@
import org.atdev.artrip.global.apipayload.code.status.UserError;
import org.atdev.artrip.global.apipayload.exception.GeneralException;

import org.atdev.artrip.global.s3.service.S3Service;
import org.atdev.artrip.global.s3.web.dto.request.ImageResizeRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.stereotype.Service;
Expand All @@ -29,13 +32,15 @@

@Service
@RequiredArgsConstructor
@Slf4j
public class HomeService {

private final ExhibitRepository exhibitRepository;
private final UserKeywordRepository userkeywordRepository;
private final ExhibitHallRepository exhibitHallRepository;
private final UserRepository userRepository;
private final HomeConverter homeConverter;
private final S3Service s3Service;
private final FavoriteExhibitRepository favoriteExhibitRepository;

private Set<Long> getFavoriteIds(Long userId) {
Expand Down Expand Up @@ -87,7 +92,7 @@ public FilterResponse getFilterExhibit(ExhibitFilterRequest dto, Pageable pageab

// 사용자 맞춤 전시 랜덤 추천
@Transactional
public List<HomeListResponse> getRandomPersonalized(Long userId, PersonalizedRequest request){
public List<HomeListResponse> getRandomPersonalized(Long userId, PersonalizedRequest request, ImageResizeRequest resize){

if (!userRepository.existsById(userId)) {
throw new GeneralException(UserError._USER_NOT_FOUND);
Expand All @@ -105,6 +110,10 @@ public List<HomeListResponse> getRandomPersonalized(Long userId, PersonalizedReq

List<HomeListResponse> results = exhibitRepository.findRandomExhibits(filter);

results.forEach(r -> r.setPosterUrl(
s3Service.buildResizeUrl(r.getPosterUrl(), resize.getW(), resize.getH(), resize.getF())
));

Set<Long> favoriteIds = getFavoriteIds(userId);
setFavorites(results, favoriteIds);

Expand All @@ -119,11 +128,15 @@ public List<HomeListResponse> getRandomPersonalized(Long userId, PersonalizedReq
}

// 이번주 랜덤 전시 추천
public List<HomeListResponse> getRandomSchedule(ScheduleRandomRequest request, Long userId){
public List<HomeListResponse> getRandomSchedule(ScheduleRandomRequest request, Long userId, ImageResizeRequest resize){

RandomExhibitRequest filter = homeConverter.from(request);
List<HomeListResponse> results = exhibitRepository.findRandomExhibits(filter);

results.forEach(r -> r.setPosterUrl(
s3Service.buildResizeUrl(r.getPosterUrl(), resize.getW(), resize.getH(), resize.getF())
));

Set<Long> favoriteIds = getFavoriteIds(userId);
setFavorites(results, favoriteIds);

Expand All @@ -138,12 +151,16 @@ public List<HomeListResponse> getRandomSchedule(ScheduleRandomRequest request, L
}

// 장르별 전시 랜덤 추천
public List<HomeListResponse> getRandomGenre(GenreRandomRequest request, Long userId){
public List<HomeListResponse> getRandomGenre(GenreRandomRequest request, Long userId, ImageResizeRequest resize){

RandomExhibitRequest filter = homeConverter.fromGenre(request);

List<HomeListResponse> results = exhibitRepository.findRandomExhibits(filter);

results.forEach(r -> r.setPosterUrl(
s3Service.buildResizeUrl(r.getPosterUrl(), resize.getW(), resize.getH(), resize.getF())
));

Set<Long> favoriteIds = getFavoriteIds(userId);
setFavorites(results, favoriteIds);

Expand All @@ -158,12 +175,16 @@ public List<HomeListResponse> getRandomGenre(GenreRandomRequest request, Long us
}

// 오늘날 전시 랜덤 추천
public List<HomeListResponse> getRandomToday(TodayRandomRequest request, Long userId){
public List<HomeListResponse> getRandomToday(TodayRandomRequest request, Long userId, ImageResizeRequest resize){

RandomExhibitRequest filter = homeConverter.fromToday(request);

List<HomeListResponse> results = exhibitRepository.findRandomExhibits(filter);

results.forEach(r -> r.setPosterUrl(
s3Service.buildResizeUrl(r.getPosterUrl(), resize.getW(), resize.getH(), resize.getF())
));

Set<Long> favoriteIds = getFavoriteIds(userId);
setFavorites(results, favoriteIds);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@
import org.atdev.artrip.global.apipayload.CommonResponse;
import org.atdev.artrip.global.apipayload.code.status.CommonError;
import org.atdev.artrip.global.apipayload.code.status.HomeError;
import org.atdev.artrip.global.s3.web.dto.request.ImageResizeRequest;
import org.atdev.artrip.global.swagger.ApiErrorResponses;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
Expand Down Expand Up @@ -50,11 +52,12 @@ public class HomeController {
@PostMapping("/personalized/random")
public ResponseEntity<CommonResponse<List<HomeListResponse>>> getRandomPersonalized(
@AuthenticationPrincipal UserDetails userDetails,
@Valid @RequestBody PersonalizedRequest requestDto){
@Valid @RequestBody PersonalizedRequest requestDto,
@ParameterObject ImageResizeRequest resize){

long userId = Long.parseLong(userDetails.getUsername());

List<HomeListResponse> exhibits= homeService.getRandomPersonalized(userId, requestDto);
List<HomeListResponse> exhibits= homeService.getRandomPersonalized(userId, requestDto, resize);

return ResponseEntity.ok(CommonResponse.onSuccess(exhibits));
}
Expand Down Expand Up @@ -82,10 +85,13 @@ public ResponseEntity<CommonResponse<List<HomeListResponse>>> getRandomPersonali
@PostMapping("/schedule")
public ResponseEntity<CommonResponse<List<HomeListResponse>>> getRandomSchedule(
@Valid @RequestBody ScheduleRandomRequest request,
@AuthenticationPrincipal UserDetails userDetails){
@AuthenticationPrincipal UserDetails userDetails,
@ParameterObject ImageResizeRequest resize){


Long userId = Long.parseLong(userDetails.getUsername());
List<HomeListResponse> exhibits= homeService.getRandomSchedule(request, userId);

List<HomeListResponse> exhibits= homeService.getRandomSchedule(request, userId, resize);

return ResponseEntity.ok(CommonResponse.onSuccess(exhibits));
}
Expand Down Expand Up @@ -115,10 +121,13 @@ public ResponseEntity<CommonResponse<List<HomeListResponse>>> getRandomSchedule(
@PostMapping("/genre/random")
public ResponseEntity<CommonResponse<List<HomeListResponse>>> getRandomExhibits(
@Valid @RequestBody GenreRandomRequest request,
@AuthenticationPrincipal UserDetails userDetails){
@AuthenticationPrincipal UserDetails userDetails,
@ParameterObject ImageResizeRequest resize){


Long userId = Long.parseLong(userDetails.getUsername());
List<HomeListResponse> exhibits = homeService.getRandomGenre(request, userId);

List<HomeListResponse> exhibits = homeService.getRandomGenre(request, userId, resize);
return ResponseEntity.ok(CommonResponse.onSuccess(exhibits));
}

Expand All @@ -145,10 +154,12 @@ public ResponseEntity<CommonResponse<List<HomeListResponse>>> getRandomExhibits(
@PostMapping("recommend/today")
public ResponseEntity<CommonResponse<List<HomeListResponse>>> getTodayRecommendations(
@Valid @RequestBody TodayRandomRequest request,
@AuthenticationPrincipal UserDetails userDetails){
@AuthenticationPrincipal UserDetails userDetails,
@ParameterObject ImageResizeRequest resize){

Long userId = Long.parseLong(userDetails.getUsername());
List<HomeListResponse> exhibits = homeService.getRandomToday(request, userId);

List<HomeListResponse> exhibits = homeService.getRandomToday(request, userId, resize);

return ResponseEntity.ok(CommonResponse.onSuccess(exhibits));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
import org.atdev.artrip.domain.review.web.dto.request.ReviewUpdateRequest;
import org.atdev.artrip.global.apipayload.code.status.ReviewError;
import org.atdev.artrip.global.apipayload.exception.GeneralException;
import org.atdev.artrip.global.s3.S3Service;
import org.atdev.artrip.global.s3.service.S3Service;
import org.atdev.artrip.global.s3.web.dto.request.ImageResizeRequest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Slice;
import org.springframework.stereotype.Service;
Expand Down Expand Up @@ -53,7 +54,7 @@ public ReviewResponse createReview(Long exhibitId, ReviewCreateRequest request,

List<String> s3Urls = (images == null || images.isEmpty())
? new ArrayList<>()
: s3Service.upload(images);
: s3Service.uploadReviews(images);

List<ReviewImage> reviewImages = reviewConverter.toReviewImage(review,s3Urls);

Expand Down Expand Up @@ -110,7 +111,7 @@ public ReviewResponse updateReview(Long reviewId, ReviewUpdateRequest request, L

//이미지 추가
if (images != null && !images.isEmpty()) {
List<String> s3Urls = s3Service.upload(images);
List<String> s3Urls = s3Service.uploadPoster(images);
List<ReviewImage> newReviewImages = reviewConverter.toReviewImage(review, s3Urls);
reviewImageRepository.saveAll(newReviewImages);
review.getImages().addAll(newReviewImages);
Expand Down Expand Up @@ -142,7 +143,7 @@ public void deleteReview(Long reviewId,Long userId){
}

@Transactional
public ReviewSliceResponse getAllReview(Long userId, Long cursor, int size){
public ReviewSliceResponse getAllReview(Long userId, Long cursor, int size, ImageResizeRequest resize){

Slice<Review> slice;

Expand All @@ -161,11 +162,15 @@ public ReviewSliceResponse getAllReview(Long userId, Long cursor, int size){
.map(ReviewConverter::toSummary)
.toList();

summaries.forEach(r -> r.setThumbnailUrl(
s3Service.buildResizeUrl(r.getThumbnailUrl(), resize.getW(), resize.getH(), resize.getF())
));

return new ReviewSliceResponse(summaries, nextCursor, slice.hasNext());
}

@Transactional
public ExhibitReviewSliceResponse getExhibitReview(Long exhibitId, Long cursor, int size){
public ExhibitReviewSliceResponse getExhibitReview(Long exhibitId, Long cursor, int size, ImageResizeRequest resize){

long totalCount = reviewRepository.countByExhibit_ExhibitId(exhibitId);

Expand All @@ -186,6 +191,10 @@ public ExhibitReviewSliceResponse getExhibitReview(Long exhibitId, Long cursor,
.map(ReviewConverter::toExhibitReviewSummary)
.toList();

summaries.forEach(r -> r.setThumbnailUrl(
s3Service.buildResizeUrl(r.getThumbnailUrl(), resize.getW(), resize.getH(), resize.getF())
));

return new ExhibitReviewSliceResponse(summaries, nextCursor, slice.hasNext(),totalCount);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
import org.atdev.artrip.global.apipayload.CommonResponse;
import org.atdev.artrip.global.apipayload.code.status.CommonError;
import org.atdev.artrip.global.apipayload.code.status.ReviewError;
import org.atdev.artrip.global.s3.web.dto.request.ImageResizeRequest;
import org.atdev.artrip.global.swagger.ApiErrorResponses;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
Expand Down Expand Up @@ -88,11 +90,12 @@ public ResponseEntity<CommonResponse<String>> DeleteReview(@PathVariable Long re
public ResponseEntity<CommonResponse<ReviewSliceResponse>> getAllReview(
@RequestParam(required = false) Long cursor,
@RequestParam(defaultValue = "10") int size,
@AuthenticationPrincipal UserDetails userDetails) {
@AuthenticationPrincipal UserDetails userDetails,
@ParameterObject ImageResizeRequest resize) {

Long userId = Long.valueOf(userDetails.getUsername());

ReviewSliceResponse response = reviewService.getAllReview(userId, cursor, size);
ReviewSliceResponse response = reviewService.getAllReview(userId, cursor, size, resize);

return ResponseEntity.ok(CommonResponse.onSuccess(response));
}
Expand All @@ -106,9 +109,10 @@ public ResponseEntity<CommonResponse<ReviewSliceResponse>> getAllReview(
public ResponseEntity<CommonResponse<ExhibitReviewSliceResponse>> getExhibitReview(
@RequestParam(required = false) Long cursor,
@RequestParam(defaultValue = "10") int size,
@PathVariable Long exhibitId) {
@PathVariable Long exhibitId,
@ParameterObject ImageResizeRequest resize) {

ExhibitReviewSliceResponse response = reviewService.getExhibitReview(exhibitId, cursor, size);
ExhibitReviewSliceResponse response = reviewService.getExhibitReview(exhibitId, cursor, size, resize);

return ResponseEntity.ok(CommonResponse.onSuccess(response));
}
Expand Down
Loading
Loading