refactor: Ticket removed ListDTO

This commit is contained in:
dongHyo
2022-07-18 17:56:53 +09:00
parent a2cfd7ab15
commit 656e5e25e8
9 changed files with 44 additions and 99 deletions

View File

@@ -4,10 +4,11 @@ import static com.ticketing.server.user.domain.UserGrade.ROLES.USER;
import com.ticketing.server.movie.application.response.TicketDetailsResponse; import com.ticketing.server.movie.application.response.TicketDetailsResponse;
import com.ticketing.server.movie.application.response.TicketListResponse; import com.ticketing.server.movie.application.response.TicketListResponse;
import com.ticketing.server.movie.service.dto.TicketDetailsDTO; import com.ticketing.server.movie.service.dto.TicketDTO;
import com.ticketing.server.movie.service.dto.TicketListDTO;
import com.ticketing.server.movie.service.interfaces.TicketService; import com.ticketing.server.movie.service.interfaces.TicketService;
import com.ticketing.server.payment.service.dto.TicketDetailDTO;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import java.util.List;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
@@ -32,11 +33,11 @@ public class TicketController {
@Secured(USER) @Secured(USER)
public ResponseEntity<TicketListResponse> getTickets( public ResponseEntity<TicketListResponse> getTickets(
@ApiParam(value = "영화 시간표 ID", required = true) @RequestParam @NotNull Long movieTimeId) { @ApiParam(value = "영화 시간표 ID", required = true) @RequestParam @NotNull Long movieTimeId) {
TicketListDTO ticketListDto = ticketService.getTickets(movieTimeId); List<TicketDTO> tickets = ticketService.getTickets(movieTimeId);
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
.body( .body(
ticketListDto.toResponse() new TicketListResponse(tickets)
); );
} }
@@ -44,11 +45,11 @@ public class TicketController {
@Secured(USER) @Secured(USER)
public ResponseEntity<TicketDetailsResponse> findTicketsByPaymentId( public ResponseEntity<TicketDetailsResponse> findTicketsByPaymentId(
@PathVariable("paymentId") @NotNull Long paymentId) { @PathVariable("paymentId") @NotNull Long paymentId) {
TicketDetailsDTO tickets = ticketService.findTicketsByPaymentId(paymentId); List<TicketDetailDTO> tickets = ticketService.findTicketsByPaymentId(paymentId);
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
.body( .body(
tickets.toResponse() new TicketDetailsResponse(tickets)
); );
} }

View File

@@ -1,26 +1,21 @@
package com.ticketing.server.movie.service; package com.ticketing.server.movie.service;
import com.ticketing.server.global.exception.ErrorCode; import com.ticketing.server.global.exception.ErrorCode;
import com.ticketing.server.movie.domain.MovieTime;
import com.ticketing.server.movie.domain.repository.MovieTimeRepository;
import com.ticketing.server.global.validator.constraints.NotEmptyCollection; import com.ticketing.server.global.validator.constraints.NotEmptyCollection;
import com.ticketing.server.movie.domain.MovieTime;
import com.ticketing.server.movie.domain.Ticket; import com.ticketing.server.movie.domain.Ticket;
import com.ticketing.server.movie.domain.repository.MovieTimeRepository;
import com.ticketing.server.movie.domain.repository.TicketRepository; import com.ticketing.server.movie.domain.repository.TicketRepository;
import com.ticketing.server.movie.service.dto.TicketDTO; import com.ticketing.server.movie.service.dto.TicketDTO;
import com.ticketing.server.movie.service.dto.TicketDetailsDTO;
import com.ticketing.server.movie.service.dto.TicketListDTO;
import com.ticketing.server.movie.service.dto.TicketRefundDTO; import com.ticketing.server.movie.service.dto.TicketRefundDTO;
import com.ticketing.server.movie.service.dto.TicketReservationDTO; import com.ticketing.server.movie.service.dto.TicketReservationDTO;
import com.ticketing.server.movie.service.dto.TicketSoldDTO; import com.ticketing.server.movie.service.dto.TicketSoldDTO;
import com.ticketing.server.movie.service.dto.TicketsCancelDTO; import com.ticketing.server.movie.service.dto.TicketsCancelDTO;
import com.ticketing.server.movie.service.dto.TicketsRefundDTO;
import com.ticketing.server.movie.service.dto.TicketsReservationDTO; import com.ticketing.server.movie.service.dto.TicketsReservationDTO;
import com.ticketing.server.movie.service.dto.TicketsSoldDTO; import com.ticketing.server.movie.service.dto.TicketsSoldDTO;
import com.ticketing.server.movie.service.interfaces.TicketService; import com.ticketing.server.movie.service.interfaces.TicketService;
import com.ticketing.server.payment.service.dto.TicketDetailDTO; import com.ticketing.server.payment.service.dto.TicketDetailDTO;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.function.Function;
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
@@ -42,20 +37,18 @@ public class TicketServiceImpl implements TicketService {
private final MovieTimeRepository movieTimeRepository; private final MovieTimeRepository movieTimeRepository;
@Override @Override
public TicketListDTO getTickets(@NotNull Long movieTimeId) { public List<TicketDTO> getTickets(@NotNull Long movieTimeId) {
MovieTime movieTime = movieTimeRepository.findById(movieTimeId) MovieTime movieTime = movieTimeRepository.findById(movieTimeId)
.orElseThrow(ErrorCode::throwMovieTimeNotFound); .orElseThrow(ErrorCode::throwMovieTimeNotFound);
List<TicketDTO> tickets = ticketRepository.findValidTickets(movieTime) return ticketRepository.findValidTickets(movieTime)
.stream() .stream()
.map(TicketDTO::new) .map(TicketDTO::new)
.collect(Collectors.toList()); .collect(Collectors.toList());
return new TicketListDTO(tickets);
} }
@Override @Override
public TicketDetailsDTO findTicketsByPaymentId(@NotNull Long paymentId) { public List<TicketDetailDTO> findTicketsByPaymentId(@NotNull Long paymentId) {
List<TicketDetailDTO> ticketDetails = ticketRepository.findTicketFetchJoinByPaymentId(paymentId) List<TicketDetailDTO> ticketDetails = ticketRepository.findTicketFetchJoinByPaymentId(paymentId)
.stream() .stream()
.map(TicketDetailDTO::new) .map(TicketDetailDTO::new)
@@ -65,7 +58,7 @@ public class TicketServiceImpl implements TicketService {
throw ErrorCode.throwPaymentIdNotFound(); throw ErrorCode.throwPaymentIdNotFound();
} }
return new TicketDetailsDTO(ticketDetails); return ticketDetails;
} }
@Override @Override
@@ -106,20 +99,18 @@ public class TicketServiceImpl implements TicketService {
List<Ticket> tickets = getTicketsByInTicketIds(ticketIds); List<Ticket> tickets = getTicketsByInTicketIds(ticketIds);
tickets.forEach(Ticket::cancel); tickets.forEach(Ticket::cancel);
return new TicketsCancelDTO(ticketIds); return new TicketsCancelDTO(tickets);
} }
@Override @Override
@Transactional @Transactional
public TicketsRefundDTO ticketsRefund(@NotNull Long paymentId, UnaryOperator<Ticket> refund) { public List<TicketRefundDTO> ticketsRefund(@NotNull Long paymentId, UnaryOperator<Ticket> refund) {
List<Ticket> tickets = ticketRepository.findTicketFetchJoinByPaymentId(paymentId); List<Ticket> tickets = ticketRepository.findTicketFetchJoinByPaymentId(paymentId);
List<TicketRefundDTO> refundDtoList = tickets.stream() return tickets.stream()
.map(refund) .map(refund)
.map(TicketRefundDTO::new) .map(TicketRefundDTO::new)
.collect(Collectors.toList()); .collect(Collectors.toList());
return new TicketsRefundDTO(refundDtoList);
} }
private List<Ticket> getTicketsByInTicketIds(List<Long> ticketIds) { private List<Ticket> getTicketsByInTicketIds(List<Long> ticketIds) {

View File

@@ -1,18 +0,0 @@
package com.ticketing.server.movie.service.dto;
import com.ticketing.server.movie.application.response.TicketDetailsResponse;
import com.ticketing.server.payment.service.dto.TicketDetailDTO;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public class TicketDetailsDTO {
private final List<TicketDetailDTO> ticketDetails;
public TicketDetailsResponse toResponse() {
return new TicketDetailsResponse(ticketDetails);
}
}

View File

@@ -1,18 +0,0 @@
package com.ticketing.server.movie.service.dto;
import com.ticketing.server.movie.application.response.TicketListResponse;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public class TicketListDTO {
private final List<TicketDTO> ticketDtos;
public TicketListResponse toResponse() {
return new TicketListResponse(ticketDtos);
}
}

View File

@@ -1,16 +1,22 @@
package com.ticketing.server.movie.service.dto; package com.ticketing.server.movie.service.dto;
import com.ticketing.server.movie.application.response.TicketCancelResponse; import com.ticketing.server.movie.application.response.TicketCancelResponse;
import com.ticketing.server.movie.domain.Ticket;
import java.util.List; import java.util.List;
import lombok.AllArgsConstructor; import java.util.stream.Collectors;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@AllArgsConstructor
public class TicketsCancelDTO { public class TicketsCancelDTO {
private final List<Long> ticketIds; private final List<Long> ticketIds;
public TicketsCancelDTO(List<Ticket> tickets) {
ticketIds = tickets.stream()
.map(Ticket::getId)
.collect(Collectors.toList());
}
public TicketCancelResponse toResponse() { public TicketCancelResponse toResponse() {
return new TicketCancelResponse(ticketIds); return new TicketCancelResponse(ticketIds);
} }

View File

@@ -1,16 +0,0 @@
package com.ticketing.server.movie.service.dto;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public class TicketsRefundDTO {
private List<TicketRefundDTO> tickets;
public TicketsRefundResponse toResponse() {
return new TicketsRefundResponse(tickets);
}
}

View File

@@ -2,21 +2,21 @@ package com.ticketing.server.movie.service.interfaces;
import com.ticketing.server.global.validator.constraints.NotEmptyCollection; import com.ticketing.server.global.validator.constraints.NotEmptyCollection;
import com.ticketing.server.movie.domain.Ticket; import com.ticketing.server.movie.domain.Ticket;
import com.ticketing.server.movie.service.dto.TicketDetailsDTO; import com.ticketing.server.movie.service.dto.TicketDTO;
import com.ticketing.server.movie.service.dto.TicketListDTO; import com.ticketing.server.movie.service.dto.TicketRefundDTO;
import com.ticketing.server.movie.service.dto.TicketsCancelDTO; import com.ticketing.server.movie.service.dto.TicketsCancelDTO;
import com.ticketing.server.movie.service.dto.TicketsRefundDTO;
import com.ticketing.server.movie.service.dto.TicketsReservationDTO; import com.ticketing.server.movie.service.dto.TicketsReservationDTO;
import com.ticketing.server.movie.service.dto.TicketsSoldDTO; import com.ticketing.server.movie.service.dto.TicketsSoldDTO;
import com.ticketing.server.payment.service.dto.TicketDetailDTO;
import java.util.List; import java.util.List;
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
public interface TicketService { public interface TicketService {
TicketListDTO getTickets(@NotNull Long movieTimeId); List<TicketDTO> getTickets(@NotNull Long movieTimeId);
TicketDetailsDTO findTicketsByPaymentId(@NotNull Long paymentId); List<TicketDetailDTO> findTicketsByPaymentId(@NotNull Long paymentId);
TicketsReservationDTO ticketReservation(@NotEmptyCollection List<Long> ticketIds); TicketsReservationDTO ticketReservation(@NotEmptyCollection List<Long> ticketIds);
@@ -24,6 +24,6 @@ public interface TicketService {
TicketsCancelDTO ticketCancel(@NotEmptyCollection List<Long> ticketIds); TicketsCancelDTO ticketCancel(@NotEmptyCollection List<Long> ticketIds);
TicketsRefundDTO ticketsRefund(@NotNull Long paymentId, UnaryOperator<Ticket> refund); List<TicketRefundDTO> ticketsRefund(@NotNull Long paymentId, UnaryOperator<Ticket> refund);
} }

View File

@@ -8,15 +8,16 @@ import com.ticketing.server.movie.application.response.TicketDetailsResponse;
import com.ticketing.server.movie.application.response.TicketReservationResponse; import com.ticketing.server.movie.application.response.TicketReservationResponse;
import com.ticketing.server.movie.application.response.TicketSoldResponse; import com.ticketing.server.movie.application.response.TicketSoldResponse;
import com.ticketing.server.movie.domain.Ticket; import com.ticketing.server.movie.domain.Ticket;
import com.ticketing.server.movie.service.dto.TicketDetailsDTO; import com.ticketing.server.movie.service.dto.TicketRefundDTO;
import com.ticketing.server.movie.service.dto.TicketsCancelDTO; import com.ticketing.server.movie.service.dto.TicketsCancelDTO;
import com.ticketing.server.movie.service.dto.TicketsRefundDTO;
import com.ticketing.server.movie.service.dto.TicketsRefundResponse; import com.ticketing.server.movie.service.dto.TicketsRefundResponse;
import com.ticketing.server.movie.service.dto.TicketsReservationDTO; import com.ticketing.server.movie.service.dto.TicketsReservationDTO;
import com.ticketing.server.movie.service.dto.TicketsSoldDTO; import com.ticketing.server.movie.service.dto.TicketsSoldDTO;
import com.ticketing.server.movie.service.interfaces.TicketService; import com.ticketing.server.movie.service.interfaces.TicketService;
import com.ticketing.server.payment.api.MovieClient; import com.ticketing.server.payment.api.MovieClient;
import com.ticketing.server.payment.service.dto.TicketDetailDTO;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -31,8 +32,8 @@ public class MovieClientImpl implements MovieClient {
@Override @Override
public TicketDetailsResponse getTicketsByPaymentId(@NotNull Long paymentId) { public TicketDetailsResponse getTicketsByPaymentId(@NotNull Long paymentId) {
TicketDetailsDTO ticketDetails = ticketService.findTicketsByPaymentId(paymentId); List<TicketDetailDTO> ticketDetails = ticketService.findTicketsByPaymentId(paymentId);
return ticketDetails.toResponse(); return new TicketDetailsResponse(ticketDetails);
} }
@Override @Override
@@ -55,14 +56,14 @@ public class MovieClientImpl implements MovieClient {
@Override @Override
public TicketsRefundResponse ticketRefundByDateTime(TicketsRefundRequest request, LocalDateTime dateTime) { public TicketsRefundResponse ticketRefundByDateTime(TicketsRefundRequest request, LocalDateTime dateTime) {
TicketsRefundDTO ticketsRefundDto = ticketService.ticketsRefund(request.getPaymentId(), ticket -> ticket.refund(dateTime)); List<TicketRefundDTO> ticketRefundDTOS = ticketService.ticketsRefund(request.getPaymentId(), ticket -> ticket.refund(dateTime));
return ticketsRefundDto.toResponse(); return new TicketsRefundResponse(ticketRefundDTOS);
} }
@Override @Override
public TicketsRefundResponse ticketRefund(TicketsRefundRequest request) { public TicketsRefundResponse ticketRefund(TicketsRefundRequest request) {
TicketsRefundDTO ticketsRefundDto = ticketService.ticketsRefund(request.getPaymentId(), Ticket::refund); List<TicketRefundDTO> ticketRefundDtos = ticketService.ticketsRefund(request.getPaymentId(), Ticket::refund);
return ticketsRefundDto.toResponse(); return new TicketsRefundResponse(ticketRefundDtos);
} }
} }

View File

@@ -10,7 +10,6 @@ import com.ticketing.server.global.exception.ErrorCode;
import com.ticketing.server.global.exception.TicketingException; import com.ticketing.server.global.exception.TicketingException;
import com.ticketing.server.movie.domain.Ticket; import com.ticketing.server.movie.domain.Ticket;
import com.ticketing.server.movie.domain.repository.TicketRepository; import com.ticketing.server.movie.domain.repository.TicketRepository;
import com.ticketing.server.movie.service.dto.TicketDetailsDTO;
import com.ticketing.server.movie.service.dto.TicketsReservationDTO; import com.ticketing.server.movie.service.dto.TicketsReservationDTO;
import com.ticketing.server.payment.service.dto.TicketDetailDTO; import com.ticketing.server.payment.service.dto.TicketDetailDTO;
import java.util.Collections; import java.util.Collections;
@@ -53,8 +52,7 @@ class TicketServiceImplTest {
when(ticketRepository.findTicketFetchJoinByPaymentId(1L)).thenReturn(List.of(tickets.get(0))); when(ticketRepository.findTicketFetchJoinByPaymentId(1L)).thenReturn(List.of(tickets.get(0)));
// when // when
TicketDetailsDTO ticketDetailDto = ticketService.findTicketsByPaymentId(1L); List<TicketDetailDTO> ticketDetails = ticketService.findTicketsByPaymentId(1L);
List<TicketDetailDTO> ticketDetails = ticketDetailDto.getTicketDetails();
// then // then
assertAll( assertAll(
@@ -66,14 +64,14 @@ class TicketServiceImplTest {
@Test @Test
@DisplayName("티켓목록 예약으로 변경 시 조회된 갯수랑 다른 경우") @DisplayName("티켓목록 예약으로 변경 시 조회된 갯수랑 다른 경우")
void ticketReservationFail() { void ticketReservationFail() {
// given // given
List<Ticket> tickets = setupTickets(); List<Ticket> tickets = setupTickets();
List<Ticket> list = List.of(tickets.get(0), tickets.get(1), tickets.get(2)); List<Ticket> list = List.of(tickets.get(0), tickets.get(1), tickets.get(2));
List<Long> ids = List.of(0L, 1L, 2L, 10000L); List<Long> ids = List.of(0L, 1L, 2L, 10000L);
when(ticketRepository.findTicketFetchJoinByTicketIds(ids)).thenReturn(list); when(ticketRepository.findTicketFetchJoinByTicketIds(ids)).thenReturn(list);
// when // when
// then // then
assertThatThrownBy(() -> ticketService.ticketReservation(ids)) assertThatThrownBy(() -> ticketService.ticketReservation(ids))
.isInstanceOf(TicketingException.class) .isInstanceOf(TicketingException.class)
@@ -84,14 +82,14 @@ class TicketServiceImplTest {
@Test @Test
@DisplayName("티켓목록 예약으로 변경 완료") @DisplayName("티켓목록 예약으로 변경 완료")
void ticketReservationSuccess() { void ticketReservationSuccess() {
// given // given
List<Ticket> tickets = setupTickets(); List<Ticket> tickets = setupTickets();
List<Ticket> list = List.of(tickets.get(0), tickets.get(1), tickets.get(2)); List<Ticket> list = List.of(tickets.get(0), tickets.get(1), tickets.get(2));
List<Long> ids = List.of(0L, 1L, 2L); List<Long> ids = List.of(0L, 1L, 2L);
when(ticketRepository.findTicketFetchJoinByTicketIds(ids)).thenReturn(list); when(ticketRepository.findTicketFetchJoinByTicketIds(ids)).thenReturn(list);
// when // when
TicketsReservationDTO ticketReservationsDto = ticketService.ticketReservation(ids); TicketsReservationDTO ticketReservationsDto = ticketService.ticketReservation(ids);
// then // then