Wpis z mikrobloga

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)
#programowanie #naukaprogramowania #programista15k #java
  • 5
  • Odpowiedz
@Nofenak: W db warto utworzyć użytkownika z prawem do wywoływania SP, bez kwerend, i w kodzie wywoływać tylko te procedury. Bezpieczeństwo.
Wyciąganie danych, które potrzebujesz powinna realizować ta procedura. Spróbowałbył zrobić zbiór numerów miejsc zajętych i zrobić except ze zbiorem range(1..[liczba miejsc])
  • Odpowiedz
@WyjmijKija: Aa do tego pijesz. Popracuj nad komunikatywnością. Kolega wyciąga dane za pomocą kwerendy SQL, więc pociągnąłem temat. Zamiast dopiedalać się do mnie zrób mu wykład dlaczego nie powinien tak robić.
  • Odpowiedz