https://taesan94.tistory.com/m/268
public class ReservedSeatService {
private final ReservedSeatRepository reservedSeatRepository;
private final SeatConverter seatConverter;
private final SeatService seatService;
private final ScheduleService scheduleService;
public ReservedSeatService(ReservedSeatRepository reservedSeatRepository, SeatConverter seatConverter,
SeatService seatService, ScheduleService scheduleService) {
this.reservedSeatRepository = reservedSeatRepository;
this.seatConverter = seatConverter;
this.seatService = seatService;
this.scheduleService = scheduleService;
}
public List<ResponseFindSeat> findReservePossibleSeats(Long scheduleId) {
Schedule schedule = scheduleService.findById(scheduleId);
List<Long> reservedSeatIdList = reservedSeatRepository.searchByScheduleIdStartsWith(scheduleId).stream()
.map((reservedSeat) -> reservedSeat.getSeat().getId())
.collect(toList());
return seatService.findRemainSeats(schedule.getTheaterRoom().getId(), reservedSeatIdList).stream()
.map(seatConverter::convertFromSeatToResponseFindSeat)
.collect(toList());
}
}
먼저 findReservePossibleSeats함수를 예약 좌석 리스트를 찾는 역할만을 수행하도록 변경했다.
@Service
@Transactional(readOnly = true)
public class ReservedSeatService {
private final ReservedSeatRepository reservedSeatRepository;
private final SeatConverter seatConverter;
public ReservedSeatService(ReservedSeatRepository reservedSeatRepository, SeatConverter seatConverter) {
this.reservedSeatRepository = reservedSeatRepository;
this.seatConverter = seatConverter;
}
public List<Long> findReservedIdListByScheduleId(Long scheduleId) {
return reservedSeatRepository.searchByScheduleIdStartsWith(scheduleId).stream()
.map((reservedSeat) -> reservedSeat.getSeat().getId())
.collect(toList());
}
...
}
그리고 기존 ReservedSeatService에 처리하던 다른 Service 호출을 Controller로 변경했다.
public class ReservedSeatController {
private final ReservedSeatService reservedSeatService;
private final SeatService seatService;
private final ScheduleService scheduleService;
public ReservedSeatController(ReservedSeatService reservedSeatService,
SeatService seatService, ScheduleService scheduleService) {
this.reservedSeatService = reservedSeatService;
this.seatService = seatService;
this.scheduleService = scheduleService;
}
@GetMapping("/{scheduleId}/possible")
public ResponseEntity<List<ResponseFindSeat>> findReservePossibleSeats(@PathVariable Long scheduleId) {
Schedule schedule = scheduleService.findById(scheduleId);
List<Long> reservedSeatIdList = reservedSeatService.findReservedIdListByScheduleId(schedule.getId());
return ResponseEntity.ok(seatService.findRemainSeats(schedule.getTheaterRoom().getId(), reservedSeatIdList));
}
}
...
}
public class SomthingController {
private final ServiceA serviceA;
private final ServiceB serviceB;
private final ServiceC serviceC;
public SomthingController(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC) {
this.serviceA = serviceA;
this.serviceB = serviceB;
this.serviceC = serviceC;
}
@GetMapping("/")
public void something() {
serviceA.save();
serviceB.save();
serviceC.save();
}
}
@Service
@Transactional(readOnly = true)
public class ReservationService {
private final ReservedSeatService reservedSeatService;
private final SeatService seatService;
private final ScheduleService scheduleService;
public ReservationService(ReservedSeatService reservedSeatService,
SeatService seatService, ScheduleService scheduleService) {
this.reservedSeatService = reservedSeatService;
this.seatService = seatService;
this.scheduleService = scheduleService;
}
/**
* 스케줄 별 예약좌석 조회
*
* @param scheduleId 스케줄 id
* @return 예약(되어있는) 좌석의 id 리스트
*/
@Transactional
public List<ResponseFindSeat> findReservePossibleSeatList(Long scheduleId) {
Schedule schedule = scheduleService.findById(scheduleId);
List<Long> reservedSeatIdList = reservedSeatService.findReservedIdListByScheduleId(schedule.getId());
return seatService.findRemainSeats(schedule.getTheaterRoom().getId(), reservedSeatIdList);
}
}