Skip to content

Commit

Permalink
Merge pull request #251 from ShallWeProject/develop
Browse files Browse the repository at this point in the history
hotfix: Reservation 등록 API 오류 수정 (#250)
  • Loading branch information
sejineer authored Feb 11, 2024
2 parents c768393 + 6b5d2be commit 9e3146c
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,85 +22,83 @@
import com.shallwe.domain.user.domain.User;
import com.shallwe.domain.user.domain.repository.UserRepository;
import com.shallwe.global.config.security.token.UserPrincipal;

import java.util.List;
import java.util.stream.Collectors;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class ReservationManipulationServiceImpl implements ReservationManipulationService{

private final ReservationRepository reservationRepository;
private final ExperienceGiftRepository experienceGiftRepository;
private final ShopOwnerRepository shopOwnerRepository;
private final UserRepository userRepository;

@Transactional
public List<ReservationResponse> addOwnerReservation(
OwnerReservationCreate ownerReservationCreate,
UserPrincipal userPrincipal) {
ExperienceGift experienceGift = experienceGiftRepository.findById(
ownerReservationCreate.getExperienceGiftId())
.orElseThrow(ExperienceGiftNotFoundException::new);

ShopOwner owner = shopOwnerRepository.findById(userPrincipal.getShopOwner().getId())
.orElseThrow(InvalidShopOwnerException::new);

List<Reservation> reservations = OwnerReservationCreate.toEntityForOwner(ownerReservationCreate,
experienceGift, owner);
return reservations.stream()
.map(reservationRepository::save)
.map(ReservationResponse::toDtoOwner)
.collect(Collectors.toList());
}

@Transactional
public ReservationResponse addUserReservation(UserReservationCreate reservationRequest,
UserPrincipal userPrincipal) {

User nonPersistentSender = userPrincipal.getUser();
User sender = userRepository.findById(nonPersistentSender.getId()).orElseThrow(
InvalidUserException::new);
User receiver = userRepository.findByPhoneNumber(reservationRequest.getPhoneNumber())
.orElseThrow(
InvalidUserException::new);

Reservation reservation = reservationRepository.findByDateAndTime(
reservationRequest.getDate(), reservationRequest.getTime())
.orElseThrow(InvalidReservationException::new);

if (reservation.getReservationStatus().equals(WAITING)) {
reservation.updateStatus(ReservationStatus.BOOKED);
reservation.updateUserReservationRequest(reservationRequest, sender, receiver);
} else {
throw new InvalidReservationException();
public class ReservationManipulationServiceImpl implements ReservationManipulationService {

private final ReservationRepository reservationRepository;
private final ExperienceGiftRepository experienceGiftRepository;
private final ShopOwnerRepository shopOwnerRepository;
private final UserRepository userRepository;

@Transactional
public List<ReservationResponse> addOwnerReservation(
OwnerReservationCreate ownerReservationCreate,
UserPrincipal userPrincipal) {
ExperienceGift experienceGift = experienceGiftRepository.findById(ownerReservationCreate.getExperienceGiftId())
.orElseThrow(ExperienceGiftNotFoundException::new);

ShopOwner owner = shopOwnerRepository.findById(userPrincipal.getShopOwner().getId())
.orElseThrow(InvalidShopOwnerException::new);

List<Reservation> reservations = OwnerReservationCreate.toEntityForOwner(ownerReservationCreate, experienceGift, owner);
return reservations.stream()
.map(reservationRepository::save)
.map(ReservationResponse::toDtoOwner)
.collect(Collectors.toList());
}
return ReservationResponse.toDtoUser(reservation);
}

@Transactional
public ReservationResponse updateReservation(UpdateReservationReq updateReq,
UserPrincipal userPrincipal) {

Reservation updateReservation = reservationRepository.findById(
updateReq.getReservationId()).map(
reservation -> {
reservation.updateReservation(updateReq);
return reservationRepository.save(reservation);

@Transactional
public ReservationResponse addUserReservation(UserReservationCreate reservationRequest, UserPrincipal userPrincipal) {
User sender = userRepository.findById(userPrincipal.getId())
.orElseThrow(InvalidUserException::new);

User receiver = userRepository.findByPhoneNumber(reservationRequest.getPhoneNumber())
.orElseThrow(InvalidUserException::new);

ExperienceGift experienceGift = experienceGiftRepository.findById(reservationRequest.getExperienceGiftId())
.orElseThrow(ExperienceGiftNotFoundException::new);

Reservation reservation = reservationRepository.findByDateAndTimeAndExperienceGift(
reservationRequest.getDate(), reservationRequest.getTime(), experienceGift)
.orElseThrow(InvalidReservationException::new);

if (reservation.getReservationStatus().equals(WAITING)) {
reservation.updateStatus(ReservationStatus.BOOKED);
reservation.updateUserReservationRequest(reservationRequest, sender, receiver);
} else {
throw new InvalidReservationException();
}
).orElseThrow(InvalidReservationException::new);
return ReservationResponse.toDtoUser(updateReservation);
}

@Transactional
public DeleteReservationRes deleteReservation(Long id) {
Reservation reservation = reservationRepository.findById(id)
.orElseThrow(InvalidReservationException::new);
reservation.updateStatus(Status.DELETE);
return DeleteReservationRes.toDTO();
}
return ReservationResponse.toDtoUser(reservation);
}

@Transactional
public ReservationResponse updateReservation(UpdateReservationReq updateReq, UserPrincipal userPrincipal) {
Reservation updateReservation = reservationRepository.findById(
updateReq.getReservationId()).map(
reservation -> {
reservation.updateReservation(updateReq);
return reservationRepository.save(reservation);
}
).orElseThrow(InvalidReservationException::new);
return ReservationResponse.toDtoUser(updateReservation);
}

@Transactional
public DeleteReservationRes deleteReservation(Long id) {
Reservation reservation = reservationRepository.findById(id)
.orElseThrow(InvalidReservationException::new);
reservation.updateStatus(Status.DELETE);
return DeleteReservationRes.toDTO();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ public interface ReservationRepository extends JpaRepository<Reservation, Long>,

Optional<List<Reservation>> findAllByExperienceGiftAndReservationStatus(ExperienceGift experienceGift, ReservationStatus reservationStatus);

Optional<Reservation> findByDateAndTime(LocalDate date, LocalTime time);
@EntityGraph(attributePaths = "experienceGift")
Optional<Reservation> findByDateAndTimeAndExperienceGift(LocalDate date, LocalTime time, ExperienceGift experienceGift);

Optional<List<Reservation>> findAllByExperienceGiftAndDate(ExperienceGift experienceGift, LocalDate date);

}

0 comments on commit 9e3146c

Please sign in to comment.