Skip to content

Commit

Permalink
Merge pull request #68 from nathan29849/be/feature/#46-user_remove_fa…
Browse files Browse the repository at this point in the history
…vorite

feat: [46] 유저 위시리스트 취소 기능 구현
  • Loading branch information
nathan29849 committed Jun 6, 2022
2 parents a8f21c1 + beca86a commit 740322e
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import team15.airbnb.accommodation.infrastructure.AccommodationRepository;
import team15.airbnb.user.domain.Favorite;
import team15.airbnb.user.domain.User;
import team15.airbnb.user.infrastructure.UserRepository;
import team15.airbnb.user.presentation.dto.FavoriteDto;
import team15.airbnb.user.presentation.dto.FavoritesResponse;
Expand All @@ -11,14 +14,23 @@
public class UserService {

private final UserRepository userRepository;
private final AccommodationRepository accommodationRepository;

public UserService(UserRepository userRepository) {
public UserService(UserRepository userRepository, AccommodationRepository accommodationRepository) {
this.userRepository = userRepository;
this.accommodationRepository = accommodationRepository;
}

@Transactional(readOnly = true)
public FavoritesResponse searchFavorites(Long userId) {
List<FavoriteDto> accommodations = userRepository.findFavorites(userId);
return FavoritesResponse.convertFrom(accommodations);
}

@Transactional
public void deleteFavorite(Long userId, Long accommodationId) {
User savedUser = userRepository.findById(userId);
Favorite favorite = savedUser.cancelFavorite(accommodationId);
userRepository.delete(favorite);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import lombok.Getter;
import team15.airbnb.accommodation.domain.Accommodation;
import team15.airbnb.user.domain.User;

@Getter
@Entity
public class Favorite {

Expand Down
10 changes: 9 additions & 1 deletion backend/src/main/java/team15/airbnb/user/domain/User.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package team15.airbnb.user.domain;

import java.util.Objects;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import team15.airbnb.common.domain.BaseEntity;
import team15.airbnb.accommodation.domain.Review;
import team15.airbnb.reservation.domain.Reservation;
Expand Down Expand Up @@ -48,4 +48,12 @@ public User(String name, UserType type, String profileImage) {

@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private List<Reservation> reservations = new ArrayList<>();

public Favorite cancelFavorite(Long accommodationId) {
Favorite favorite = favorites.stream()
.filter(s -> Objects.equals(s.getAccommodation().getId(), accommodationId))
.findAny().orElseThrow(() -> new IllegalStateException("삭제하려는 숙소가 존재하지 않습니다."));
favorites.remove(favorite);
return favorite;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.springframework.stereotype.Repository;
import team15.airbnb.accommodation.presentation.dto.AccommodationFeeDto;
import team15.airbnb.user.domain.Favorite;
import team15.airbnb.user.domain.User;

import javax.persistence.EntityManager;
Expand Down Expand Up @@ -41,4 +42,7 @@ public List<FavoriteDto> findFavorites(Long userId) {
.getResultList();
}

public void delete(Favorite favorite) {
em.remove(favorite);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package team15.airbnb.user.presentation.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import team15.airbnb.user.application.UserService;
import team15.airbnb.user.presentation.dto.DeleteFavoriteDto;
import team15.airbnb.user.presentation.dto.FavoritesResponse;

@RestController
Expand All @@ -22,4 +27,14 @@ public ResponseEntity<FavoritesResponse> searchFavorites() {
*/
return ResponseEntity.ok().body(userService.searchFavorites(2L));
}

@PostMapping("/favorites/remove")
public ResponseEntity<Void> deleteFavorite(@RequestBody DeleteFavoriteDto deleteFavoriteDto)
throws JsonProcessingException {
/*
* TODO: JWT를 통해 User id를 조회(우선 default는 user_id=2)
*/
userService.deleteFavorite(2L, deleteFavoriteDto.getAccommodationId());
return ResponseEntity.ok().build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package team15.airbnb.user.presentation.dto;

import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public class DeleteFavoriteDto {

private Long accommodationId;

public DeleteFavoriteDto(Long accommodationId) {
this.accommodationId = accommodationId;
}
}

0 comments on commit 740322e

Please sign in to comment.