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

[feat] 보고싶어요 플레이리스트 도메인 추가, 보고싶어요 플레이리스트 자동 생성 기능 추가, 보고싶어요 변동에 따른 플레이리스트 반영 기능 추가 #20

Merged
merged 3 commits into from
Mar 19, 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
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,13 @@
import com.mookive.mookive_backend.heart.domain.service.HeartDeleteService;
import com.mookive.mookive_backend.heart.domain.service.HeartQueryService;
import com.mookive.mookive_backend.heart.domain.service.HeartSaveService;
import com.mookive.mookive_backend.heartPlaylist.service.HeartPlaylistQueryService;
import com.mookive.mookive_backend.movie.domain.entity.Movie;
import com.mookive.mookive_backend.movie.domain.service.MovieQueryService;
import com.mookive.mookive_backend.movieInPlaylist.domain.entity.MovieInPlaylist;
import com.mookive.mookive_backend.movieInPlaylist.domain.service.MovieInPlaylistDeleteService;
import com.mookive.mookive_backend.movieInPlaylist.domain.service.MovieInPlaylistSaveService;
import com.mookive.mookive_backend.playlist.domain.entity.Playlist;
import com.mookive.mookive_backend.user.domain.entity.User;
import com.mookive.mookive_backend.user.domain.service.UserQueryService;
import jakarta.transaction.Transactional;
Expand All @@ -22,18 +27,30 @@ public class HeartCreateService {
private final HeartDeleteService heartDeleteService;
private final UserQueryService userQueryService;
private final MovieQueryService movieQueryService;
private final HeartPlaylistQueryService heartPlaylistQueryService;
private final MovieInPlaylistSaveService movieInPlaylistSaveService;
private final MovieInPlaylistDeleteService movieInPlaylistDeleteService;

public void createHeart(Long userId, Long movieId) {
User user = userQueryService.findById(userId);
Movie movie = movieQueryService.findById(movieId);
Playlist playlist = heartPlaylistQueryService.findByUserId(userId).getPlaylist();

if (heartQueryService.existsByUserIdAndMovieId(userId, movieId)) {
heartDeleteService.deleteByUserIdAndMovieId(userId, movieId);
movieInPlaylistDeleteService.deleteByPlaylistIdAndMovieId(playlist.getId(), movieId);
} else {
User user = userQueryService.findById(userId);
Movie movie = movieQueryService.findById(movieId);
Heart heart = Heart.builder()
.user(user)
.movie(movie)
.build();
heartSaveService.save(heart);

MovieInPlaylist movieInPlaylist = MovieInPlaylist.builder()
.movie(movie)
.playlist(playlist)
.build();
movieInPlaylistSaveService.save(movieInPlaylist);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.mookive.mookive_backend.heartPlaylist.domain;

import com.mookive.mookive_backend.playlist.domain.entity.Playlist;
import com.mookive.mookive_backend.user.domain.entity.User;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class HeartPlaylist {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToOne
@JoinColumn(name = "user_id")
private User user;

@OneToOne
@JoinColumn(name = "playlist_id")
private Playlist playlist;

@Builder
public HeartPlaylist(User user, Playlist playlist) {
this.user = user;
this.playlist = playlist;
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.mookive.mookive_backend.heartPlaylist.repository;

import com.mookive.mookive_backend.heartPlaylist.domain.HeartPlaylist;
import org.springframework.data.jpa.repository.JpaRepository;

public interface HeartPlaylistRepository extends JpaRepository<HeartPlaylist, Long> {

HeartPlaylist findByUserId(Long userId);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.mookive.mookive_backend.heartPlaylist.service;

import com.mookive.mookive_backend.heartPlaylist.domain.HeartPlaylist;
import com.mookive.mookive_backend.heartPlaylist.repository.HeartPlaylistRepository;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
@Transactional
public class HeartPlaylistQueryService {

private final HeartPlaylistRepository heartPlaylistRepository;

public HeartPlaylist findByUserId(Long userId) {
return heartPlaylistRepository.findByUserId(userId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.mookive.mookive_backend.heartPlaylist.service;

import com.mookive.mookive_backend.heartPlaylist.domain.HeartPlaylist;
import com.mookive.mookive_backend.heartPlaylist.repository.HeartPlaylistRepository;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
@Transactional
public class HeartPlaylistSaveService {

private final HeartPlaylistRepository heartPlaylistRepository;

public void save(HeartPlaylist heartPlaylist) {
heartPlaylistRepository.save(heartPlaylist);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@
public interface MovieInPlaylistRepository extends JpaRepository<MovieInPlaylist, Long> {

List<MovieInPlaylist> findByPlaylistId(Long playlistId);

void deleteByPlaylistIdAndMovieId(Long playlistId, Long movieId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.mookive.mookive_backend.movieInPlaylist.domain.service;

import com.mookive.mookive_backend.movieInPlaylist.domain.respository.MovieInPlaylistRepository;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
@Transactional
public class MovieInPlaylistDeleteService {

private final MovieInPlaylistRepository movieInPlaylistRepository;

public void deleteByPlaylistIdAndMovieId(Long playlistId, Long movieId) {
movieInPlaylistRepository.deleteByPlaylistIdAndMovieId(playlistId, movieId);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.mookive.mookive_backend.user.application.service;

import com.mookive.mookive_backend.heartPlaylist.domain.HeartPlaylist;
import com.mookive.mookive_backend.heartPlaylist.service.HeartPlaylistSaveService;
import com.mookive.mookive_backend.playlist.domain.entity.Playlist;
import com.mookive.mookive_backend.playlist.domain.service.PlaylistSaveService;
import com.mookive.mookive_backend.user.application.dto.request.UserRequest;
import com.mookive.mookive_backend.user.application.mapper.UserMapper;
import com.mookive.mookive_backend.user.domain.entity.User;
Expand All @@ -14,9 +18,22 @@
public class UserCreateService {

private final UserSaveService userSaveService;
private final PlaylistSaveService playlistSaveService;
private final HeartPlaylistSaveService heartPlaylistSaveService;


public void createUser(UserRequest.UserCreateRequest userCreateRequest) {
User user = UserMapper.mapToUser(userCreateRequest);
userSaveService.saveUser(user);
Playlist playlist = Playlist.builder()
.user(user)
.name("나중에 볼 영화")
.build();
playlistSaveService.savePlaylist(playlist);
heartPlaylistSaveService.save(HeartPlaylist.builder()
.user(user)
.playlist(playlist)
.build());

}
}
Loading