Skip to content

Commit

Permalink
Merge pull request #7 from NOW-SOPT-CDSP-WEB5/feat/6
Browse files Browse the repository at this point in the history
[feat] 영화 좋아요 (클릭했을 때) api 구현
  • Loading branch information
kgy1008 authored May 16, 2024
2 parents de9eda7 + 29eb5e0 commit 3381e4b
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 6 deletions.
17 changes: 13 additions & 4 deletions src/main/java/org/sopt/cgv/controller/MovieController.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,34 @@
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
@RequestMapping("/api/v1")
public class MovieController implements MovieControllerSwagger {

private final MovieService movieService;
private final HeartsService likeService;

@GetMapping("/movies/{movieId}")
public ResponseEntity<MovieDetailRequestDto> getMovieDetail(
@PathVariable Long movieId
) {
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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,13 @@ public interface MovieControllerSwagger {
}
)
ResponseEntity<MovieDetailRequestDto> 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);

}
30 changes: 30 additions & 0 deletions src/main/java/org/sopt/cgv/domain/hearts.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
7 changes: 7 additions & 0 deletions src/main/java/org/sopt/cgv/repository/HeartsRepository.java
Original file line number Diff line number Diff line change
@@ -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<hearts, Long> {
}
27 changes: 27 additions & 0 deletions src/main/java/org/sopt/cgv/service/HeartsService.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
4 changes: 2 additions & 2 deletions src/main/java/org/sopt/cgv/service/MovieService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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("해당 영화를 찾을 수 없습니다.")
);
}

Expand Down

0 comments on commit 3381e4b

Please sign in to comment.