From f5dcdf12aba0916a1ef827d334fdcf91d0715868 Mon Sep 17 00:00:00 2001 From: sshkurov Date: Mon, 31 Jan 2022 21:52:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BE=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B0=D0=BA=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packmate/controller/PacketController.java | 16 +++++----------- .../ru/serega6531/packmate/model/Packet.java | 2 +- .../packmate/repository/StreamRepository.java | 9 +++++++++ .../packmate/service/StreamService.java | 8 ++++++-- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/java/ru/serega6531/packmate/controller/PacketController.java b/src/main/java/ru/serega6531/packmate/controller/PacketController.java index 4d9db1b..0192996 100644 --- a/src/main/java/ru/serega6531/packmate/controller/PacketController.java +++ b/src/main/java/ru/serega6531/packmate/controller/PacketController.java @@ -5,13 +5,11 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import ru.serega6531.packmate.model.Stream; +import ru.serega6531.packmate.model.Packet; import ru.serega6531.packmate.model.pojo.PacketDto; import ru.serega6531.packmate.service.StreamService; -import java.util.Collections; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; @RestController @@ -27,14 +25,10 @@ public class PacketController { @PostMapping("/{streamId}") public List getPacketsForStream(@PathVariable long streamId) { - final Optional stream = streamService.find(streamId); - if (stream.isPresent()) { - return stream.get().getPackets().stream() - .map(streamService::packetToDto) - .collect(Collectors.toList()); - } else { - return Collections.emptyList(); - } + List packets = streamService.getPackets(streamId); + return packets.stream() + .map(streamService::packetToDto) + .collect(Collectors.toList()); } } diff --git a/src/main/java/ru/serega6531/packmate/model/Packet.java b/src/main/java/ru/serega6531/packmate/model/Packet.java index 6ed12be..2f168b6 100644 --- a/src/main/java/ru/serega6531/packmate/model/Packet.java +++ b/src/main/java/ru/serega6531/packmate/model/Packet.java @@ -36,7 +36,7 @@ public class Packet { @Transient private int ttl; - @ManyToOne(optional = false) + @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "stream_id", nullable = false) private Stream stream; diff --git a/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java b/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java index 240ea60..4c7ff2a 100644 --- a/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java +++ b/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java @@ -6,6 +6,8 @@ import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import ru.serega6531.packmate.model.Stream; +import java.util.Optional; + public interface StreamRepository extends JpaRepository, JpaSpecificationExecutor { @Query("UPDATE Stream SET favorite = :favorite WHERE id = :id") @@ -14,4 +16,11 @@ public interface StreamRepository extends JpaRepository, JpaSpecif long deleteByEndTimestampBeforeAndFavoriteIsFalse(long threshold); + @Query("SELECT s FROM Stream s " + + "LEFT JOIN FETCH s.packets AS packets " + + "LEFT JOIN FETCH packets.matches " + + "WHERE s.id = :id" + ) + Optional getStreamWithPackets(long id); + } diff --git a/src/main/java/ru/serega6531/packmate/service/StreamService.java b/src/main/java/ru/serega6531/packmate/service/StreamService.java index 5256dde..6a254a9 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamService.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamService.java @@ -7,10 +7,12 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; +import org.springframework.http.HttpStatus; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.server.ResponseStatusException; import ru.serega6531.packmate.model.*; import ru.serega6531.packmate.model.enums.PatternActionType; import ru.serega6531.packmate.model.enums.PatternDirectionType; @@ -242,8 +244,10 @@ public class StreamService { return saved; } - public Optional find(long id) { - return repository.findById(id); + public List getPackets(long streamId) { + return repository.getStreamWithPackets(streamId) + .map(Stream::getPackets) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND)); } /**