Move dto transformation into services

This commit is contained in:
Sergey Shkurov
2023-04-28 03:27:28 +02:00
parent 288d24fffc
commit 0b50f202fc
4 changed files with 27 additions and 19 deletions

View File

@@ -1,14 +1,16 @@
package ru.serega6531.packmate.controller; package ru.serega6531.packmate.controller;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.PathVariable;
import ru.serega6531.packmate.model.Packet; 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.PacketDto;
import ru.serega6531.packmate.model.pojo.PacketPagination; import ru.serega6531.packmate.model.pojo.PacketPagination;
import ru.serega6531.packmate.service.StreamService; import ru.serega6531.packmate.service.StreamService;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@RestController @RestController
@RequestMapping("/api/packet/") @RequestMapping("/api/packet/")
@@ -23,10 +25,7 @@ public class PacketController {
@PostMapping("/{streamId}") @PostMapping("/{streamId}")
public List<PacketDto> getPacketsForStream(@PathVariable long streamId, @RequestBody PacketPagination pagination) { public List<PacketDto> getPacketsForStream(@PathVariable long streamId, @RequestBody PacketPagination pagination) {
List<Packet> packets = streamService.getPackets(streamId, pagination.getStartingFrom(), pagination.getPageSize()); return streamService.getPackets(streamId, pagination.getStartingFrom(), pagination.getPageSize());
return packets.stream()
.map(streamService::packetToDto)
.collect(Collectors.toList());
} }
} }

View File

@@ -26,16 +26,12 @@ public class StreamController {
@PostMapping("/all") @PostMapping("/all")
public List<StreamDto> getStreams(@RequestBody StreamPagination pagination) { public List<StreamDto> getStreams(@RequestBody StreamPagination pagination) {
return service.findAll(pagination, Optional.empty(), pagination.isFavorites()).stream() return service.findAll(pagination, Optional.empty(), pagination.isFavorites());
.map(service::streamToDto)
.toList();
} }
@PostMapping("/{port}") @PostMapping("/{port}")
public List<StreamDto> getStreams(@PathVariable int port, @RequestBody StreamPagination pagination) { public List<StreamDto> getStreams(@PathVariable int port, @RequestBody StreamPagination pagination) {
return service.findAll(pagination, Optional.of(port), pagination.isFavorites()).stream() return service.findAll(pagination, Optional.of(port), pagination.isFavorites());
.map(service::streamToDto)
.toList();
} }
@PostMapping("/{id}/favorite") @PostMapping("/{id}/favorite")

View File

@@ -53,7 +53,7 @@ public class Stream {
private long endTimestamp; private long endTimestamp;
@ManyToMany(fetch = FetchType.EAGER) @ManyToMany
@JoinTable( @JoinTable(
name = "stream_found_patterns", name = "stream_found_patterns",
joinColumns = @JoinColumn(name = "stream_id"), joinColumns = @JoinColumn(name = "stream_id"),

View File

@@ -1,5 +1,6 @@
package ru.serega6531.packmate.service; package ru.serega6531.packmate.service;
import jakarta.persistence.EntityManager;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.modelmapper.ModelMapper; import org.modelmapper.ModelMapper;
@@ -49,6 +50,8 @@ public class StreamService {
private final RsaKeysHolder keysHolder; private final RsaKeysHolder keysHolder;
private final ModelMapper modelMapper; private final ModelMapper modelMapper;
private final EntityManager entityManager;
private final boolean ignoreEmptyPackets; private final boolean ignoreEmptyPackets;
private final java.util.regex.Pattern userAgentPattern = java.util.regex.Pattern.compile("User-Agent: (.+)\\r\\n"); 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, SubscriptionService subscriptionService,
RsaKeysHolder keysHolder, RsaKeysHolder keysHolder,
ModelMapper modelMapper, ModelMapper modelMapper,
@Value("${ignore-empty-packets}") boolean ignoreEmptyPackets) { EntityManager entityManager, @Value("${ignore-empty-packets}") boolean ignoreEmptyPackets) {
this.repository = repository; this.repository = repository;
this.patternService = patternService; this.patternService = patternService;
this.servicesService = servicesService; this.servicesService = servicesService;
@@ -69,6 +72,7 @@ public class StreamService {
this.subscriptionService = subscriptionService; this.subscriptionService = subscriptionService;
this.keysHolder = keysHolder; this.keysHolder = keysHolder;
this.modelMapper = modelMapper; this.modelMapper = modelMapper;
this.entityManager = entityManager;
this.ignoreEmptyPackets = ignoreEmptyPackets; this.ignoreEmptyPackets = ignoreEmptyPackets;
} }
@@ -251,8 +255,12 @@ public class StreamService {
return saved; return saved;
} }
public List<Packet> getPackets(long streamId, @Nullable Long startingFrom, int pageSize) { @Transactional
return repository.getPackets(streamId, startingFrom, Pageable.ofSize(pageSize)); public List<PacketDto> 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); repository.setFavorite(id, favorite);
} }
public List<Stream> findAll(StreamPagination pagination, Optional<Integer> service, boolean onlyFavorites) { @Transactional
public List<StreamDto> findAll(StreamPagination pagination, Optional<Integer> service, boolean onlyFavorites) {
PageRequest page = PageRequest.of(0, pagination.getPageSize(), Sort.Direction.DESC, "id"); PageRequest page = PageRequest.of(0, pagination.getPageSize(), Sort.Direction.DESC, "id");
Specification<Stream> spec = Specification.where(null); Specification<Stream> spec = Specification.where(null);
@@ -289,7 +298,11 @@ public class StreamService {
spec = spec.and(streamPatternsContains(pagination.getPattern())); 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<Stream> findAllBetweenTimestamps(long start, long end) { public List<Stream> findAllBetweenTimestamps(long start, long end) {