diff --git a/src/main/java/ru/serega6531/packmate/controller/PacketController.java b/src/main/java/ru/serega6531/packmate/controller/PacketController.java index e70a38f..1156ce2 100644 --- a/src/main/java/ru/serega6531/packmate/controller/PacketController.java +++ b/src/main/java/ru/serega6531/packmate/controller/PacketController.java @@ -1,14 +1,16 @@ package ru.serega6531.packmate.controller; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import ru.serega6531.packmate.model.Packet; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import ru.serega6531.packmate.model.pojo.PacketDto; import ru.serega6531.packmate.model.pojo.PacketPagination; import ru.serega6531.packmate.service.StreamService; import java.util.List; -import java.util.stream.Collectors; @RestController @RequestMapping("/api/packet/") @@ -23,10 +25,7 @@ public class PacketController { @PostMapping("/{streamId}") public List getPacketsForStream(@PathVariable long streamId, @RequestBody PacketPagination pagination) { - List packets = streamService.getPackets(streamId, pagination.getStartingFrom(), pagination.getPageSize()); - return packets.stream() - .map(streamService::packetToDto) - .collect(Collectors.toList()); + return streamService.getPackets(streamId, pagination.getStartingFrom(), pagination.getPageSize()); } } diff --git a/src/main/java/ru/serega6531/packmate/controller/StreamController.java b/src/main/java/ru/serega6531/packmate/controller/StreamController.java index 12d888a..2346fc9 100644 --- a/src/main/java/ru/serega6531/packmate/controller/StreamController.java +++ b/src/main/java/ru/serega6531/packmate/controller/StreamController.java @@ -26,16 +26,12 @@ public class StreamController { @PostMapping("/all") public List getStreams(@RequestBody StreamPagination pagination) { - return service.findAll(pagination, Optional.empty(), pagination.isFavorites()).stream() - .map(service::streamToDto) - .toList(); + return service.findAll(pagination, Optional.empty(), pagination.isFavorites()); } @PostMapping("/{port}") public List getStreams(@PathVariable int port, @RequestBody StreamPagination pagination) { - return service.findAll(pagination, Optional.of(port), pagination.isFavorites()).stream() - .map(service::streamToDto) - .toList(); + return service.findAll(pagination, Optional.of(port), pagination.isFavorites()); } @PostMapping("/{id}/favorite") diff --git a/src/main/java/ru/serega6531/packmate/model/Stream.java b/src/main/java/ru/serega6531/packmate/model/Stream.java index 5eb553a..9d88a7a 100644 --- a/src/main/java/ru/serega6531/packmate/model/Stream.java +++ b/src/main/java/ru/serega6531/packmate/model/Stream.java @@ -53,7 +53,7 @@ public class Stream { private long endTimestamp; - @ManyToMany(fetch = FetchType.EAGER) + @ManyToMany @JoinTable( name = "stream_found_patterns", joinColumns = @JoinColumn(name = "stream_id"), diff --git a/src/main/java/ru/serega6531/packmate/service/StreamService.java b/src/main/java/ru/serega6531/packmate/service/StreamService.java index 82a0faa..69abc1a 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamService.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamService.java @@ -1,5 +1,6 @@ package ru.serega6531.packmate.service; +import jakarta.persistence.EntityManager; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.Nullable; import org.modelmapper.ModelMapper; @@ -49,6 +50,8 @@ public class StreamService { private final RsaKeysHolder keysHolder; private final ModelMapper modelMapper; + private final EntityManager entityManager; + private final boolean ignoreEmptyPackets; private final java.util.regex.Pattern userAgentPattern = java.util.regex.Pattern.compile("User-Agent: (.+)\\r\\n"); @@ -61,7 +64,7 @@ public class StreamService { SubscriptionService subscriptionService, RsaKeysHolder keysHolder, ModelMapper modelMapper, - @Value("${ignore-empty-packets}") boolean ignoreEmptyPackets) { + EntityManager entityManager, @Value("${ignore-empty-packets}") boolean ignoreEmptyPackets) { this.repository = repository; this.patternService = patternService; this.servicesService = servicesService; @@ -69,6 +72,7 @@ public class StreamService { this.subscriptionService = subscriptionService; this.keysHolder = keysHolder; this.modelMapper = modelMapper; + this.entityManager = entityManager; this.ignoreEmptyPackets = ignoreEmptyPackets; } @@ -251,8 +255,12 @@ public class StreamService { return saved; } - public List getPackets(long streamId, @Nullable Long startingFrom, int pageSize) { - return repository.getPackets(streamId, startingFrom, Pageable.ofSize(pageSize)); + @Transactional + public List getPackets(long streamId, @Nullable Long startingFrom, int pageSize) { + return repository.getPackets(streamId, startingFrom, Pageable.ofSize(pageSize)) + .stream() + .map(this::packetToDto) + .toList(); } /** @@ -268,7 +276,8 @@ public class StreamService { repository.setFavorite(id, favorite); } - public List findAll(StreamPagination pagination, Optional service, boolean onlyFavorites) { + @Transactional + public List findAll(StreamPagination pagination, Optional service, boolean onlyFavorites) { PageRequest page = PageRequest.of(0, pagination.getPageSize(), Sort.Direction.DESC, "id"); Specification spec = Specification.where(null); @@ -289,7 +298,11 @@ public class StreamService { spec = spec.and(streamPatternsContains(pagination.getPattern())); } - return repository.findAll(spec, page).getContent(); + return repository.findAll(spec, page) + .getContent() + .stream() + .map(this::streamToDto) + .toList(); } public List findAllBetweenTimestamps(long start, long end) {