Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#80] 마이페이지 구현 #86

Merged
merged 7 commits into from
Aug 17, 2024
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
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'

implementation 'javax.annotation:javax.annotation-api:1.3.2'
}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ else if(startDate.isBefore(ChronoLocalDate.from(today)) && !Objects.equals(perfo
jobRepository.save(jobEntity); // 완료
}

@Scheduled(cron = "0 0 13 * * *", zone = "Asia/Seoul") // 오후 1시 테스트
@Scheduled(cron = "0 0 18 * * *", zone = "Asia/Seoul") // 오후 1시 테스트
private void putPerfListEveryDayDev(){
putPerfList();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ public enum SuccessCode implements BaseCode {
REVIEW_LIST_VIEW_SUCCESS(HttpStatus.OK, " REVIEW_2002", "리뷰 리스트 조회가 완료되었습니다."),
REVIEW_LIKE_SUCCESS(HttpStatus.OK, " REVIEW_2003", "리뷰 좋아요 생성이 완료되었습니다."),
REVIEW_UNLIKE_SUCCESS(HttpStatus.OK, " REVIEW_2004", "리뷰 좋아요 삭제가 완료되었습니다."),
REVIEW_MONTH_SUCCESS(HttpStatus.OK, "REVIEW_2005", "회원이 해당 월에 작성한 리뷰 목록 반환이 완료되었습니다."),
REVIEW_MY_SUCCESS(HttpStatus.OK, "REVIEW_2006", "리뷰 조회가 완료되었습니다."),

// Pair
PERFORMANCE_MATCH_PAIRS(HttpStatus.OK, "PAIR_2001", "공연에 맞는 페어들을 반환 완료했습니다."),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package kopis.k_backend.performance.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import kopis.k_backend.performance.service.PerformanceService;
import lombok.RequiredArgsConstructor;
Expand All @@ -13,8 +15,5 @@
@RequiredArgsConstructor
@RequestMapping("/performance")
public class PerformanceController {

private final PerformanceService performanceService;


}
Original file line number Diff line number Diff line change
Expand Up @@ -74,182 +74,4 @@ public void updateTopHashtags() {
}
System.out.println("updatePerfTopHashtags finished");
}


/*@PostConstruct // 실행시킬 때마다 DB에 예시 데이터 들어감. 본격적으로 DB에 데이터 넣기 전까지 사용할 예정.
public void data() {
System.out.println("Starting data initialization");
try {
// hall 객체 생성
Hall hall = Hall.builder()
.sidonm("서울")
.gugunnm("서울")
.streetAddress("서울시 중구 퇴계로 387")
.hallName("충무아트센터 대극장")
.build();
hallRepository.save(hall);

// performance 객체 생성
Performance p1 = Performance.builder()
.title("데스노트")
.performanceType(PerformanceType.PLAY)
.hall(hall)
.startDate("20230731")
.endDate("20230731")
.duration("160")
.lowestPrice("10000")
.highestPrice("150000")
.poster("포스터.img")
.ratingAverage(0.0)
.reviewCount(0L)
.ticketingLink("http://example.com/tickets")
.price("100000")
.build();
performanceRepository.save(p1);

// pair 객체 생성
Pair pair1 = Pair.builder()
.performance(p1)
.actor1Name("이동훈")
.actor2Name("박상신")
.ratingAverage(0.0)
.reviewCount(0L)
.build();
pairRepository.save(pair1);

Pair pair2 = Pair.builder()
.performance(p1)
.actor1Name("이동훈")
.actor2Name("이은석")
.ratingAverage(0.0)
.reviewCount(0L)
.build();
pairRepository.save(pair2);

// actor 객체 생성
Actor a1 = Actor.builder()
.actorName("이동훈")
.actorProfile("이동훈.img")
.build();
actorRepository.save(a1);

Actor a2 = Actor.builder()
.actorName("박상신")
.actorProfile("박상신.img")
.build();
actorRepository.save(a2);

Actor a22 = Actor.builder()
.actorName("이은석")
.actorProfile("이은석.img")
.build();
actorRepository.save(a22);

// perf_actor 객체 생성
PerformanceActor pa1 = PerformanceActor.builder()
.performance(p1)
.actor(a1)
.characterName("엘")
.build();
performanceActorRepository.save(pa1);

PerformanceActor pa2 = PerformanceActor.builder()
.performance(p1)
.actor(a2)
.characterName("라이토")
.build();
performanceActorRepository.save(pa2);

PerformanceActor pa22 = PerformanceActor.builder()
.performance(p1)
.actor(a22)
.characterName("라이토")
.build();
performanceActorRepository.save(pa22);

// ------------------------------------------------------------------
// performance 객체 생성
Performance p2 = Performance.builder()
.title("시카고")
.performanceType(PerformanceType.PLAY)
.hall(hall)
.startDate("20230731")
.endDate("20230731")
.duration("160")
.lowestPrice("100000")
.highestPrice("150000")
.poster("포스터.img")
.ratingAverage(0.0)
.reviewCount(0L)
.ticketingLink("http://example.com/tickets")
.price("100000")
.build();
performanceRepository.save(p2);

// pair 객체 생성
Pair pair13 = Pair.builder()
.performance(p2)
.actor1Name("이동훈1")
.actor2Name("박상신1")
.ratingAverage(0.0)
.reviewCount(0L)
.build();
pairRepository.save(pair13);

Pair pair23 = Pair.builder()
.performance(p2)
.actor1Name("이동훈1")
.actor2Name("이은석1")
.ratingAverage(0.0)
.reviewCount(0L)
.build();
pairRepository.save(pair23);

// actor 객체 생성
Actor a13 = Actor.builder()
.actorName("이동훈1")
.actorProfile("이동훈1.img")
.build();
actorRepository.save(a13);

Actor a23 = Actor.builder()
.actorName("박상신1")
.actorProfile("박상신1.img")
.build();
actorRepository.save(a23);

Actor a223 = Actor.builder()
.actorName("이은석1")
.actorProfile("이은석1.img")
.build();
actorRepository.save(a223);

// perf_actor 객체 생성
PerformanceActor pa13 = PerformanceActor.builder()
.performance(p2)
.actor(a13)
.characterName("배역1")
.build();
performanceActorRepository.save(pa13);

PerformanceActor pa23 = PerformanceActor.builder()
.performance(p2)
.actor(a23)
.characterName("배역2")
.build();
performanceActorRepository.save(pa23);

PerformanceActor pa223 = PerformanceActor.builder()
.performance(p2)
.actor(a223)
.characterName("배역2")
.build();
performanceActorRepository.save(pa223);

} catch (Exception e) {
System.out.println("Error initializing data: " + e.getMessage());
e.printStackTrace();
}
}*/

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,21 @@
import kopis.k_backend.review.domain.Review;
import kopis.k_backend.review.dto.ReviewRequestDto.ReviewReqDto;
import kopis.k_backend.global.api_payload.*;
import kopis.k_backend.review.dto.ReviewResponseDto.MyReviewResDto;
import kopis.k_backend.review.service.ReviewService;
import kopis.k_backend.user.jwt.CustomUserDetails;
import kopis.k_backend.user.service.RankService;
import kopis.k_backend.user.service.UserService;
import kopis.k_backend.pair.Service.PairService;
import kopis.k_backend.review.dto.ReviewResponseDto.ReviewListResDto;
import kopis.k_backend.review.dto.ReviewResponseDto.MonthReviewListResDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import kopis.k_backend.user.domain.User;
import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

Expand All @@ -43,7 +46,7 @@ public class ReviewController {
private final PairService pairService;
private final RankService rankService;

@Operation(summary = "공연에 따른 페어 반환", description = "공연에 따른 페어들을 반환하는 메서드입니다. .")
@Operation(summary = "공연에 따른 페어 반환", description = "공연에 따른 페어들을 반환하는 메서드입니다.")
@ApiResponses(value = {
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "PAIR_2001", description = "공연에 맞는 페어들을 반환 완료했습니다.")
})
Expand Down Expand Up @@ -168,4 +171,64 @@ public ApiResponse<ReviewListResDto> getPairReviews(
return ApiResponse.onSuccess(SuccessCode.REVIEW_LIST_VIEW_SUCCESS, ReviewConverter.reviewListResDto(reviews, reviewCount, rating, ratingType, hashtags, user));
}

}
@Operation(summary = "마이페이지 월 리뷰 목록 조회", description = "사용자가 해당 월에 작성한 리뷰 목록을 반환하는 메서드입니다.")
@ApiResponses(value = {
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REVIEW_2005", description = "월 리뷰 목록 반환이 완료되었습니다.")
})
@Parameters({
@Parameter(name = "month", description = "조회하고 싶은 월의 첫째날 ex) 2024-08-01")
})
@GetMapping(value = "/myPage/reviews")
public ApiResponse<MonthReviewListResDto> getMonthReviews(
@AuthenticationPrincipal CustomUserDetails customUserDetails,
@RequestParam(name = "month") LocalDate month
){
User user = userService.findByUserName(customUserDetails.getUsername());
List<Review> monthReviewList = reviewService.getMonthReviewList(user, month);
Long reviewCount = (long) monthReviewList.size();
return ApiResponse.onSuccess(SuccessCode.REVIEW_MONTH_SUCCESS, ReviewConverter.monthReviewListResDto(monthReviewList, reviewCount));
}

@Operation(summary = "마이페이지 리뷰 조회", description = "리뷰 id에 따른 리뷰 정보를 반환하는 메서드입니다.")
@ApiResponses(value = {
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REVIEW_2006", description = "리뷰 반환이 완료되었습니다.")
})
@GetMapping(value = "/myPage/review/{review-id}")
public ApiResponse<MyReviewResDto> getMyReview(
@PathVariable(name = "review-id") Long reviewId
){
Review review = reviewService.findById(reviewId);

return ApiResponse.onSuccess(SuccessCode.REVIEW_MY_SUCCESS, ReviewConverter.myReviewResDto(review));

}

@Operation(summary = "함께 본 사람 수정", description = "리뷰에 함께 본 사람을 적는 메서드입니다.")
@ApiResponses(value = {
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REVIEW_2007", description = "함꼐 본 사람 수정이 완료되었습니다.")
})
@PatchMapping(value = "/myPage/viewingPartner/update/{review-id}")
@Parameters({
@Parameter(name = "partnerNumber", description = "0: 미입력, 1: 가족, 2: 친구, 3: 연인, 4: 혼자")
})
public void updateViewingPartner(
@PathVariable(name = "review-id") Long reviewId,
@RequestParam(name = "partnerNumber") Integer partnerNumber
){
Review review = reviewService.findById(reviewId);
reviewService.updateViewingPartner(review, partnerNumber);
}

@Operation(summary = "리뷰 메모 추가", description = "리뷰에 메모를 적는 메서드입니다.")
@ApiResponses(value = {
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REVIEW_2008", description = "메모 추가가 완료되었습니다.")
})
@PatchMapping(value = "/myPage/memo/update/{review-id}")
public void updateMemo(
@PathVariable(name = "review-id") Long reviewId,
@RequestBody String memo
){
Review review = reviewService.findById(reviewId);
reviewService.updateMemo(review, memo);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
import kopis.k_backend.pair.domain.Pair;
import kopis.k_backend.performance.domain.Performance;
import kopis.k_backend.review.domain.Review;
import kopis.k_backend.review.domain.ViewingPartner;
import kopis.k_backend.review.dto.ReviewRequestDto.ReviewReqDto;
import kopis.k_backend.review.dto.ReviewResponseDto.MyReviewResDto;
import kopis.k_backend.review.dto.ReviewResponseDto.MonthReviewResDto;
import kopis.k_backend.review.dto.ReviewResponseDto.MonthReviewListResDto;
import kopis.k_backend.review.dto.ReviewResponseDto.ReviewResDto;
import kopis.k_backend.review.dto.ReviewResponseDto.ReviewListResDto;
import kopis.k_backend.user.domain.User;
Expand All @@ -27,6 +31,8 @@ public static Review saveReview(ReviewReqDto review, User user, Performance perf
.performanceRatings(review.getPerformanceRating())
.hashtag(review.getHashTag())
.performanceDate(review.getPerformanceDate())
.viewingPartner(ViewingPartner.NULL)
.memo("아직 작성된 메모가 없습니다.")
.build();
}

Expand Down Expand Up @@ -66,4 +72,39 @@ public static ReviewListResDto reviewListResDto(List<Review> reviews, Long revie
.reviewList(reviewResDtos)
.build();
}

public static MonthReviewResDto monthReviewResDto(Review review) {

return MonthReviewResDto.builder()
.id(review.getId())
.poster(review.getPerformance().getPoster())
.performanceDate(review.getPerformanceDate())
.build();
}

public static MonthReviewListResDto monthReviewListResDto(List<Review> reviews, Long reviewCount) {
List<MonthReviewResDto> monthReviewResDtoList = reviews.stream()
.map(ReviewConverter::monthReviewResDto)
.toList();

return MonthReviewListResDto.builder()
.reviewCount(reviewCount)
.reviewList(monthReviewResDtoList)
.build();
}

public static MyReviewResDto myReviewResDto(Review review) {
return MyReviewResDto.builder()
.id(review.getId())
.performanceName(review.getPerformance().getTitle())
.poster(review.getPerformance().getPoster())
.performanceType(review.getPerformance().getPerformanceType())
.performanceDate(review.getPerformanceDate())
.performanceRatings(review.getPerformanceRatings())
.pairRatings(review.getPairRatings())
.hashtag(review.getHashtag())
.viewingPartner(review.getViewingPartner())
.memo(review.getMemo())
.build();
}
}
Loading
Loading