From 8b47815db0df992ae05919c29217b36b3a4cea0b Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Wed, 15 May 2024 21:12:21 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[feat]=20#6=20hearts=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/sopt/cgv/domain/hearts.java | 30 +++++++++++++++++++ .../sopt/cgv/repository/HeartsRepository.java | 7 +++++ 2 files changed, 37 insertions(+) create mode 100644 src/main/java/org/sopt/cgv/domain/hearts.java create mode 100644 src/main/java/org/sopt/cgv/repository/HeartsRepository.java diff --git a/src/main/java/org/sopt/cgv/domain/hearts.java b/src/main/java/org/sopt/cgv/domain/hearts.java new file mode 100644 index 0000000..5f54c00 --- /dev/null +++ b/src/main/java/org/sopt/cgv/domain/hearts.java @@ -0,0 +1,30 @@ +package org.sopt.cgv.domain; + +import jakarta.persistence.*; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor +public class hearts { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @OneToOne + private Movie movie; + + @Builder + private hearts(Movie movie) { + this.movie = movie; + } + + public static hearts create(Movie movie) { + return hearts.builder() + .movie(movie) + .build(); + } +} diff --git a/src/main/java/org/sopt/cgv/repository/HeartsRepository.java b/src/main/java/org/sopt/cgv/repository/HeartsRepository.java new file mode 100644 index 0000000..a69e9f6 --- /dev/null +++ b/src/main/java/org/sopt/cgv/repository/HeartsRepository.java @@ -0,0 +1,7 @@ +package org.sopt.cgv.repository; + +import org.sopt.cgv.domain.hearts; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface HeartsRepository extends JpaRepository { +} From f61a2a7046bc3b0194dd336c5a6811cd346ee2cc Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Wed, 15 May 2024 21:13:36 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[feat]=20#6=20Post=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/cgv/controller/MovieController.java | 17 +++++++++--- .../org/sopt/cgv/service/HeartsService.java | 27 +++++++++++++++++++ .../org/sopt/cgv/service/MovieService.java | 4 +-- 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 src/main/java/org/sopt/cgv/service/HeartsService.java diff --git a/src/main/java/org/sopt/cgv/controller/MovieController.java b/src/main/java/org/sopt/cgv/controller/MovieController.java index 8359d26..e17412c 100644 --- a/src/main/java/org/sopt/cgv/controller/MovieController.java +++ b/src/main/java/org/sopt/cgv/controller/MovieController.java @@ -1,13 +1,12 @@ package org.sopt.cgv.controller; import lombok.RequiredArgsConstructor; +import org.sopt.cgv.service.HeartsService; import org.sopt.cgv.service.MovieService; import org.sopt.cgv.service.dto.MovieDetailRequestDto; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequiredArgsConstructor @@ -15,6 +14,7 @@ public class MovieController implements MovieControllerSwagger { private final MovieService movieService; + private final HeartsService likeService; @GetMapping("/{movieId}/details") public ResponseEntity getMovieDetail( @@ -22,4 +22,13 @@ public ResponseEntity getMovieDetail( ) { return ResponseEntity.ok(movieService.findMovieDetailById(movieId)); } + + @PostMapping("/{movieId}/hearts") + public ResponseEntity likeMovie( + @PathVariable Long movieId + ) { + return ResponseEntity.status(HttpStatus.CREATED) + .header("Location", likeService.addHearts(movieId)) + .build(); + } } diff --git a/src/main/java/org/sopt/cgv/service/HeartsService.java b/src/main/java/org/sopt/cgv/service/HeartsService.java new file mode 100644 index 0000000..66f4e53 --- /dev/null +++ b/src/main/java/org/sopt/cgv/service/HeartsService.java @@ -0,0 +1,27 @@ +package org.sopt.cgv.service; + +import lombok.RequiredArgsConstructor; +import org.sopt.cgv.domain.hearts; +import org.sopt.cgv.domain.Movie; +import org.sopt.cgv.repository.HeartsRepository; +import org.sopt.cgv.repository.MovieRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class HeartsService { + + private final HeartsRepository likeRepository; + private final MovieRepository movieRepository; + + @Transactional + public String addHearts(Long movieId) { + Movie movie = movieRepository.findById(movieId) + .orElseThrow(() -> new IllegalArgumentException("해당 영화를 찾을 수 없습니다.") + ); + hearts like = hearts.create(movie); + likeRepository.save(like); + return like.getId().toString(); + } +} diff --git a/src/main/java/org/sopt/cgv/service/MovieService.java b/src/main/java/org/sopt/cgv/service/MovieService.java index 8771ebc..97ba1e5 100644 --- a/src/main/java/org/sopt/cgv/service/MovieService.java +++ b/src/main/java/org/sopt/cgv/service/MovieService.java @@ -13,8 +13,8 @@ public class MovieService { private final MovieRepository MovieRepository; public Movie findById(Long movieId) { - return MovieRepository.findById(movieId).orElseThrow( - () -> new IllegalArgumentException("해당 영화를 찾을 수 없습니다.") + return MovieRepository.findById(movieId) + .orElseThrow(() -> new IllegalArgumentException("해당 영화를 찾을 수 없습니다.") ); } From 29eb5e01ff68cb1e058709436c1b885fecb7abda Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Wed, 15 May 2024 21:13:49 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[feat]=20#6=20swagger=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/sopt/cgv/controller/MovieControllerSwagger.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/org/sopt/cgv/controller/MovieControllerSwagger.java b/src/main/java/org/sopt/cgv/controller/MovieControllerSwagger.java index ba565a3..64fe206 100644 --- a/src/main/java/org/sopt/cgv/controller/MovieControllerSwagger.java +++ b/src/main/java/org/sopt/cgv/controller/MovieControllerSwagger.java @@ -22,4 +22,13 @@ public interface MovieControllerSwagger { } ) ResponseEntity getMovieDetail(@PathVariable Long movieId); + + @Operation(summary = "영화 좋아요 클릭 API") + @ApiResponses( + value = { + @ApiResponse(responseCode = "201", description = "Like added successfully"), + @ApiResponse(responseCode = "404", description = "Movie not found") + }) + ResponseEntity likeMovie(@PathVariable Long movieId); + }