Każdy seans ma przypisaną salę a sala miejsca. Potrzebuje wyświetlić miejsca na danych seans z informacją czy jest wolne. Teraz robię to tak, że dostaje id seansu, pobieram seans, biorę z niego id sali, potem wszystkie id miejsc biletów na ten seans i wszystkie miejsca z tej sali i jeśli lista id miejsc biletów zawiera id danego miejsca, to znaczy, że miejsce jest zajęte. W kodzie wygląda, to tak:
public List<SeatWithStatusDto> handle(GetSeatsByScreeningId query) {
log.info("Query:{}", query);
var hallId = jdbcTemplate.queryForObject(
"select s.hall_id from screenings s where s.id = ?",
Long.class,
query.screeningId()
);
var ticketsSeatsId = getTicketsSeatIdsByScreeningHandler.handle(
new GetTicketsSeatIdsByScreeningId(query.screeningId())
);
return getSeatsByHallIdHandler
.handle(new GetSeatsByHallId(hallId))
.stream()
.map(seatDto -> new SeatWithStatusDto(
seatDto.rowNumber(),
seatDto.number(),
!ticketsSeatsId.contains(seatDto.seatId())
)
).toList();
}
Jak zrobić to lepiej? Może wprowadzić 2 różne modele dla miejsc - HallSeat (przechowywanie informacji jakie w ogóle mamy miejsca w danej sali) i ScreeningSeat (z informacją czy miejsce jest wolne czy nie)