Skip to content

Commit

Permalink
refactor: streamline method calls and improve code readability in Ana…
Browse files Browse the repository at this point in the history
…lyticsHelperController
  • Loading branch information
LeonardoMeireles55 committed Feb 5, 2025
1 parent 27a0ae3 commit 2846ce4
Showing 1 changed file with 38 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package leonardo.labutilities.qualitylabpro.controllers.analytics;

import jakarta.validation.Valid;
import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO;
import leonardo.labutilities.qualitylabpro.dtos.analytics.GroupedMeanAndStdByLevelDTO;
import leonardo.labutilities.qualitylabpro.dtos.analytics.GroupedResultsByLevelDTO;
import leonardo.labutilities.qualitylabpro.dtos.analytics.UpdateAnalyticsMeanDTO;
import leonardo.labutilities.qualitylabpro.services.analytics.AbstractAnalyticHelperService;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
Expand All @@ -15,16 +14,21 @@
import org.springframework.hateoas.Link;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
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.RequestParam;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import org.springframework.web.util.UriComponentsBuilder;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
import jakarta.validation.Valid;
import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO;
import leonardo.labutilities.qualitylabpro.dtos.analytics.GroupedMeanAndStdByLevelDTO;
import leonardo.labutilities.qualitylabpro.dtos.analytics.GroupedResultsByLevelDTO;
import leonardo.labutilities.qualitylabpro.dtos.analytics.UpdateAnalyticsMeanDTO;
import leonardo.labutilities.qualitylabpro.services.analytics.AbstractAnalyticHelperService;

public class AnalyticsHelperController {
private final AbstractAnalyticHelperService analyticHelperService;
Expand All @@ -35,28 +39,28 @@ public AnalyticsHelperController(AbstractAnalyticHelperService analyticHelperSer

@GetMapping("/{id}")
public ResponseEntity<AnalyticsDTO> getAnalyticsById(@PathVariable Long id) {
return ResponseEntity.ok(analyticHelperService.findOneById(id));
return ResponseEntity.ok(this.analyticHelperService.findOneById(id));
}

@DeleteMapping("/{id}")
@Transactional
public ResponseEntity<Void> deleteAnalyticsResultById(@PathVariable Long id) {
analyticHelperService.deleteAnalyticsById(id);
this.analyticHelperService.deleteAnalyticsById(id);
return ResponseEntity.noContent().build();
}

@PostMapping
@Transactional
public ResponseEntity<List<AnalyticsDTO>> postAnalytics(
@Valid @RequestBody List<@Valid AnalyticsDTO> values) {
analyticHelperService.saveNewAnalyticsRecords(values);
this.analyticHelperService.saveNewAnalyticsRecords(values);
return ResponseEntity.status(201).build();
}

@PatchMapping()
public ResponseEntity<Void> updateAnalyticsMean(
@Valid @RequestBody UpdateAnalyticsMeanDTO updateAnalyticsMeanDTO) {
analyticHelperService.updateAnalyticsMeanByNameAndLevelAndLevelLot(
this.analyticHelperService.updateAnalyticsMeanByNameAndLevelAndLevelLot(
updateAnalyticsMeanDTO.name(), updateAnalyticsMeanDTO.level(),
updateAnalyticsMeanDTO.levelLot(), updateAnalyticsMeanDTO.mean());
return ResponseEntity.noContent().build();
Expand All @@ -67,7 +71,7 @@ public ResponseEntity<List<GroupedResultsByLevelDTO>> getGroupedByLevel(
@RequestParam String name, @RequestParam("startDate") LocalDateTime startDate,
@RequestParam("endDate") LocalDateTime endDate,
@PageableDefault(size = 100) @ParameterObject Pageable pageable) {
List<GroupedResultsByLevelDTO> groupedData = analyticHelperService
List<GroupedResultsByLevelDTO> groupedData = this.analyticHelperService
.findAnalyticsWithGroupedResults(name, startDate, endDate, pageable);
return ResponseEntity.ok(groupedData);
}
Expand All @@ -77,48 +81,51 @@ public ResponseEntity<List<GroupedMeanAndStdByLevelDTO>> getMeanAndDeviationGrou
@RequestParam String name, @RequestParam("startDate") LocalDateTime startDate,
@RequestParam("endDate") LocalDateTime endDate,
@PageableDefault(size = 100) @ParameterObject Pageable pageable) {
List<GroupedMeanAndStdByLevelDTO> groupedData = analyticHelperService
List<GroupedMeanAndStdByLevelDTO> groupedData = this.analyticHelperService
.calculateGroupedMeanAndStandardDeviation(name, startDate, endDate, pageable);
return ResponseEntity.ok(groupedData);
}

public ResponseEntity<CollectionModel<EntityModel<AnalyticsDTO>>> getAllAnalyticsWithLinks(
List<String> names, @PageableDefault(size = 100) @ParameterObject Pageable pageable) {
Page<AnalyticsDTO> resultsList =
analyticHelperService.findAnalyticsPagedByNameIn(names, pageable);
this.analyticHelperService.findAnalyticsPagedByNameIn(names, pageable);

var entityModels = resultsList.getContent().stream()
.map(record -> createEntityModel(record, pageable)).collect(Collectors.toList());
.map(analyticsRecord -> this.createEntityModel(analyticsRecord, pageable)).toList();

var result = addPaginationLinks(CollectionModel.of(entityModels), resultsList, pageable);
var result =
this.addPaginationLinks(CollectionModel.of(entityModels), resultsList, pageable);
return ResponseEntity.ok(result);
}

public ResponseEntity<CollectionModel<EntityModel<AnalyticsDTO>>> getAnalyticsByDateBetweenWithLinks(
List<String> names, LocalDateTime startDate, LocalDateTime endDate,
@PageableDefault(size = 100) @ParameterObject Pageable pageable) {

Page<AnalyticsDTO> analyticsRecordPaged = analyticHelperService
Page<AnalyticsDTO> analyticsRecordPaged = this.analyticHelperService
.findAnalyticsByNameInAndDateBetweenWithLinks(names, startDate, endDate, pageable);

if (analyticsRecordPaged == null) {
return ResponseEntity.noContent().build();
}

var entityModels = analyticsRecordPaged.getContent().stream()
.map(record -> createEntityModel(record, pageable)).collect(Collectors.toList());
.map(record -> this.createEntityModel(record, pageable))
.collect(Collectors.toList());

var collectionModel = CollectionModel.of(entityModels);
var result = addPaginationLinks(collectionModel, analyticsRecordPaged, pageable);
var result = this.addPaginationLinks(collectionModel, analyticsRecordPaged, pageable);

return ResponseEntity.ok(result);
}

EntityModel<AnalyticsDTO> createEntityModel(AnalyticsDTO record, Pageable pageable) {
return EntityModel.of(record, Link.of(ServletUriComponentsBuilder.fromCurrentContextPath()
.path("/backend-api")
.path(linkTo(methodOn(getClass()).getAnalyticsById(record.id())).toUri().getPath())
.toUriString()).withSelfRel());
EntityModel<AnalyticsDTO> createEntityModel(AnalyticsDTO analyticsRecord, Pageable pageable) {
return EntityModel.of(analyticsRecord,
Link.of(ServletUriComponentsBuilder.fromCurrentContextPath().path("/backend").path(
linkTo(methodOn(this.getClass()).getAnalyticsById(analyticsRecord.id()))
.toUri().getPath())
.toUriString()).withSelfRel());
}

private CollectionModel<EntityModel<AnalyticsDTO>> addPaginationLinks(
Expand Down

0 comments on commit 2846ce4

Please sign in to comment.