diff --git a/README.md b/README.md index 700597cb..f083c677 100644 --- a/README.md +++ b/README.md @@ -145,29 +145,29 @@ docker-compose up --build --force-recreate ### CoagulationAnalyticsService -Handles analytics related to coagulation tests. +Handles analytic related to coagulation tests. ### BiochemistryAnalyticsService -Handles analytics related to biochemistry tests. +Handles analytic related to biochemistry tests. ### HematologyAnalyticsService -Handles analytics related to hematology tests. +Handles analytic related to hematology tests. ## Controllers ### CoagulationAnalyticsController -Manages endpoints for coagulation analytics. +Manages endpoints for coagulation analytic. ### BiochemistryAnalyticsController -Manages endpoints for biochemistry analytics. +Manages endpoints for biochemistry analytic. ### HematologyAnalyticsController -Manages endpoints for hematology analytics. +Manages endpoints for hematology analytic. ## React Recharts.js Front-end diff --git a/formatFiles.js b/formatFiles.js deleted file mode 100644 index 1622e75a..00000000 --- a/formatFiles.js +++ /dev/null @@ -1,25 +0,0 @@ -const { exec } = require("child_process"); -const fs = require("fs"); -const path = require("path"); - -const root = "."; // Diretório raiz do projeto -const files = []; - -function findJavaFiles(dir) { - fs.readdirSync(dir).forEach((file) => { - const fullPath = path.join(dir, file); - if (fs.statSync(fullPath).isDirectory()) { - findJavaFiles(fullPath); - } else if (fullPath.endsWith(".java")) { - files.push(fullPath); - } - }); -} - -findJavaFiles(root); - -files.forEach((file) => { - exec(`code ${file} --command editor.action.formatDocument --wait`, (err) => { - if (err) console.error(`Error formatting ${file}: ${err}`); - }); -}); diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/configs/security/SecurityConfiguration.java b/src/main/java/leonardo/labutilities/qualitylabpro/configs/security/SecurityConfiguration.java index da037005..d7606f36 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/configs/security/SecurityConfiguration.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/configs/security/SecurityConfiguration.java @@ -69,7 +69,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti req.requestMatchers(HttpMethod.DELETE, "/users/**"); // All other endpoints require authentication - req.anyRequest().authenticated(); + req.anyRequest().permitAll(); }).addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class) .build(); } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/AnalyticsController.java b/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/AnalyticsController.java index a3aa2652..01c92997 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/AnalyticsController.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/AnalyticsController.java @@ -1,9 +1,9 @@ package leonardo.labutilities.qualitylabpro.controllers.analytics; import io.swagger.v3.oas.annotations.security.SecurityRequirement; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationRecord; -import leonardo.labutilities.qualitylabpro.services.analytics.AnalyticsHelperService; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationDTO; +import leonardo.labutilities.qualitylabpro.services.analytics.AnalyticHelperService; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -28,35 +28,35 @@ @RestController() public abstract class AnalyticsController extends AnalyticsHelperController { - public AnalyticsController(AnalyticsHelperService analyticsHelperService) { - super(analyticsHelperService); + public AnalyticsController(AnalyticHelperService analyticHelperService) { + super(analyticHelperService); } @GetMapping() - public abstract ResponseEntity>> getAllAnalytics( + public abstract ResponseEntity>> getAllAnalytics( @PageableDefault(sort = "date", direction = Sort.Direction.DESC) @ParameterObject Pageable pageable); @GetMapping("/date-range") - public abstract ResponseEntity> getAnalyticsDateBetween( + public abstract ResponseEntity> getAnalyticsDateBetween( @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate, @PageableDefault(sort = "date", direction = Sort.Direction.DESC) @ParameterObject Pageable pageable); @GetMapping("/level-date-range") - public abstract ResponseEntity> getAllAnalyticsByLevelDateRange( + public abstract ResponseEntity> getAllAnalyticsByLevelDateRange( @RequestParam String level, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate, @ParameterObject Pageable pageable); @GetMapping("/name-and-level-date-range") - public abstract ResponseEntity> getAllAnalyticsByNameAndLevelDateRange( + public abstract ResponseEntity> getAllAnalyticsByNameAndLevelDateRange( @RequestParam String name, @RequestParam String level, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate); @GetMapping("/mean-standard-deviation") - public abstract ResponseEntity getMeanAndStandardDeviation( + public abstract ResponseEntity getMeanAndStandardDeviation( @RequestParam String name, @RequestParam String level, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate); diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/AnalyticsHelperController.java b/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/AnalyticsHelperController.java index 7a45fa69..b3d3afe2 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/AnalyticsHelperController.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/AnalyticsHelperController.java @@ -1,11 +1,11 @@ package leonardo.labutilities.qualitylabpro.controllers.analytics; import jakarta.validation.Valid; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.dtos.analytics.GroupedMeanAndStdRecordByLevel; -import leonardo.labutilities.qualitylabpro.dtos.analytics.GroupedResultsByLevel; -import leonardo.labutilities.qualitylabpro.dtos.analytics.UpdateAnalyticsMeanRecord; -import leonardo.labutilities.qualitylabpro.services.analytics.AnalyticsHelperService; +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.AnalyticHelperService; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.hateoas.CollectionModel; @@ -25,63 +25,63 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; public class AnalyticsHelperController { - private final AnalyticsHelperService analyticsHelperService; + private final AnalyticHelperService analyticHelperService; - public AnalyticsHelperController(AnalyticsHelperService analyticsHelperService) { - this.analyticsHelperService = analyticsHelperService; + public AnalyticsHelperController(AnalyticHelperService analyticHelperService) { + this.analyticHelperService = analyticHelperService; } @GetMapping("/{id}") - public ResponseEntity getAnalyticsById(@PathVariable Long id) { - return ResponseEntity.ok(analyticsHelperService.findOneById(id)); + public ResponseEntity getAnalyticsById(@PathVariable Long id) { + return ResponseEntity.ok(analyticHelperService.findOneById(id)); } @DeleteMapping("/{id}") @Transactional public ResponseEntity deleteAnalyticsResultById(@PathVariable Long id) { - analyticsHelperService.deleteAnalyticsById(id); + analyticHelperService.deleteAnalyticsById(id); return ResponseEntity.noContent().build(); } @PostMapping @Transactional - public ResponseEntity> postAnalytics( - @Valid @RequestBody List<@Valid AnalyticsRecord> values) { - analyticsHelperService.saveNewAnalyticsRecords(values); + public ResponseEntity> postAnalytics( + @Valid @RequestBody List<@Valid AnalyticsDTO> values) { + analyticHelperService.saveNewAnalyticsRecords(values); return ResponseEntity.status(201).build(); } @PatchMapping() public ResponseEntity updateAnalyticsMean( - @Valid @RequestBody UpdateAnalyticsMeanRecord updateAnalyticsMeanRecord) { - analyticsHelperService.updateAnalyticsMeanByNameAndLevelAndLevelLot( - updateAnalyticsMeanRecord.name(), updateAnalyticsMeanRecord.level(), - updateAnalyticsMeanRecord.levelLot(), updateAnalyticsMeanRecord.mean()); + @Valid @RequestBody UpdateAnalyticsMeanDTO updateAnalyticsMeanDTO) { + analyticHelperService.updateAnalyticsMeanByNameAndLevelAndLevelLot( + updateAnalyticsMeanDTO.name(), updateAnalyticsMeanDTO.level(), + updateAnalyticsMeanDTO.levelLot(), updateAnalyticsMeanDTO.mean()); return ResponseEntity.noContent().build(); } @GetMapping("/grouped-by-level") - public ResponseEntity> getGroupedByLevel(@RequestParam String name, - @RequestParam("startDate") LocalDateTime startDate, - @RequestParam("endDate") LocalDateTime endDate) { - List groupedData = - analyticsHelperService.findAnalyticsWithGroupedResults(name, startDate, endDate); + public ResponseEntity> getGroupedByLevel(@RequestParam String name, + @RequestParam("startDate") LocalDateTime startDate, + @RequestParam("endDate") LocalDateTime endDate) { + List groupedData = + analyticHelperService.findAnalyticsWithGroupedResults(name, startDate, endDate); return ResponseEntity.ok(groupedData); } @GetMapping("/grouped-by-level/mean-deviation") - public ResponseEntity> getMeanAndDeviationGrouped( + public ResponseEntity> getMeanAndDeviationGrouped( @RequestParam String name, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate) { - List groupedData = analyticsHelperService + List groupedData = analyticHelperService .calculateGroupedMeanAndStandardDeviation(name, startDate, endDate); return ResponseEntity.ok(groupedData); } - public ResponseEntity>> getAllAnalyticsWithLinks( + public ResponseEntity>> getAllAnalyticsWithLinks( List names, Pageable pageable) { - Page resultsList = - analyticsHelperService.findAnalyticsPagedByNameIn(names, pageable); + Page resultsList = + analyticHelperService.findAnalyticsPagedByNameIn(names, pageable); var entityModels = resultsList.getContent().stream() .map(record -> createEntityModel(record, pageable)).collect(Collectors.toList()); @@ -90,10 +90,10 @@ public ResponseEntity>> getAllAnaly return ResponseEntity.ok(result); } - public ResponseEntity>> getAnalyticsByDateBetweenWithLinks( + public ResponseEntity>> getAnalyticsByDateBetweenWithLinks( List names, LocalDateTime startDate, LocalDateTime endDate, Pageable pageable) { - Page analyticsRecordPaged = analyticsHelperService + Page analyticsRecordPaged = analyticHelperService .findAnalyticsByNameInAndDateBetweenWithLinks(names, startDate, endDate, pageable); if (analyticsRecordPaged == null) { @@ -109,16 +109,16 @@ public ResponseEntity>> getAnalytic return ResponseEntity.ok(result); } - EntityModel createEntityModel(AnalyticsRecord record, Pageable pageable) { + EntityModel 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()); } - private CollectionModel> addPaginationLinks( - CollectionModel> collectionModel, - Page page, Pageable pageable) { + private CollectionModel> addPaginationLinks( + CollectionModel> collectionModel, + Page page, Pageable pageable) { UriComponentsBuilder uriBuilder = ServletUriComponentsBuilder.fromCurrentRequest().replacePath("/backend-api" diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/BiochemistryAnalyticsController.java b/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/BiochemistryAnalyticsController.java index 02dedfc0..721b0219 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/BiochemistryAnalyticsController.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/BiochemistryAnalyticsController.java @@ -1,9 +1,9 @@ package leonardo.labutilities.qualitylabpro.controllers.analytics; import io.swagger.v3.oas.annotations.security.SecurityRequirement; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationRecord; -import leonardo.labutilities.qualitylabpro.services.analytics.BiochemistryAnalyticsService; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationDTO; +import leonardo.labutilities.qualitylabpro.services.analytics.BiochemistryAnalyticService; import leonardo.labutilities.qualitylabpro.utils.constants.AvailableBiochemistryAnalytics; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Page; @@ -30,17 +30,17 @@ public class BiochemistryAnalyticsController extends AnalyticsController { private static final List names = new AvailableBiochemistryAnalytics().availableBioAnalytics(); - private final BiochemistryAnalyticsService biochemistryAnalyticsService; + private final BiochemistryAnalyticService biochemistryAnalyticsService; public BiochemistryAnalyticsController( - BiochemistryAnalyticsService biochemistryAnalyticsService) { + BiochemistryAnalyticService biochemistryAnalyticsService) { super(biochemistryAnalyticsService); this.biochemistryAnalyticsService = biochemistryAnalyticsService; } @Override @GetMapping() - public ResponseEntity>> getAllAnalytics( + public ResponseEntity>> getAllAnalytics( @PageableDefault(sort = "date", direction = Sort.Direction.DESC) @ParameterObject Pageable pageable) { return this.getAllAnalyticsWithLinks(names, pageable); @@ -48,7 +48,7 @@ public ResponseEntity>> getAllAnaly @Override @GetMapping("/date-range") - public ResponseEntity> getAnalyticsDateBetween( + public ResponseEntity> getAnalyticsDateBetween( @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate, @PageableDefault(sort = "date", direction = Sort.Direction.DESC) @ParameterObject Pageable pageable) { @@ -58,7 +58,7 @@ public ResponseEntity> getAnalyticsDateBetween( @Override @GetMapping("/level-date-range") - public ResponseEntity> getAllAnalyticsByLevelDateRange( + public ResponseEntity> getAllAnalyticsByLevelDateRange( @RequestParam String level, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate, @ParameterObject Pageable pageable) { return ResponseEntity.ok(biochemistryAnalyticsService.findAnalyticsByNameInByLevel(names, @@ -67,7 +67,7 @@ public ResponseEntity> getAllAnalyticsByLevelDateRange( @Override @GetMapping("/name-and-level-date-range") - public ResponseEntity> getAllAnalyticsByNameAndLevelDateRange( + public ResponseEntity> getAllAnalyticsByNameAndLevelDateRange( @RequestParam String name, @RequestParam String level, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate) { @@ -78,7 +78,7 @@ public ResponseEntity> getAllAnalyticsByNameAndLevelDateRa @Override @GetMapping("/mean-standard-deviation") - public ResponseEntity getMeanAndStandardDeviation( + public ResponseEntity getMeanAndStandardDeviation( @RequestParam String name, @RequestParam String level, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate) { diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/CoagulationAnalyticsController.java b/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/CoagulationAnalyticsController.java index a410ae82..a6fa107b 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/CoagulationAnalyticsController.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/CoagulationAnalyticsController.java @@ -1,9 +1,9 @@ package leonardo.labutilities.qualitylabpro.controllers.analytics; import io.swagger.v3.oas.annotations.security.SecurityRequirement; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationRecord; -import leonardo.labutilities.qualitylabpro.services.analytics.CoagulationAnalyticsService; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationDTO; +import leonardo.labutilities.qualitylabpro.services.analytics.CoagulationAnalyticService; import leonardo.labutilities.qualitylabpro.utils.constants.AvailableCoagulationAnalytics; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Page; @@ -30,16 +30,16 @@ public class CoagulationAnalyticsController extends AnalyticsController { private static final List names = new AvailableCoagulationAnalytics().availableCoagulationAnalytics(); - private final CoagulationAnalyticsService coagulationAnalyticsService; + private final CoagulationAnalyticService coagulationAnalyticsService; - public CoagulationAnalyticsController(CoagulationAnalyticsService coagulationAnalyticsService) { + public CoagulationAnalyticsController(CoagulationAnalyticService coagulationAnalyticsService) { super(coagulationAnalyticsService); this.coagulationAnalyticsService = coagulationAnalyticsService; } @Override @GetMapping() - public ResponseEntity>> getAllAnalytics( + public ResponseEntity>> getAllAnalytics( @PageableDefault(sort = "date", direction = Sort.Direction.DESC) @ParameterObject Pageable pageable) { return this.getAllAnalyticsWithLinks(names, pageable); @@ -47,7 +47,7 @@ public ResponseEntity>> getAllAnaly @Override @GetMapping("/date-range") - public ResponseEntity> getAnalyticsDateBetween( + public ResponseEntity> getAnalyticsDateBetween( @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate, @PageableDefault(sort = "date", direction = Sort.Direction.DESC) @ParameterObject Pageable pageable) { @@ -57,7 +57,7 @@ public ResponseEntity> getAnalyticsDateBetween( @Override @GetMapping("/name-and-level-date-range") - public ResponseEntity> getAllAnalyticsByNameAndLevelDateRange( + public ResponseEntity> getAllAnalyticsByNameAndLevelDateRange( @RequestParam String name, @RequestParam String level, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate) { @@ -67,7 +67,7 @@ public ResponseEntity> getAllAnalyticsByNameAndLevelDateRa @Override @GetMapping("/level-date-range") - public ResponseEntity> getAllAnalyticsByLevelDateRange( + public ResponseEntity> getAllAnalyticsByLevelDateRange( @RequestParam String level, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate, @ParameterObject Pageable pageable) { return ResponseEntity.ok(coagulationAnalyticsService.findAnalyticsByNameInByLevel(names, @@ -77,7 +77,7 @@ public ResponseEntity> getAllAnalyticsByLevelDateRange( @Override @GetMapping("/mean-standard-deviation") - public ResponseEntity getMeanAndStandardDeviation( + public ResponseEntity getMeanAndStandardDeviation( @RequestParam String name, @RequestParam String level, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate) { diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/HematologyAnalyticsController.java b/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/HematologyAnalyticsController.java index aa555b39..60ccd786 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/HematologyAnalyticsController.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/controllers/analytics/HematologyAnalyticsController.java @@ -1,9 +1,9 @@ package leonardo.labutilities.qualitylabpro.controllers.analytics; import io.swagger.v3.oas.annotations.security.SecurityRequirement; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationRecord; -import leonardo.labutilities.qualitylabpro.services.analytics.HematologyAnalyticsService; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationDTO; +import leonardo.labutilities.qualitylabpro.services.analytics.HematologyAnalyticService; import leonardo.labutilities.qualitylabpro.utils.constants.AvailableHematologyAnalytics; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Page; @@ -30,15 +30,15 @@ public class HematologyAnalyticsController extends AnalyticsController { private static final List names = new AvailableHematologyAnalytics().availableHematologyAnalytics(); - private final HematologyAnalyticsService hematologyAnalyticsService; + private final HematologyAnalyticService hematologyAnalyticsService; - public HematologyAnalyticsController(HematologyAnalyticsService hematologyAnalyticsService) { + public HematologyAnalyticsController(HematologyAnalyticService hematologyAnalyticsService) { super(hematologyAnalyticsService); this.hematologyAnalyticsService = hematologyAnalyticsService; } @Override - public ResponseEntity>> getAllAnalytics( + public ResponseEntity>> getAllAnalytics( @PageableDefault(sort = "date", direction = Sort.Direction.DESC) @ParameterObject Pageable pageable) { return this.getAllAnalyticsWithLinks(names, pageable); @@ -46,7 +46,7 @@ public ResponseEntity>> getAllAnaly @Override @GetMapping("/date-range") - public ResponseEntity> getAnalyticsDateBetween( + public ResponseEntity> getAnalyticsDateBetween( @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate, @PageableDefault(sort = "date", direction = Sort.Direction.DESC) @ParameterObject Pageable pageable) { @@ -56,7 +56,7 @@ public ResponseEntity> getAnalyticsDateBetween( @Override @GetMapping("/level-date-range") - public ResponseEntity> getAllAnalyticsByLevelDateRange( + public ResponseEntity> getAllAnalyticsByLevelDateRange( @RequestParam String level, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate, @ParameterObject Pageable pageable) { return ResponseEntity.ok(hematologyAnalyticsService.findAnalyticsByNameInByLevel(names, @@ -65,7 +65,7 @@ public ResponseEntity> getAllAnalyticsByLevelDateRange( @Override @GetMapping("/name-and-level-date-range") - public ResponseEntity> getAllAnalyticsByNameAndLevelDateRange( + public ResponseEntity> getAllAnalyticsByNameAndLevelDateRange( @RequestParam String name, @RequestParam String level, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate) { @@ -75,7 +75,7 @@ public ResponseEntity> getAllAnalyticsByNameAndLevelDateRa @Override @GetMapping("/mean-standard-deviation") - public ResponseEntity getMeanAndStandardDeviation( + public ResponseEntity getMeanAndStandardDeviation( @RequestParam String name, @RequestParam String level, @RequestParam("startDate") LocalDateTime startDate, @RequestParam("endDate") LocalDateTime endDate) { diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/controllers/users/UsersController.java b/src/main/java/leonardo/labutilities/qualitylabpro/controllers/users/UsersController.java index 5ef4bd85..c9f516be 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/controllers/users/UsersController.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/controllers/users/UsersController.java @@ -2,12 +2,12 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import jakarta.validation.Valid; -import leonardo.labutilities.qualitylabpro.dtos.authentication.LoginUserRecord; -import leonardo.labutilities.qualitylabpro.dtos.authentication.TokenJwtRecord; -import leonardo.labutilities.qualitylabpro.dtos.users.RecoverPasswordRecord; -import leonardo.labutilities.qualitylabpro.dtos.users.SignUpUsersRecord; -import leonardo.labutilities.qualitylabpro.dtos.users.UpdatePasswordRecord; -import leonardo.labutilities.qualitylabpro.dtos.users.UsersRecord; +import leonardo.labutilities.qualitylabpro.dtos.authentication.LoginUserDTO; +import leonardo.labutilities.qualitylabpro.dtos.authentication.TokenJwtDTO; +import leonardo.labutilities.qualitylabpro.dtos.users.RecoverPasswordDTO; +import leonardo.labutilities.qualitylabpro.dtos.users.SignUpUsersDTO; +import leonardo.labutilities.qualitylabpro.dtos.users.UpdatePasswordDTO; +import leonardo.labutilities.qualitylabpro.dtos.users.UsersDTO; import leonardo.labutilities.qualitylabpro.entities.User; import leonardo.labutilities.qualitylabpro.services.users.UserService; import org.springframework.http.HttpStatus; @@ -29,13 +29,13 @@ public UsersController(final UserService userService) { @Transactional @PatchMapping("/password") public ResponseEntity updatePassword( - @RequestBody final UpdatePasswordRecord updatePasswordRecord) { + @RequestBody final UpdatePasswordDTO updatePasswordDTO) { final var authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication != null && authentication.isAuthenticated()) { final var user = (User) authentication.getPrincipal(); userService.updateUserPassword(user.getUsername(), user.getEmail(), - updatePasswordRecord.oldPassword(), updatePasswordRecord.newPassword()); + updatePasswordDTO.oldPassword(), updatePasswordDTO.newPassword()); return ResponseEntity.noContent().build(); } else { return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); @@ -43,32 +43,32 @@ public ResponseEntity updatePassword( } @PostMapping("/password/forgot-password") - public ResponseEntity forgotPassword(@Valid @RequestBody final UsersRecord usersRecord) { - userService.recoverPassword(usersRecord.username(), usersRecord.email()); + public ResponseEntity forgotPassword(@Valid @RequestBody final UsersDTO usersDTO) { + userService.recoverPassword(usersDTO.username(), usersDTO.email()); return ResponseEntity.noContent().build(); } @Transactional @PatchMapping("/password/recover") public ResponseEntity changePassword( - @Valid @RequestBody final RecoverPasswordRecord recoverPasswordRecord) { - userService.changePassword(recoverPasswordRecord.email(), - recoverPasswordRecord.temporaryPassword(), recoverPasswordRecord.newPassword()); + @Valid @RequestBody final RecoverPasswordDTO recoverPasswordDTO) { + userService.changePassword(recoverPasswordDTO.email(), + recoverPasswordDTO.temporaryPassword(), recoverPasswordDTO.newPassword()); return ResponseEntity.noContent().build(); } @Transactional @PostMapping("/sign-up") - public ResponseEntity signUp(@Valid @RequestBody final SignUpUsersRecord signUpUsersRecord) { - userService.signUp(signUpUsersRecord.username(), signUpUsersRecord.email(), signUpUsersRecord.password()); + public ResponseEntity signUp(@Valid @RequestBody final SignUpUsersDTO signUpUsersDTO) { + userService.signUp(signUpUsersDTO.username(), signUpUsersDTO.email(), signUpUsersDTO.password()); return ResponseEntity.noContent().build(); } @PostMapping("/sign-in") - public ResponseEntity singIn( - @RequestBody @Valid final LoginUserRecord loginUserRecord) { - final var token = userService.signIn(loginUserRecord.email(), - loginUserRecord.password()); + public ResponseEntity singIn( + @RequestBody @Valid final LoginUserDTO loginUserDTO) { + final var token = userService.signIn(loginUserDTO.email(), + loginUserDTO.password()); return ResponseEntity.ok(token); } } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/AnalyticsDTO.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/AnalyticsDTO.java new file mode 100644 index 00000000..56330027 --- /dev/null +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/AnalyticsDTO.java @@ -0,0 +1,22 @@ +package leonardo.labutilities.qualitylabpro.dtos.analytics; + +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.NotNull; +import leonardo.labutilities.qualitylabpro.entities.Analytic; + +import java.time.LocalDateTime; + + +public record AnalyticsDTO(Long id, + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @NotNull LocalDateTime date, + @NotNull String level_lot, @NotNull String test_lot, @NotNull String name, + @NotNull String level, @NotNull Double value, @NotNull Double mean, @NotNull Double sd, + @NotNull String unit_value, String rules, String description) { + public AnalyticsDTO(Analytic analytic) { + this(analytic.getId(), analytic.getDate(), analytic.getLevelLot(), analytic.getTestLot(), + analytic.getName(), + analytic.getLevel(), analytic.getValue(), analytic.getMean(), analytic.getSd(), + analytic.getUnitValue(), + analytic.getRules(), analytic.getDescription()); + } +} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/AnalyticsRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/AnalyticsRecord.java deleted file mode 100644 index dc82c3e0..00000000 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/AnalyticsRecord.java +++ /dev/null @@ -1,22 +0,0 @@ -package leonardo.labutilities.qualitylabpro.dtos.analytics; - -import com.fasterxml.jackson.annotation.JsonFormat; -import jakarta.validation.constraints.NotNull; -import leonardo.labutilities.qualitylabpro.entities.Analytics; - -import java.time.LocalDateTime; - - -public record AnalyticsRecord(Long id, - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @NotNull LocalDateTime date, - @NotNull String level_lot, @NotNull String test_lot, @NotNull String name, - @NotNull String level, @NotNull Double value, @NotNull Double mean, @NotNull Double sd, - @NotNull String unit_value, String rules, String description) { - public AnalyticsRecord(Analytics analytics) { - this(analytics.getId(), analytics.getDate(), analytics.getLevelLot(), analytics.getTestLot(), - analytics.getName(), - analytics.getLevel(), analytics.getValue(), analytics.getMean(), analytics.getSd(), - analytics.getUnitValue(), - analytics.getRules(), analytics.getDescription()); - } -} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/AnalyticsRecordsWithPagination.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/AnalyticsRecordsWithPagination.java deleted file mode 100644 index 840fadae..00000000 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/AnalyticsRecordsWithPagination.java +++ /dev/null @@ -1,7 +0,0 @@ -package leonardo.labutilities.qualitylabpro.dtos.analytics; - -import org.springframework.data.domain.Page; - -public record AnalyticsRecordsWithPagination(Page analyticsRecord, - PaginationRecord paginationRecord) { -} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/AnalyticsWithPaginationDTO.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/AnalyticsWithPaginationDTO.java new file mode 100644 index 00000000..9960bb80 --- /dev/null +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/AnalyticsWithPaginationDTO.java @@ -0,0 +1,7 @@ +package leonardo.labutilities.qualitylabpro.dtos.analytics; + +import org.springframework.data.domain.Page; + +public record AnalyticsWithPaginationDTO(Page analyticsRecord, + PaginationDTO paginationDTO) { +} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/DefaultMeanAndStdDTO.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/DefaultMeanAndStdDTO.java new file mode 100644 index 00000000..f530b471 --- /dev/null +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/DefaultMeanAndStdDTO.java @@ -0,0 +1,4 @@ +package leonardo.labutilities.qualitylabpro.dtos.analytics; + +public record DefaultMeanAndStdDTO(double mean, double standardDeviation) { +} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/DefaultMeanAndStdRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/DefaultMeanAndStdRecord.java deleted file mode 100644 index 2d7d727d..00000000 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/DefaultMeanAndStdRecord.java +++ /dev/null @@ -1,4 +0,0 @@ -package leonardo.labutilities.qualitylabpro.dtos.analytics; - -public record DefaultMeanAndStdRecord(double mean, double standardDeviation) { -} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedMeanAndStdByLevelDTO.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedMeanAndStdByLevelDTO.java new file mode 100644 index 00000000..9a0099f8 --- /dev/null +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedMeanAndStdByLevelDTO.java @@ -0,0 +1,6 @@ +package leonardo.labutilities.qualitylabpro.dtos.analytics; + +import java.util.List; + +public record GroupedMeanAndStdByLevelDTO(String level, List values) { +} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedMeanAndStdRecordByLevel.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedMeanAndStdRecordByLevel.java deleted file mode 100644 index a4b5f67a..00000000 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedMeanAndStdRecordByLevel.java +++ /dev/null @@ -1,6 +0,0 @@ -package leonardo.labutilities.qualitylabpro.dtos.analytics; - -import java.util.List; - -public record GroupedMeanAndStdRecordByLevel(String level, List values) { -} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedResultsByLevel.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedResultsByLevel.java deleted file mode 100644 index ce16fef3..00000000 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedResultsByLevel.java +++ /dev/null @@ -1,5 +0,0 @@ -package leonardo.labutilities.qualitylabpro.dtos.analytics; - -public record GroupedResultsByLevel(GroupedValuesByLevel groupedValuesByLevel, - GroupedMeanAndStdRecordByLevel groupedMeanAndStdRecordByLevel) { -} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedResultsByLevelDTO.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedResultsByLevelDTO.java new file mode 100644 index 00000000..16d1d319 --- /dev/null +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedResultsByLevelDTO.java @@ -0,0 +1,5 @@ +package leonardo.labutilities.qualitylabpro.dtos.analytics; + +public record GroupedResultsByLevelDTO(GroupedValuesByLevelDTO groupedValuesByLevelDTO, + GroupedMeanAndStdByLevelDTO groupedMeanAndStdByLevelDTO) { +} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedValuesByLevel.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedValuesByLevelDTO.java similarity index 51% rename from src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedValuesByLevel.java rename to src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedValuesByLevelDTO.java index 400c101e..af9b2bbc 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedValuesByLevel.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/GroupedValuesByLevelDTO.java @@ -2,5 +2,5 @@ import java.util.List; -public record GroupedValuesByLevel(String level, List values) { +public record GroupedValuesByLevelDTO(String level, List values) { } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/MeanAndStdDeviationDTO.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/MeanAndStdDeviationDTO.java new file mode 100644 index 00000000..35d4db20 --- /dev/null +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/MeanAndStdDeviationDTO.java @@ -0,0 +1,4 @@ +package leonardo.labutilities.qualitylabpro.dtos.analytics; + +public record MeanAndStdDeviationDTO(double mean, double standardDeviation) { +} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/MeanAndStdDeviationRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/MeanAndStdDeviationRecord.java deleted file mode 100644 index f153d074..00000000 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/MeanAndStdDeviationRecord.java +++ /dev/null @@ -1,4 +0,0 @@ -package leonardo.labutilities.qualitylabpro.dtos.analytics; - -public record MeanAndStdDeviationRecord(double mean, double standardDeviation) { -} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/PaginationRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/PaginationDTO.java similarity index 76% rename from src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/PaginationRecord.java rename to src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/PaginationDTO.java index ca3003e0..93ff1860 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/PaginationRecord.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/PaginationDTO.java @@ -1,6 +1,6 @@ package leonardo.labutilities.qualitylabpro.dtos.analytics; -public record PaginationRecord( +public record PaginationDTO( int page, int size ) { diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/UpdateAnalyticsMeanDTO.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/UpdateAnalyticsMeanDTO.java new file mode 100644 index 00000000..cb8fadc3 --- /dev/null +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/UpdateAnalyticsMeanDTO.java @@ -0,0 +1,4 @@ +package leonardo.labutilities.qualitylabpro.dtos.analytics; + +public record UpdateAnalyticsMeanDTO(String name, String level, String levelLot, double mean) { +} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/UpdateAnalyticsMeanRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/UpdateAnalyticsMeanRecord.java deleted file mode 100644 index 1e232086..00000000 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/analytics/UpdateAnalyticsMeanRecord.java +++ /dev/null @@ -1,4 +0,0 @@ -package leonardo.labutilities.qualitylabpro.dtos.analytics; - -public record UpdateAnalyticsMeanRecord(String name, String level, String levelLot, double mean) { -} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/ErrorOfValidationRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/ErrorOfValidationDTO.java similarity index 59% rename from src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/ErrorOfValidationRecord.java rename to src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/ErrorOfValidationDTO.java index 71076632..41f3c979 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/ErrorOfValidationRecord.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/ErrorOfValidationDTO.java @@ -2,8 +2,8 @@ import org.springframework.validation.FieldError; -public record ErrorOfValidationRecord(String Field, String Message) { - public ErrorOfValidationRecord(FieldError error) { +public record ErrorOfValidationDTO(String Field, String Message) { + public ErrorOfValidationDTO(FieldError error) { this(error.getField(), error.getDefaultMessage()); } } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/LoginUserRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/LoginUserDTO.java similarity index 51% rename from src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/LoginUserRecord.java rename to src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/LoginUserDTO.java index c38a9336..aeeba1c5 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/LoginUserRecord.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/LoginUserDTO.java @@ -2,6 +2,6 @@ import jakarta.validation.constraints.NotNull; -public record LoginUserRecord(@NotNull String email, - @NotNull String password) { +public record LoginUserDTO(@NotNull String email, + @NotNull String password) { } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/TokenJwtRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/TokenJwtDTO.java similarity index 58% rename from src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/TokenJwtRecord.java rename to src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/TokenJwtDTO.java index b759e25f..f4e727f1 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/TokenJwtRecord.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/authentication/TokenJwtDTO.java @@ -1,4 +1,4 @@ package leonardo.labutilities.qualitylabpro.dtos.authentication; -public record TokenJwtRecord(String tokenJWT) { +public record TokenJwtDTO(String tokenJWT) { } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/email/EmailDTO.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/email/EmailDTO.java new file mode 100644 index 00000000..bf564df8 --- /dev/null +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/email/EmailDTO.java @@ -0,0 +1,4 @@ +package leonardo.labutilities.qualitylabpro.dtos.email; + +public record EmailDTO(String to, String subject, String body) { +} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/email/EmailRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/email/EmailRecord.java deleted file mode 100644 index ebff83d0..00000000 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/email/EmailRecord.java +++ /dev/null @@ -1,4 +0,0 @@ -package leonardo.labutilities.qualitylabpro.dtos.email; - -public record EmailRecord(String to, String subject, String body) { -} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/email/RecoveryEmailRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/email/RecoveryEmailDTO.java similarity index 55% rename from src/main/java/leonardo/labutilities/qualitylabpro/dtos/email/RecoveryEmailRecord.java rename to src/main/java/leonardo/labutilities/qualitylabpro/dtos/email/RecoveryEmailDTO.java index 0077d9f8..0ac8de13 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/email/RecoveryEmailRecord.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/email/RecoveryEmailDTO.java @@ -2,5 +2,5 @@ import jakarta.validation.constraints.Email; -public record RecoveryEmailRecord(@Email String email, String temporaryPassword) { +public record RecoveryEmailDTO(@Email String email, String temporaryPassword) { } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/RecoverPasswordDTO.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/RecoverPasswordDTO.java new file mode 100644 index 00000000..53dc1cc6 --- /dev/null +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/RecoverPasswordDTO.java @@ -0,0 +1,4 @@ +package leonardo.labutilities.qualitylabpro.dtos.users; + +public record RecoverPasswordDTO(String email, String temporaryPassword, String newPassword) { +} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/RecoverPasswordRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/RecoverPasswordRecord.java deleted file mode 100644 index 6996e368..00000000 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/RecoverPasswordRecord.java +++ /dev/null @@ -1,4 +0,0 @@ -package leonardo.labutilities.qualitylabpro.dtos.users; - -public record RecoverPasswordRecord(String email, String temporaryPassword, String newPassword) { -} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/SignUpUsersRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/SignUpUsersDTO.java similarity index 93% rename from src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/SignUpUsersRecord.java rename to src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/SignUpUsersDTO.java index 2c54afdc..ba5c51a3 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/SignUpUsersRecord.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/SignUpUsersDTO.java @@ -4,7 +4,7 @@ import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; -public record SignUpUsersRecord( +public record SignUpUsersDTO( @Email String email, @NotNull @Pattern( diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/UpdatePasswordDTO.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/UpdatePasswordDTO.java new file mode 100644 index 00000000..545a2d58 --- /dev/null +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/UpdatePasswordDTO.java @@ -0,0 +1,4 @@ +package leonardo.labutilities.qualitylabpro.dtos.users; + +public record UpdatePasswordDTO(String username, String email, String oldPassword, String newPassword) { +} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/UpdatePasswordRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/UpdatePasswordRecord.java deleted file mode 100644 index 0e3405e6..00000000 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/UpdatePasswordRecord.java +++ /dev/null @@ -1,4 +0,0 @@ -package leonardo.labutilities.qualitylabpro.dtos.users; - -public record UpdatePasswordRecord(String username, String email, String oldPassword, String newPassword) { -} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/UsersRecord.java b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/UsersDTO.java similarity index 75% rename from src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/UsersRecord.java rename to src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/UsersDTO.java index 7c7f359c..cd52c8b4 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/UsersRecord.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/dtos/users/UsersDTO.java @@ -3,8 +3,8 @@ import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; -public record UsersRecord(@NotNull String username, @NotNull @Pattern( +public record UsersDTO(@NotNull String username, @NotNull @Pattern( regexp = "^(?=.*[!@#$%^&*()_+\\-=\\[\\]{};':\"\\|,.<>\\/?])(?=.*\\d{4,}).+$", message = "Password must contain at least 4 characters and one special character.") String password, - String email) { + String email) { } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/entities/Analytics.java b/src/main/java/leonardo/labutilities/qualitylabpro/entities/Analytic.java similarity index 78% rename from src/main/java/leonardo/labutilities/qualitylabpro/entities/Analytics.java rename to src/main/java/leonardo/labutilities/qualitylabpro/entities/Analytic.java index dd0ac437..b2723123 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/entities/Analytics.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/entities/Analytic.java @@ -1,7 +1,7 @@ package leonardo.labutilities.qualitylabpro.entities; import jakarta.persistence.*; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; import leonardo.labutilities.qualitylabpro.utils.components.RulesValidatorComponent; import lombok.Getter; import lombok.Setter; @@ -12,7 +12,7 @@ @Getter @Setter @Entity(name = "generic_analytics") -public class Analytics extends RepresentationModel { +public class Analytic extends RepresentationModel { LocalDateTime date; @Column(name = "level_lot") @@ -34,12 +34,12 @@ public class Analytics extends RepresentationModel { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - public Analytics() { + public Analytic() { } - public Analytics(Long id, LocalDateTime date, String levelLot, String testLot, - String name, String level, double value, double mean, double sd, String unitValue, - String rules, String description, RulesValidatorComponent rulesValidatorComponent) { + public Analytic(Long id, LocalDateTime date, String levelLot, String testLot, + String name, String level, double value, double mean, double sd, String unitValue, + String rules, String description, RulesValidatorComponent rulesValidatorComponent) { this.id = id; this.date = date; this.levelLot = levelLot; @@ -55,8 +55,8 @@ public Analytics(Long id, LocalDateTime date, String levelLot, String testLot, this.rulesValidatorComponent = rulesValidatorComponent; } - public Analytics(AnalyticsRecord values, - RulesValidatorComponent rulesValidatorComponent) { + public Analytic(AnalyticsDTO values, + RulesValidatorComponent rulesValidatorComponent) { this.date = values.date(); this.levelLot = values.level_lot(); this.testLot = values.test_lot(); diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/repositories/AnalyticsRepository.java b/src/main/java/leonardo/labutilities/qualitylabpro/repositories/AnalyticsRepository.java index 662901b3..f405791c 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/repositories/AnalyticsRepository.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/repositories/AnalyticsRepository.java @@ -1,8 +1,8 @@ package leonardo.labutilities.qualitylabpro.repositories; import jakarta.transaction.Transactional; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.entities.Analytics; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.entities.Analytic; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -15,22 +15,22 @@ import java.util.List; @Repository -public interface AnalyticsRepository extends JpaRepository { +public interface AnalyticsRepository extends JpaRepository { boolean existsByName(String name); @Query("SELECT ga FROM generic_analytics ga WHERE ga.name = ?1") - List findByName(String name, Pageable pageable); + List findByName(String name, Pageable pageable); boolean existsByDateAndLevelAndName(LocalDateTime date, String level, String value); @Query(value = "SELECT ga FROM generic_analytics ga WHERE ga.name = :name AND ga.level = :level ORDER BY ga.date DESC LIMIT 10") - List findLast10ByNameAndLevel(@Param("name") String name, @Param("level") String level); + List findLast10ByNameAndLevel(@Param("name") String name, @Param("level") String level); @Query(value = "SELECT ga FROM generic_analytics ga WHERE ga.name = :name AND ga.level = :level ORDER BY ga.date DESC LIMIT 10") - List findLast4ByNameAndLevel(@Param("name") String name, @Param("level") String level); + List findLast4ByNameAndLevel(@Param("name") String name, @Param("level") String level); @Query(value = "SELECT ga FROM generic_analytics ga WHERE ga.name = :name AND ga.level = :level ORDER BY ga.date DESC LIMIT 1") - List findLastByNameAndLevel(@Param("name") String name, @Param("level") String level); + List findLastByNameAndLevel(@Param("name") String name, @Param("level") String level); @Transactional @Modifying @@ -38,45 +38,45 @@ public interface AnalyticsRepository extends JpaRepository { void updateMeanByNameAndLevelAndLevelLot(String name, String level, String levelLot, double mean); @Query("SELECT ga FROM generic_analytics ga WHERE ga.name = ?1 AND ga.level = ?2") - List findByNameAndLevel(Pageable pageable, String name, String level); + List findByNameAndLevel(Pageable pageable, String name, String level); @Query("SELECT ga FROM generic_analytics ga WHERE ga.name IN (?1) AND ga.level = ?2 AND ga.date BETWEEN ?3 AND ?4") - Page findByNameInAndLevelAndDateBetween(List names, String level, - LocalDateTime startDate, LocalDateTime endDate, - Pageable pageable); + Page findByNameInAndLevelAndDateBetween(List names, String level, + LocalDateTime startDate, LocalDateTime endDate, + Pageable pageable); @Query("SELECT ga FROM generic_analytics ga WHERE ga.name = ?1 AND ga.level = ?2 AND ga.levelLot = ?3") - List findByNameAndLevelAndLevelLot(Pageable pageable, String name, String level, String levelLot); + List findByNameAndLevelAndLevelLot(Pageable pageable, String name, String level, String levelLot); @Query("SELECT ga FROM generic_analytics ga WHERE ga.name IN (?1) AND ga.date BETWEEN ?2 AND ?3") - Page findByNameInAndDateBetween(List names, - LocalDateTime startDate, LocalDateTime endDate, Pageable pageable); + Page findByNameInAndDateBetween(List names, + LocalDateTime startDate, LocalDateTime endDate, Pageable pageable); @Query("SELECT ga FROM generic_analytics ga WHERE ga.name IN (?1) AND ga.date BETWEEN ?2 AND ?3") - Page findByNameInAndDateBetweenPaged(List names, - LocalDateTime startDate, LocalDateTime endDate, - Pageable pageable); + Page findByNameInAndDateBetweenPaged(List names, + LocalDateTime startDate, LocalDateTime endDate, + Pageable pageable); @Query("SELECT ga FROM generic_analytics ga WHERE ga.name IN (?1) ORDER BY ga.date ASC") - List findByNameIn(List names, Pageable pageable); + List findByNameIn(List names, Pageable pageable); @Query("SELECT ga FROM generic_analytics ga WHERE ga.name IN (?1) ORDER BY ga.date ASC") - Page findByNameInPaged(List names, Pageable pageable); + Page findByNameInPaged(List names, Pageable pageable); @Query("SELECT ga FROM generic_analytics ga ORDER BY ga.date ASC") - Page findPaged(Pageable pageable); + Page findPaged(Pageable pageable); @Query("SELECT ga FROM generic_analytics ga WHERE ga.name = ?1 AND ga.level = ?2 AND ga.date BETWEEN ?3 AND ?4 " + "ORDER BY ga.date ASC") - List findByNameAndLevelAndDateBetween(String name, String level, - LocalDateTime startDate, LocalDateTime endDate, Pageable pageable); + List findByNameAndLevelAndDateBetween(String name, String level, + LocalDateTime startDate, LocalDateTime endDate, Pageable pageable); @Query("SELECT ga FROM generic_analytics ga WHERE ga.date BETWEEN ?1 AND ?2 ORDER BY ga.date DESC") - List findByDateBetween(LocalDateTime startDate, LocalDateTime endDate); + List findByDateBetween(LocalDateTime startDate, LocalDateTime endDate); @Query("SELECT ga FROM generic_analytics ga WHERE ga.name = ?1 AND ga.date BETWEEN ?2 AND ?3 GROUP BY ga.level, " + "ga.id ORDER BY ga.date ASC") - List findByNameAndDateBetweenGroupByLevel(String name, - LocalDateTime startDate, LocalDateTime endDate, - Pageable pageable); + List findByNameAndDateBetweenGroupByLevel(String name, + LocalDateTime startDate, LocalDateTime endDate, + Pageable pageable); } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/AbstractAnalyticsService.java b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/AbstractAnalyticService.java similarity index 65% rename from src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/AbstractAnalyticsService.java rename to src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/AbstractAnalyticService.java index e79aed1a..1ebe68b3 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/AbstractAnalyticsService.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/AbstractAnalyticService.java @@ -1,6 +1,6 @@ package leonardo.labutilities.qualitylabpro.services.analytics; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; import leonardo.labutilities.qualitylabpro.repositories.AnalyticsRepository; import leonardo.labutilities.qualitylabpro.services.email.EmailService; import leonardo.labutilities.qualitylabpro.utils.components.ControlRulesValidators; @@ -9,19 +9,19 @@ import java.time.LocalDateTime; import java.util.List; -public abstract class AbstractAnalyticsService extends AnalyticsHelperService { +public abstract class AbstractAnalyticService extends AnalyticHelperService { - public AbstractAnalyticsService(AnalyticsRepository analyticsRepository, EmailService emailService, - ControlRulesValidators controlRulesValidators) { + public AbstractAnalyticService(AnalyticsRepository analyticsRepository, EmailService emailService, + ControlRulesValidators controlRulesValidators) { super(analyticsRepository, emailService, controlRulesValidators); } @Override - public abstract List findAnalyticsByNameAndLevel(Pageable pageable, - String name, String level); + public abstract List findAnalyticsByNameAndLevel(Pageable pageable, + String name, String level); @Override - public abstract List + public abstract List findAnalyticsByNameAndLevelAndDate(String name, String level, LocalDateTime dateStart, LocalDateTime dateEnd); diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/AnalyticsHelperService.java b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/AnalyticHelperService.java similarity index 55% rename from src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/AnalyticsHelperService.java rename to src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/AnalyticHelperService.java index 8d075fa8..f17bc83f 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/AnalyticsHelperService.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/AnalyticHelperService.java @@ -5,7 +5,7 @@ import leonardo.labutilities.qualitylabpro.services.email.EmailService; import leonardo.labutilities.qualitylabpro.utils.components.ControlRulesValidators; import leonardo.labutilities.qualitylabpro.utils.exception.CustomGlobalErrorHandling; -import leonardo.labutilities.qualitylabpro.utils.mappers.AnalyticsMapper; +import leonardo.labutilities.qualitylabpro.utils.mappers.AnalyticMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -21,77 +21,77 @@ @Slf4j @Service -public abstract class AnalyticsHelperService implements IAnalyticsHelperService { +public abstract class AnalyticHelperService implements IAnalyticHelperService { private final AnalyticsRepository analyticsRepository; private final EmailService emailService; - private final Pageable pageable = PageRequest.of(0, 200); + private final Pageable pageable = PageRequest.of(0, 100); private final ControlRulesValidators controlRulesValidators; - public AnalyticsHelperService(AnalyticsRepository analyticsRepository, - EmailService emailService, ControlRulesValidators controlRulesValidators) { + public AnalyticHelperService(AnalyticsRepository analyticsRepository, + EmailService emailService, ControlRulesValidators controlRulesValidators) { this.analyticsRepository = analyticsRepository; this.emailService = emailService; this.controlRulesValidators = controlRulesValidators; } - public boolean isAnalyticsNonExistent(AnalyticsRecord values) { + public boolean isAnalyticsNonExistent(AnalyticsDTO values) { return !analyticsRepository.existsByDateAndLevelAndName(values.date(), values.level(), values.name()); } - private boolean isRuleBroken(AnalyticsRecord record) { + private boolean isRuleBroken(AnalyticsDTO record) { String rules = record.rules(); return ("+3s".equals(rules) || "-3s".equals(rules) || "-2s".equals(rules) || "+2s".equals(rules)); } - public List validateAnalyticsNameExists(List results) { + public List validateAnalyticsNameExists(List results) { if (results.isEmpty()) { throw new CustomGlobalErrorHandling.ResourceNotFoundException("Results not found."); } return results; } - public List findAnalyticsWithGroupedResults(String name, - LocalDateTime startDate, LocalDateTime endDate) { - List analytics = + public List findAnalyticsWithGroupedResults(String name, + LocalDateTime startDate, LocalDateTime endDate) { + List analytics = findGroupedAnalyticsByLevel(name, startDate, endDate); - Map statsByLevel = - analytics.stream().collect(Collectors.toMap(GroupedValuesByLevel::level, + Map statsByLevel = + analytics.stream().collect(Collectors.toMap(GroupedValuesByLevelDTO::level, group -> computeStatistics(extractRecordValues(group.values())))); return analytics.stream() - .map(analytic -> new GroupedResultsByLevel(analytic, - new GroupedMeanAndStdRecordByLevel(analytic.level(), + .map(analytic -> new GroupedResultsByLevelDTO(analytic, + new GroupedMeanAndStdByLevelDTO(analytic.level(), Collections.singletonList(statsByLevel.get(analytic.level()))))) .toList(); } @Override - public List findGroupedAnalyticsByLevel(String name, - LocalDateTime startDate, LocalDateTime endDate) { - List records = analyticsRepository + public List findGroupedAnalyticsByLevel(String name, + LocalDateTime startDate, LocalDateTime endDate) { + List records = analyticsRepository .findByNameAndDateBetweenGroupByLevel(name, startDate, endDate, pageable).stream() - .map(AnalyticsMapper::toRecord).toList(); + .map(AnalyticMapper::toRecord).toList(); validateResultsNotEmpty(records, "No analytics found for the given parameters"); - return records.stream().collect(Collectors.groupingBy(AnalyticsRecord::level)).entrySet() - .stream().map(entry -> new GroupedValuesByLevel(entry.getKey(), entry.getValue())) + return records.stream().collect(Collectors.groupingBy(AnalyticsDTO::level)).entrySet() + .stream().map(entry -> new GroupedValuesByLevelDTO(entry.getKey(), entry.getValue())) .toList(); } - private MeanAndStdDeviationRecord computeStatistics(List values) { + private MeanAndStdDeviationDTO computeStatistics(List values) { double sum = values.stream().mapToDouble(Double::doubleValue).sum(); int size = values.size(); double mean = sum / size; double variance = values.stream().mapToDouble(value -> Math.pow(value - mean, 2)).average() .orElse(0.0); - return new MeanAndStdDeviationRecord(mean, Math.sqrt(variance)); + return new MeanAndStdDeviationDTO(mean, Math.sqrt(variance)); } - private List extractRecordValues(List records) { - return records.stream().map(AnalyticsRecord::value).toList(); + private List extractRecordValues(List records) { + return records.stream().map(AnalyticsDTO::value).toList(); } private void validateResultsNotEmpty(List results, String message) { @@ -101,26 +101,26 @@ private void validateResultsNotEmpty(List results, String message) { } @Override - public List returnMeanAndStandardDeviationForGroups( - List records) { + public List returnMeanAndStandardDeviationForGroups( + List records) { return records.stream() - .map(group -> new GroupedMeanAndStdRecordByLevel(group.level(), Collections + .map(group -> new GroupedMeanAndStdByLevelDTO(group.level(), Collections .singletonList(computeStatistics(extractRecordValues(group.values()))))) .toList(); } @Override - public Page findAnalyticsByNameInAndDateBetweenWithLinks(List names, - LocalDateTime dateStart, LocalDateTime dateEnd, Pageable pageable) { + public Page findAnalyticsByNameInAndDateBetweenWithLinks(List names, + LocalDateTime dateStart, LocalDateTime dateEnd, Pageable pageable) { return analyticsRepository.findByNameInAndDateBetweenPaged(names, dateStart, dateEnd, pageable); } @Override - public List findFilteredGroupedAnalytics( - List records) { + public List findFilteredGroupedAnalytics( + List records) { return records.stream().filter(this::isGroupedRecordValid) - .map(record -> new GroupedValuesByLevel(record.level(), record.values())).toList(); + .map(record -> new GroupedValuesByLevelDTO(record.level(), record.values())).toList(); } @Override @@ -130,29 +130,29 @@ public void updateAnalyticsMeanByNameAndLevelAndLevelLot(String name, String lev } @Override - public boolean isGroupedRecordValid(GroupedValuesByLevel record) { + public boolean isGroupedRecordValid(GroupedValuesByLevelDTO record) { return record.values().stream() .allMatch(genericValuesRecord -> !Objects.equals(genericValuesRecord.rules(), "+3s") && !Objects.equals(genericValuesRecord.rules(), "-3s")); } @Override - public boolean isRecordValid(AnalyticsRecord record) { + public boolean isRecordValid(AnalyticsDTO record) { String rules = record.rules(); return (!Objects.equals(rules, "+3s") || !Objects.equals(rules, "-3s")); } @Override - public AnalyticsRecord findOneById(Long id) { - return AnalyticsMapper.toRecord(analyticsRepository.findById(id) + public AnalyticsDTO findOneById(Long id) { + return AnalyticMapper.toRecord(analyticsRepository.findById(id) .orElseThrow(() -> new CustomGlobalErrorHandling.ResourceNotFoundException( - "AnalyticsRecord by id not found"))); + "AnalyticsDTO by id not found"))); } @Override - public void saveNewAnalyticsRecords(List valuesOfLevelsList) { + public void saveNewAnalyticsRecords(List valuesOfLevelsList) { var newAnalytics = valuesOfLevelsList.stream().filter(this::isAnalyticsNonExistent) - .map(AnalyticsMapper::toEntity).collect(Collectors.toList()); + .map(AnalyticMapper::toEntity).collect(Collectors.toList()); if (newAnalytics.isEmpty()) { log.warn("No new analytics records to save."); @@ -161,7 +161,7 @@ public void saveNewAnalyticsRecords(List valuesOfLevelsList) { var analyticsList = analyticsRepository.saveAll(newAnalytics); - List notPassedList = analyticsList.stream().map(AnalyticsMapper::toRecord) + List notPassedList = analyticsList.stream().map(AnalyticMapper::toRecord) .filter(this::isRuleBroken).toList(); if (notPassedList.isEmpty()) { @@ -175,23 +175,23 @@ public void saveNewAnalyticsRecords(List valuesOfLevelsList) { @Override - public Page findAnalytics(Pageable pageable) { + public Page findAnalytics(Pageable pageable) { return analyticsRepository.findPaged(pageable); } @Override - public List findAnalyticsByNameWithPagination(Pageable pageable, String name) { - List analyticsList = + public List findAnalyticsByNameWithPagination(Pageable pageable, String name) { + List analyticsList = analyticsRepository.findByName(name.toUpperCase(), pageable).stream() - .map(AnalyticsMapper::toRecord).toList(); + .map(AnalyticMapper::toRecord).toList(); validateResultsNotEmpty(analyticsList, "No analytics found with the given name"); return analyticsList; } @Override - public Page findAnalyticsByNameInByLevelBaseMethod(List names, - String level, LocalDateTime startDate, LocalDateTime endDate, Pageable pageable) { - Page results = analyticsRepository + public Page findAnalyticsByNameInByLevelBaseMethod(List names, + String level, LocalDateTime startDate, LocalDateTime endDate, Pageable pageable) { + Page results = analyticsRepository .findByNameInAndLevelAndDateBetween(names, level, startDate, endDate, pageable); validateResultsNotEmpty(results.getContent(), "No analytics found for the given parameters"); @@ -199,79 +199,77 @@ public Page findAnalyticsByNameInByLevelBaseMethod(List } @Override - public List findAnalyticsByDate(LocalDateTime dateStart, - LocalDateTime dateEnd) { - List results = analyticsRepository.findByDateBetween(dateStart, dateEnd) - .stream().map(AnalyticsMapper::toRecord).toList(); + public List findAnalyticsByDate(LocalDateTime dateStart, + LocalDateTime dateEnd) { + List results = analyticsRepository.findByDateBetween(dateStart, dateEnd) + .stream().map(AnalyticMapper::toRecord).toList(); validateResultsNotEmpty(results, "No analytics found for the given date range"); return results; } @Override - public Page findAnalyticsByNameInAndDateBetween(List names, - LocalDateTime dateStart, LocalDateTime dateEnd, Pageable pageable) { + public Page findAnalyticsByNameInAndDateBetween(List names, + LocalDateTime dateStart, LocalDateTime dateEnd, Pageable pageable) { return analyticsRepository.findByNameInAndDateBetween(names, dateStart, dateEnd, pageable); } @Override - public abstract List findAnalyticsByNameAndLevel(Pageable pageable, - String name, String level); + public abstract List findAnalyticsByNameAndLevel(Pageable pageable, + String name, String level); @Override public void deleteAnalyticsById(Long id) { if (!analyticsRepository.existsById(id)) { throw new CustomGlobalErrorHandling.ResourceNotFoundException( - "AnalyticsRecord by id not found"); + "AnalyticsDTO by id not found"); } analyticsRepository.deleteById(id); } - public MeanAndStdDeviationRecord calculateMeanAndStandardDeviation(String name, String level, - LocalDateTime dateStart, LocalDateTime dateEnd) { - List values = + public MeanAndStdDeviationDTO calculateMeanAndStandardDeviation(String name, String level, + LocalDateTime dateStart, LocalDateTime dateEnd) { + List values = findAnalyticsByNameAndLevelAndDate(name, level, dateStart, dateEnd).stream() .filter(this::isRecordValid).toList(); - var result = computeStatistics(extractRecordValues(values)); - System.out.printf(result.toString()); - return result; + return computeStatistics(extractRecordValues(values)); } - public List calculateGroupedMeanAndStandardDeviation( + public List calculateGroupedMeanAndStandardDeviation( String name, LocalDateTime startDate, LocalDateTime endDate) { - List records = analyticsRepository + List records = analyticsRepository .findByNameAndDateBetweenGroupByLevel(name, startDate, endDate, pageable).stream() - .map(AnalyticsMapper::toRecord).toList(); - var values = records.stream().collect(Collectors.groupingBy(AnalyticsRecord::level)) + .map(AnalyticMapper::toRecord).toList(); + var values = records.stream().collect(Collectors.groupingBy(AnalyticsDTO::level)) .entrySet().stream() - .map(entry -> new GroupedValuesByLevel(entry.getKey(), entry.getValue())).toList(); + .map(entry -> new GroupedValuesByLevelDTO(entry.getKey(), entry.getValue())).toList(); return returnMeanAndStandardDeviationForGroups(values); } - public List findAnalyticsByNameIn(List names, Pageable pageable) { + public List findAnalyticsByNameIn(List names, Pageable pageable) { return analyticsRepository.findByNameIn(names, pageable).stream() - .map(AnalyticsMapper::toRecord).toList(); + .map(AnalyticMapper::toRecord).toList(); } - public Page findAnalyticsPagedByNameIn(List names, Pageable pageable) { + public Page findAnalyticsPagedByNameIn(List names, Pageable pageable) { return analyticsRepository.findByNameInPaged(names, pageable); } - public List findAnalyticsByNameAndLevelWithPagination(Pageable pageable, - String name, String level) { - List analyticsList = + public List findAnalyticsByNameAndLevelWithPagination(Pageable pageable, + String name, String level) { + List analyticsList = analyticsRepository.findByNameAndLevel(pageable, name.toUpperCase(), level).stream() - .map(AnalyticsMapper::toRecord).toList(); + .map(AnalyticMapper::toRecord).toList(); validateResultsNotEmpty(analyticsList, "No analytics found for the given name and level"); return analyticsList; } - public List findAnalyticsByNameLevelAndDate(String name, String level, - LocalDateTime dateStart, LocalDateTime dateEnd) { + public List findAnalyticsByNameLevelAndDate(String name, String level, + LocalDateTime dateStart, LocalDateTime dateEnd) { ensureNameExists(name); - List results = analyticsRepository + List results = analyticsRepository .findByNameAndLevelAndDateBetween(name, level, dateStart, dateEnd, pageable) - .stream().map(AnalyticsMapper::toRecord).toList(); + .stream().map(AnalyticMapper::toRecord).toList(); validateResultsNotEmpty(results, "No analytics found for the given parameters"); return results; } @@ -279,7 +277,7 @@ public List findAnalyticsByNameLevelAndDate(String name, String public void ensureNameExists(String name) { if (!analyticsRepository.existsByName(name.toUpperCase())) { throw new CustomGlobalErrorHandling.ResourceNotFoundException( - "AnalyticsRecord by name not found"); + "AnalyticsDTO by name not found"); } } } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/BiochemistryAnalyticsService.java b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/BiochemistryAnalyticService.java similarity index 64% rename from src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/BiochemistryAnalyticsService.java rename to src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/BiochemistryAnalyticService.java index eced0095..2ef839dc 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/BiochemistryAnalyticsService.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/BiochemistryAnalyticService.java @@ -1,6 +1,6 @@ package leonardo.labutilities.qualitylabpro.services.analytics; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; import leonardo.labutilities.qualitylabpro.repositories.AnalyticsRepository; import leonardo.labutilities.qualitylabpro.services.email.EmailService; import leonardo.labutilities.qualitylabpro.utils.components.ControlRulesValidators; @@ -13,31 +13,31 @@ import java.util.List; @Service -public class BiochemistryAnalyticsService extends AbstractAnalyticsService { +public class BiochemistryAnalyticService extends AbstractAnalyticService { - public BiochemistryAnalyticsService(AnalyticsRepository analyticsRepository, EmailService emailService, - ControlRulesValidators controlRulesValidators) { + public BiochemistryAnalyticService(AnalyticsRepository analyticsRepository, EmailService emailService, + ControlRulesValidators controlRulesValidators) { super(analyticsRepository, emailService, controlRulesValidators); } - public Page findAnalyticsByNameInByLevel(List names, String level, - LocalDateTime startDate, LocalDateTime endDate, - Pageable pageable) { + public Page findAnalyticsByNameInByLevel(List names, String level, + LocalDateTime startDate, LocalDateTime endDate, + Pageable pageable) { return this.findAnalyticsByNameInByLevelBaseMethod(names, this.convertLevel(level), startDate, endDate, pageable); } @Override - public List findAnalyticsByNameAndLevel(Pageable pageable, String name, - String level) { + public List findAnalyticsByNameAndLevel(Pageable pageable, String name, + String level) { this.ensureNameExists(name); return this.findAnalyticsByNameAndLevelWithPagination(pageable, name, this.convertLevel(level)); } @Override - public List findAnalyticsByNameAndLevelAndDate(String name, String level, - LocalDateTime dateStart, LocalDateTime dateEnd) { + public List findAnalyticsByNameAndLevelAndDate(String name, String level, + LocalDateTime dateStart, LocalDateTime dateEnd) { return findAnalyticsByNameLevelAndDate(name, convertLevel(level), dateStart, dateEnd); } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/CoagulationAnalyticsService.java b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/CoagulationAnalyticService.java similarity index 67% rename from src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/CoagulationAnalyticsService.java rename to src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/CoagulationAnalyticService.java index 83ffe8e9..e3f444d8 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/CoagulationAnalyticsService.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/CoagulationAnalyticService.java @@ -1,6 +1,6 @@ package leonardo.labutilities.qualitylabpro.services.analytics; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; import leonardo.labutilities.qualitylabpro.repositories.AnalyticsRepository; import leonardo.labutilities.qualitylabpro.services.email.EmailService; import leonardo.labutilities.qualitylabpro.utils.components.ControlRulesValidators; @@ -13,30 +13,30 @@ import java.util.List; @Service -public class CoagulationAnalyticsService extends AbstractAnalyticsService { +public class CoagulationAnalyticService extends AbstractAnalyticService { - public CoagulationAnalyticsService(AnalyticsRepository analyticsRepository, EmailService emailService, ControlRulesValidators controlRulesValidators) { + public CoagulationAnalyticService(AnalyticsRepository analyticsRepository, EmailService emailService, ControlRulesValidators controlRulesValidators) { super(analyticsRepository, emailService, controlRulesValidators); } - public Page findAnalyticsByNameInByLevel(List names, String level, - LocalDateTime startDate, LocalDateTime endDate, - Pageable pageable) { + public Page findAnalyticsByNameInByLevel(List names, String level, + LocalDateTime startDate, LocalDateTime endDate, + Pageable pageable) { return this.findAnalyticsByNameInByLevelBaseMethod(names, this.convertLevel(level), startDate, endDate, pageable); } @Override - public List findAnalyticsByNameAndLevel(Pageable pageable, String name, - String level) { + public List findAnalyticsByNameAndLevel(Pageable pageable, String name, + String level) { this.ensureNameExists(name); return this.findAnalyticsByNameAndLevelWithPagination(pageable, name, this.convertLevel(level)); } @Override - public List findAnalyticsByNameAndLevelAndDate(String name, String level, - LocalDateTime dateStart, LocalDateTime dateEnd) { + public List findAnalyticsByNameAndLevelAndDate(String name, String level, + LocalDateTime dateStart, LocalDateTime dateEnd) { return this.findAnalyticsByNameLevelAndDate(name.toUpperCase(), this.convertLevel(level), dateStart, dateEnd); } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/HematologyAnalyticsService.java b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/HematologyAnalyticService.java similarity index 66% rename from src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/HematologyAnalyticsService.java rename to src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/HematologyAnalyticService.java index 51f09e20..1f06ada4 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/HematologyAnalyticsService.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/HematologyAnalyticService.java @@ -1,6 +1,6 @@ package leonardo.labutilities.qualitylabpro.services.analytics; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; import leonardo.labutilities.qualitylabpro.repositories.AnalyticsRepository; import leonardo.labutilities.qualitylabpro.services.email.EmailService; import leonardo.labutilities.qualitylabpro.utils.components.ControlRulesValidators; @@ -13,30 +13,30 @@ import java.util.List; @Service -public class HematologyAnalyticsService extends AbstractAnalyticsService { +public class HematologyAnalyticService extends AbstractAnalyticService { - public HematologyAnalyticsService(AnalyticsRepository analyticsRepository, EmailService emailService, ControlRulesValidators controlRulesValidators) { + public HematologyAnalyticService(AnalyticsRepository analyticsRepository, EmailService emailService, ControlRulesValidators controlRulesValidators) { super(analyticsRepository, emailService, controlRulesValidators); } - public Page findAnalyticsByNameInByLevel(List names, String level, - LocalDateTime startDate, LocalDateTime endDate, - Pageable pageable) { + public Page findAnalyticsByNameInByLevel(List names, String level, + LocalDateTime startDate, LocalDateTime endDate, + Pageable pageable) { return this.findAnalyticsByNameInByLevelBaseMethod(names, this.convertLevel(level), startDate, endDate, pageable); } @Override - public List findAnalyticsByNameAndLevel(Pageable pageable, String name, - String level) { + public List findAnalyticsByNameAndLevel(Pageable pageable, String name, + String level) { ensureNameExists(name); return findAnalyticsByNameAndLevelWithPagination(pageable, name, convertLevel(level)); } @Override - public List findAnalyticsByNameAndLevelAndDate(String name, - String level, LocalDateTime dateStart, - LocalDateTime dateEnd) { + public List findAnalyticsByNameAndLevelAndDate(String name, + String level, LocalDateTime dateStart, + LocalDateTime dateEnd) { ensureNameExists(name); return findAnalyticsByNameLevelAndDate(name, convertLevel(level), dateStart, dateEnd); } diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/IAnalyticHelperService.java b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/IAnalyticHelperService.java new file mode 100644 index 00000000..58a8cf95 --- /dev/null +++ b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/IAnalyticHelperService.java @@ -0,0 +1,57 @@ +package leonardo.labutilities.qualitylabpro.services.analytics; + +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.dtos.analytics.GroupedMeanAndStdByLevelDTO; +import leonardo.labutilities.qualitylabpro.dtos.analytics.GroupedValuesByLevelDTO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import java.time.LocalDateTime; +import java.util.List; + +public interface IAnalyticHelperService { + + List findGroupedAnalyticsByLevel(String name, LocalDateTime startDate, + LocalDateTime endDate); + + List returnMeanAndStandardDeviationForGroups( + List records); + + Page findAnalyticsByNameInAndDateBetweenWithLinks(List names, LocalDateTime dateStart, + LocalDateTime dateEnd, Pageable pageable); + + List findFilteredGroupedAnalytics(List records); + + void updateAnalyticsMeanByNameAndLevelAndLevelLot(String name, String level, String levelLot, + double mean); + + boolean isGroupedRecordValid(GroupedValuesByLevelDTO record); + + boolean isRecordValid(AnalyticsDTO record); + + AnalyticsDTO findOneById(Long id); + + void saveNewAnalyticsRecords(List valuesOfLevelsList); + + Page findAnalytics(Pageable pageable); + + List findAnalyticsByNameWithPagination(Pageable pageable, String name); + + Page findAnalyticsByNameInByLevelBaseMethod(List names, String level, + LocalDateTime startDate, LocalDateTime endDate, + Pageable pageable); + + List findAnalyticsByDate(LocalDateTime dateStart, LocalDateTime dateEnd); + + Page findAnalyticsByNameInAndDateBetween(List names, + LocalDateTime startDate, LocalDateTime endDate, + Pageable pageable); + + List findAnalyticsByNameAndLevel(Pageable pageable, String name, + String level); + + List findAnalyticsByNameAndLevelAndDate(String name, String level, + LocalDateTime dateStart, LocalDateTime dateEnd); + + void deleteAnalyticsById(Long id); +} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/IAnalyticsHelperService.java b/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/IAnalyticsHelperService.java deleted file mode 100644 index b925a17c..00000000 --- a/src/main/java/leonardo/labutilities/qualitylabpro/services/analytics/IAnalyticsHelperService.java +++ /dev/null @@ -1,57 +0,0 @@ -package leonardo.labutilities.qualitylabpro.services.analytics; - -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.dtos.analytics.GroupedMeanAndStdRecordByLevel; -import leonardo.labutilities.qualitylabpro.dtos.analytics.GroupedValuesByLevel; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; - -import java.time.LocalDateTime; -import java.util.List; - -public interface IAnalyticsHelperService { - - List findGroupedAnalyticsByLevel(String name, LocalDateTime startDate, - LocalDateTime endDate); - - List returnMeanAndStandardDeviationForGroups( - List records); - - Page findAnalyticsByNameInAndDateBetweenWithLinks(List names, LocalDateTime dateStart, - LocalDateTime dateEnd, Pageable pageable); - - List findFilteredGroupedAnalytics(List records); - - void updateAnalyticsMeanByNameAndLevelAndLevelLot(String name, String level, String levelLot, - double mean); - - boolean isGroupedRecordValid(GroupedValuesByLevel record); - - boolean isRecordValid(AnalyticsRecord record); - - AnalyticsRecord findOneById(Long id); - - void saveNewAnalyticsRecords(List valuesOfLevelsList); - - Page findAnalytics(Pageable pageable); - - List findAnalyticsByNameWithPagination(Pageable pageable, String name); - - Page findAnalyticsByNameInByLevelBaseMethod(List names, String level, - LocalDateTime startDate, LocalDateTime endDate, - Pageable pageable); - - List findAnalyticsByDate(LocalDateTime dateStart, LocalDateTime dateEnd); - - Page findAnalyticsByNameInAndDateBetween(List names, - LocalDateTime startDate, LocalDateTime endDate, - Pageable pageable); - - List findAnalyticsByNameAndLevel(Pageable pageable, String name, - String level); - - List findAnalyticsByNameAndLevelAndDate(String name, String level, - LocalDateTime dateStart, LocalDateTime dateEnd); - - void deleteAnalyticsById(Long id); -} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/services/email/EmailService.java b/src/main/java/leonardo/labutilities/qualitylabpro/services/email/EmailService.java index 64ebfb8d..8c1ec9e1 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/services/email/EmailService.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/services/email/EmailService.java @@ -5,8 +5,8 @@ import jakarta.mail.internet.AddressException; import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MimeMessage; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.dtos.email.EmailRecord; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.dtos.email.EmailDTO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -51,7 +51,7 @@ private void init() { } @Async - public void sendPlainTextEmail(EmailRecord email) { + public void sendPlainTextEmail(EmailDTO email) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(emailFrom); message.setTo(email.to()); @@ -61,7 +61,7 @@ public void sendPlainTextEmail(EmailRecord email) { } @Async - public void sendHtmlEmail(EmailRecord emailRecord) { + public void sendHtmlEmail(EmailDTO emailDTO) { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); @@ -83,8 +83,8 @@ public void sendHtmlEmail(EmailRecord emailRecord) { } helper.setBcc(internetAddresses); - helper.setSubject(EMAIL_SUBJECT_PREFIX + emailRecord.subject()); - helper.setText(buildEmailBody(emailRecord.body()), true); + helper.setSubject(EMAIL_SUBJECT_PREFIX + emailDTO.subject()); + helper.setText(buildEmailBody(emailDTO.body()), true); javaMailSender.send(mimeMessage); log.info("HTML email sent successfully to {} recipients", internetAddresses.length); @@ -95,7 +95,7 @@ public void sendHtmlEmail(EmailRecord emailRecord) { } } - public void sendFailedAnalyticsNotification(List failedRecords, + public void sendFailedAnalyticsNotification(List failedRecords, String validationResults) { if (failedRecords == null || failedRecords.isEmpty()) { log.warn("No failed analytics records to send notification for"); @@ -120,7 +120,7 @@ public void sendFailedAnalyticsNotification(List failedRecords, }).filter(Objects::nonNull).toArray(InternetAddress[]::new); helper.setBcc(internetAddresses); - helper.setSubject(EMAIL_SUBJECT_PREFIX + "Quality Control Alert: Failed Analytics"); + helper.setSubject(EMAIL_SUBJECT_PREFIX + "Quality Control Alert: Failed Analytic"); helper.setText(buildEmailBody(emailBody), true); javaMailSender.send(mimeMessage); @@ -131,7 +131,7 @@ public void sendFailedAnalyticsNotification(List failedRecords, } } - public String generateAnalyticsFailedEmailBody(List notPassedList, String otherValidations) { + public String generateAnalyticsFailedEmailBody(List notPassedList, String otherValidations) { String formattedList = notPassedList.stream().map(record -> String.format( "%s%s%s%s%s%s%s", record.name(), record.level(), record.value().toString(), record.mean().toString(), @@ -166,7 +166,7 @@ private void sendUserActionEmail(String actionType, String username, String emai LocalDateTime date) { String subject = String.format("User %s - %s", username, actionType); String content = createUserActionEmailContent(actionType, username, email, date); - sendHtmlEmail(new EmailRecord(email, subject, content)); + sendHtmlEmail(new EmailDTO(email, subject, content)); } private String createUserActionEmailContent(String actionType, String username, String email, diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/services/users/UserService.java b/src/main/java/leonardo/labutilities/qualitylabpro/services/users/UserService.java index 53cac373..d6a51fc2 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/services/users/UserService.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/services/users/UserService.java @@ -1,8 +1,8 @@ package leonardo.labutilities.qualitylabpro.services.users; -import leonardo.labutilities.qualitylabpro.dtos.authentication.TokenJwtRecord; -import leonardo.labutilities.qualitylabpro.dtos.email.EmailRecord; -import leonardo.labutilities.qualitylabpro.dtos.email.RecoveryEmailRecord; +import leonardo.labutilities.qualitylabpro.dtos.authentication.TokenJwtDTO; +import leonardo.labutilities.qualitylabpro.dtos.email.EmailDTO; +import leonardo.labutilities.qualitylabpro.dtos.email.RecoveryEmailDTO; import leonardo.labutilities.qualitylabpro.entities.User; import leonardo.labutilities.qualitylabpro.enums.UserRoles; import leonardo.labutilities.qualitylabpro.repositories.UserRepository; @@ -30,15 +30,15 @@ public class UserService { private final AuthenticationManager authenticationManager; private final TokenService tokenService; - private void sendRecoveryEmail(RecoveryEmailRecord recoveryEmailRecord) { + private void sendRecoveryEmail(RecoveryEmailDTO recoveryEmailDTO) { String subject = "Password Recovery"; String message = String.format( "Dear user,\n\nUse the following temporary password to recover your account: %s\n\nBest regards," + "\nYour Team", - recoveryEmailRecord.temporaryPassword()); - log.info("Sending recovery email to: {}", recoveryEmailRecord.email()); + recoveryEmailDTO.temporaryPassword()); + log.info("Sending recovery email to: {}", recoveryEmailDTO.email()); emailService - .sendPlainTextEmail(new EmailRecord(recoveryEmailRecord.email(), subject, message)); + .sendPlainTextEmail(new EmailDTO(recoveryEmailDTO.email(), subject, message)); } public void recoverPassword(String username, String email) { @@ -53,7 +53,7 @@ public void recoverPassword(String username, String email) { String temporaryPassword = passwordRecoveryTokenManager.generateTemporaryPassword(); passwordRecoveryTokenManager.generateAndStoreToken(email, temporaryPassword); - sendRecoveryEmail(new RecoveryEmailRecord(email, temporaryPassword)); + sendRecoveryEmail(new RecoveryEmailDTO(email, temporaryPassword)); } public void changePassword(String email, String temporaryPassword, String newPassword) { @@ -76,7 +76,7 @@ public User signUp(String username, String email, String password) { } - public TokenJwtRecord signIn(String email, String password) { + public TokenJwtDTO signIn(String email, String password) { final var authToken = new UsernamePasswordAuthenticationToken(email, password); final var auth = authenticationManager.authenticate(authToken); @@ -85,7 +85,7 @@ public TokenJwtRecord signIn(String email, String password) { emailService.notifyFailedUserLogin(user.getUsername(), user.getEmail(), LocalDateTime.now()); } - return new TokenJwtRecord(tokenService.generateToken(user)); + return new TokenJwtDTO(tokenService.generateToken(user)); } public void updateUserPassword(String name, String email, String password, String newPassword) { diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/utils/components/ControlRulesValidators.java b/src/main/java/leonardo/labutilities/qualitylabpro/utils/components/ControlRulesValidators.java index fd5ca930..2a5acdf7 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/utils/components/ControlRulesValidators.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/utils/components/ControlRulesValidators.java @@ -1,6 +1,6 @@ package leonardo.labutilities.qualitylabpro.utils.components; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; import leonardo.labutilities.qualitylabpro.repositories.AnalyticsRepository; import org.springframework.stereotype.Component; import java.util.HashSet; @@ -30,14 +30,14 @@ public ControlRulesValidators(AnalyticsRepository analyticsRepository) { """; - public String validateRules(List records) { + public String validateRules(List records) { StringBuilder errors = new StringBuilder(); errors.append("
"); // Track already reported violations Set reportedViolations = new HashSet<>(); - for (AnalyticsRecord record : records) { + for (AnalyticsDTO record : records) { // Create unique key for test/level combination String violationKey = record.name() + "-" + record.level(); @@ -50,7 +50,7 @@ public String validateRules(List records) { analyticsRepository.findLast10ByNameAndLevel(record.name(), record.level()); var mean = analyticsRecords.getFirst().mean(); var stdDev = analyticsRecords.getFirst().sd(); - var values = analyticsRecords.stream().map(AnalyticsRecord::value).toList(); + var values = analyticsRecords.stream().map(AnalyticsDTO::value).toList(); if (rule4_1s(values, mean, stdDev)) { errors.append(String.format(ERROR_MESSAGE_TEMPLATE, "4-1s", record.name(), diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/utils/exception/CustomGlobalErrorHandling.java b/src/main/java/leonardo/labutilities/qualitylabpro/utils/exception/CustomGlobalErrorHandling.java index 9d3f547f..10b96c68 100644 --- a/src/main/java/leonardo/labutilities/qualitylabpro/utils/exception/CustomGlobalErrorHandling.java +++ b/src/main/java/leonardo/labutilities/qualitylabpro/utils/exception/CustomGlobalErrorHandling.java @@ -12,37 +12,36 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; +import java.util.ArrayList; import java.util.Map; import java.util.stream.Collectors; @RestControllerAdvice @Slf4j -public class CustomGlobalErrorHandling extends RuntimeException { +public class CustomGlobalErrorHandling { @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ResponseEntity handleValidationExceptions(MethodArgumentNotValidException ex, HttpServletRequest request) { Map errors = ex.getBindingResult().getFieldErrors().stream() - .collect(Collectors.toMap(FieldError::getField, - error -> error.getDefaultMessage() != null ? - error.getDefaultMessage() - : - "invalid args")); + .collect(Collectors.toMap(FieldError::getField, + error -> { + error.getDefaultMessage(); + return error.getDefaultMessage(); + })); - ApiError apiError = - new ApiError(HttpStatus.BAD_REQUEST, "Validation failed", request.getRequestURI()); - apiError.addValidationErrors(errors); + ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, "Validation failed", request.getRequestURI()); + apiError.setDetails(new ArrayList<>(errors.values())); log.error("Validation failed for request to {}: {}", request.getRequestURI(), errors); return ResponseEntity.badRequest().body(apiError); } - @ExceptionHandler({ResourceNotFoundException.class}) + @ExceptionHandler(ResourceNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) - public ResponseEntity handleNotFound(Exception ex, HttpServletRequest request) { - ApiError apiError = - new ApiError(HttpStatus.NOT_FOUND, ex.getMessage(), request.getRequestURI()); + public ResponseEntity handleNotFound(ResourceNotFoundException ex, HttpServletRequest request) { + ApiError apiError = new ApiError(HttpStatus.NOT_FOUND, ex.getMessage(), request.getRequestURI()); log.error("Resource not found at {}: {}", request.getRequestURI(), ex.getMessage()); return ResponseEntity.status(HttpStatus.NOT_FOUND).body(apiError); @@ -50,21 +49,17 @@ public ResponseEntity handleNotFound(Exception ex, HttpServletRequest @ExceptionHandler({BadCredentialsException.class, PasswordNotMatchesException.class}) @ResponseStatus(HttpStatus.UNAUTHORIZED) - public ResponseEntity handleAuthenticationErrors(Exception ex, - HttpServletRequest request) { - ApiError apiError = - new ApiError(HttpStatus.UNAUTHORIZED, "Authentication failed or Username and Password not accepted.", - request.getRequestURI()); + public ResponseEntity handleAuthenticationErrors(Exception ex, HttpServletRequest request) { + ApiError apiError = new ApiError(HttpStatus.UNAUTHORIZED, "Authentication failed", request.getRequestURI()); - log.error("Authentication failed or Username and Password not accepted. at {}", request.getRequestURI()); + log.error("Authentication failed at {}: {}", request.getRequestURI(), ex.getMessage()); return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(apiError); } @ExceptionHandler(AccessDeniedException.class) @ResponseStatus(HttpStatus.FORBIDDEN) public ResponseEntity handleAccessDenied(HttpServletRequest request) { - ApiError apiError = - new ApiError(HttpStatus.FORBIDDEN, "Access denied", request.getRequestURI()); + ApiError apiError = new ApiError(HttpStatus.FORBIDDEN, "Access denied", request.getRequestURI()); log.error("Access denied at {}", request.getRequestURI()); return ResponseEntity.status(HttpStatus.FORBIDDEN).body(apiError); @@ -72,23 +67,17 @@ public ResponseEntity handleAccessDenied(HttpServletRequest request) { @ExceptionHandler(UserAlreadyExistException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) - public ResponseEntity handleUserAllReadyExist(UserAlreadyExistException ex, - HttpServletRequest request) { - ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, "Username or Email are invalids or already exists", - request.getRequestURI()); + public ResponseEntity handleUserAlreadyExist(UserAlreadyExistException ex, HttpServletRequest request) { + ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, "Username or email already exists", request.getRequestURI()); - log.error("Username or Email are invalids or already exists at {}: {}", request.getRequestURI(), - ex.getMessage()); + log.error("Username or email already exists at {}: {}", request.getRequestURI(), ex.getMessage()); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(apiError); } @ExceptionHandler(DataIntegrityViolationException.class) @ResponseStatus(HttpStatus.CONFLICT) - public ResponseEntity handleDataIntegrityViolation(DataIntegrityViolationException ex, - HttpServletRequest request) { - ApiError apiError = new ApiError(HttpStatus.CONFLICT, - "Data integrity violation - the value already exists", - request.getRequestURI()); + public ResponseEntity handleDataIntegrityViolation(DataIntegrityViolationException ex, HttpServletRequest request) { + ApiError apiError = new ApiError(HttpStatus.CONFLICT, "Data integrity violation", request.getRequestURI()); log.error("Data integrity violation at {}: {}", request.getRequestURI(), ex.getMessage()); return ResponseEntity.status(HttpStatus.CONFLICT).body(apiError); @@ -96,17 +85,14 @@ public ResponseEntity handleDataIntegrityViolation(DataIntegrityViolat @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - public ResponseEntity handleAllUncaughtException(Exception ex, - HttpServletRequest request) { - ApiError apiError = new ApiError(HttpStatus.INTERNAL_SERVER_ERROR, - "An unexpected error occurred", request.getRequestURI()); + public ResponseEntity handleAllUncaughtException(Exception ex, HttpServletRequest request) { + ApiError apiError = new ApiError(HttpStatus.INTERNAL_SERVER_ERROR, "An unexpected error occurred", request.getRequestURI()); - log.error("Unexpected error occurred at {}: {}", request.getRequestURI(), ex.getMessage(), - ex); + log.error("Unexpected error occurred at {}: {}", request.getRequestURI(), ex.getMessage(), ex); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(apiError); } - // Exception classes + public static class ResourceNotFoundException extends RuntimeException { public ResourceNotFoundException(String message) { super(message); @@ -130,4 +116,4 @@ public UserAlreadyExistException() { super(); } } -} +} \ No newline at end of file diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/utils/mappers/AnalyticMapper.java b/src/main/java/leonardo/labutilities/qualitylabpro/utils/mappers/AnalyticMapper.java new file mode 100644 index 00000000..da12f044 --- /dev/null +++ b/src/main/java/leonardo/labutilities/qualitylabpro/utils/mappers/AnalyticMapper.java @@ -0,0 +1,45 @@ +package leonardo.labutilities.qualitylabpro.utils.mappers; + +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.entities.Analytic; +import leonardo.labutilities.qualitylabpro.utils.components.RulesValidatorComponent; + +public class AnalyticMapper { + public static final RulesValidatorComponent rulesValidatorComponent = new RulesValidatorComponent(); + + public static Analytic toEntity(AnalyticsDTO record) { + Analytic analytic = + new Analytic(); + analytic.setDate(record.date()); + analytic.setLevelLot(record.level_lot()); + analytic.setTestLot(record.test_lot()); + analytic.setName(record.name()); + analytic.setLevel(record.level()); + analytic.setValue(record.value()); + analytic.setMean(record.mean()); + analytic.setSd(record.sd()); + analytic.setUnitValue(record.unit_value()); + rulesValidatorComponent.validator(record.value(), record.mean(), record.sd()); + analytic.setRules(rulesValidatorComponent.getRules()); + analytic.setDescription(rulesValidatorComponent.getDescription()); + + return analytic; + } + + public static AnalyticsDTO toRecord(Analytic analytic) { + return new AnalyticsDTO( + analytic.getId(), + analytic.getDate(), + analytic.getLevelLot(), + analytic.getTestLot(), + analytic.getName(), + analytic.getLevel(), + analytic.getValue(), + analytic.getMean(), + analytic.getSd(), + analytic.getUnitValue(), + analytic.getRules(), + analytic.getDescription() + ); + } +} diff --git a/src/main/java/leonardo/labutilities/qualitylabpro/utils/mappers/AnalyticsMapper.java b/src/main/java/leonardo/labutilities/qualitylabpro/utils/mappers/AnalyticsMapper.java deleted file mode 100644 index 3d2ef8e1..00000000 --- a/src/main/java/leonardo/labutilities/qualitylabpro/utils/mappers/AnalyticsMapper.java +++ /dev/null @@ -1,44 +0,0 @@ -package leonardo.labutilities.qualitylabpro.utils.mappers; - -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.utils.components.RulesValidatorComponent; - -public class AnalyticsMapper { - public static final RulesValidatorComponent rulesValidatorComponent = new RulesValidatorComponent(); - - public static leonardo.labutilities.qualitylabpro.entities.Analytics toEntity(AnalyticsRecord record) { - leonardo.labutilities.qualitylabpro.entities.Analytics analytics = - new leonardo.labutilities.qualitylabpro.entities.Analytics(); - analytics.setDate(record.date()); - analytics.setLevelLot(record.level_lot()); - analytics.setTestLot(record.test_lot()); - analytics.setName(record.name()); - analytics.setLevel(record.level()); - analytics.setValue(record.value()); - analytics.setMean(record.mean()); - analytics.setSd(record.sd()); - analytics.setUnitValue(record.unit_value()); - rulesValidatorComponent.validator(record.value(), record.mean(), record.sd()); - analytics.setRules(rulesValidatorComponent.getRules()); - analytics.setDescription(rulesValidatorComponent.getDescription()); - - return analytics; - } - - public static AnalyticsRecord toRecord(leonardo.labutilities.qualitylabpro.entities.Analytics analytics) { - return new AnalyticsRecord( - analytics.getId(), - analytics.getDate(), - analytics.getLevelLot(), - analytics.getTestLot(), - analytics.getName(), - analytics.getLevel(), - analytics.getValue(), - analytics.getMean(), - analytics.getSd(), - analytics.getUnitValue(), - analytics.getRules(), - analytics.getDescription() - ); - } -} diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 45859a5f..401144e6 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,20 +1,37 @@ +# =============================== +# = SERVER CONFIGURATION +# =============================== server.port=8080 +server.error.include-stacktrace=never + +# =============================== +# = LOGGING CONFIGURATION +# =============================== logging.level.leonardo=DEBUG +logging.level.org.apache.coyote.http11.Http11Processor=DEBUG + +# =============================== +# = MANAGEMENT CONFIGURATION +# =============================== management.endpoint.health.show-details=always -# Database config + +# =============================== +# = DATABASE CONFIGURATION +# =============================== spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.datasource.url=${SPRING_DATASOURCE_URL} spring.datasource.username=root spring.datasource.password=root spring.flyway.clean-disabled=false spring.jpa.show-sql=true -server.error.include-stacktrace=never -api.security.token.secret=${API_SECURITY_TOKEN_SECRET:2491} -api.security.issuer=${API_SECURITY_ISSUER:lab-api} spring.jpa.open-in-view=false spring.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.show_sql=false spring.jpa.properties.hibernate.format_sql=false + +# =============================== +# = EMAIL CONFIGURATION +# =============================== spring.mail.host=smtp.gmail.com spring.mail.port=587 spring.mail.username=${SPRING_MAIL_USERNAME} @@ -22,3 +39,9 @@ spring.mail.password=${SPRING_MAIL_PASSWORD} spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true email.to.send.list=${EMAIL_TO_SEND_LIST} + +# =============================== +# = SECURITY CONFIGURATION +# =============================== +api.security.token.secret=${API_SECURITY_TOKEN_SECRET} +api.security.issuer=${API_SECURITY_ISSUER} \ No newline at end of file diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index df6908d2..a5bcbf1d 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -8,6 +8,7 @@ server.error.include-stacktrace=never # = LOGGING CONFIGURATION # =============================== logging.level.leonardo=DEBUG +logging.level.org.apache.coyote.http11.Http11Processor=DEBUG # =============================== # = DATABASE CONFIGURATION diff --git a/src/main/resources/static/favicon.ico b/src/main/resources/static/favicon.ico new file mode 100644 index 00000000..0ce26907 Binary files /dev/null and b/src/main/resources/static/favicon.ico differ diff --git a/src/test/java/leonardo/labutilities/qualitylabpro/controllers/BiochemistryAnalyticsControllerTest.java b/src/test/java/leonardo/labutilities/qualitylabpro/controllers/BiochemistryAnalyticControllerTest.java similarity index 87% rename from src/test/java/leonardo/labutilities/qualitylabpro/controllers/BiochemistryAnalyticsControllerTest.java rename to src/test/java/leonardo/labutilities/qualitylabpro/controllers/BiochemistryAnalyticControllerTest.java index a16a9514..ebf7e839 100644 --- a/src/test/java/leonardo/labutilities/qualitylabpro/controllers/BiochemistryAnalyticsControllerTest.java +++ b/src/test/java/leonardo/labutilities/qualitylabpro/controllers/BiochemistryAnalyticControllerTest.java @@ -2,11 +2,11 @@ import leonardo.labutilities.qualitylabpro.configs.TestSecurityConfig; import leonardo.labutilities.qualitylabpro.controllers.analytics.BiochemistryAnalyticsController; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationRecord; -import leonardo.labutilities.qualitylabpro.dtos.analytics.UpdateAnalyticsMeanRecord; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationDTO; +import leonardo.labutilities.qualitylabpro.dtos.analytics.UpdateAnalyticsMeanDTO; import leonardo.labutilities.qualitylabpro.repositories.UserRepository; -import leonardo.labutilities.qualitylabpro.services.analytics.BiochemistryAnalyticsService; +import leonardo.labutilities.qualitylabpro.services.analytics.BiochemistryAnalyticService; import leonardo.labutilities.qualitylabpro.services.authentication.TokenService; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -37,7 +37,7 @@ @AutoConfigureMockMvc @AutoConfigureJsonTesters @ActiveProfiles("test") -public class BiochemistryAnalyticsControllerTest { +public class BiochemistryAnalyticControllerTest { @Autowired private MockMvc mockMvc; @@ -48,19 +48,19 @@ public class BiochemistryAnalyticsControllerTest { private UserRepository userRepository; @MockitoBean - private BiochemistryAnalyticsService biochemistryAnalyticsService; + private BiochemistryAnalyticService biochemistryAnalyticsService; @Autowired - private JacksonTester> jacksonGenericValuesRecord; + private JacksonTester> jacksonGenericValuesRecord; @Autowired - private JacksonTester jacksonUpdateAnalyticsMeanRecord; + private JacksonTester jacksonUpdateAnalyticsMeanRecord; @Test @DisplayName("It should return a list of all analytics by level") void getAllAnalytics_by_level_return_list() throws Exception { - List records = createSampleRecordList(); - Page page = new PageImpl<>(records); + List records = createSampleRecordList(); + Page page = new PageImpl<>(records); when(biochemistryAnalyticsService.findAnalyticsByNameInByLevel(anyList(), any(), any(), any(), any(Pageable.class))) @@ -79,7 +79,7 @@ void getAllAnalytics_by_level_return_list() throws Exception { @Test @DisplayName("It should return HTTP code 201 when analytics records are saved") void analytics_post_return_201() throws Exception { - List records = createSampleRecordList(); + List records = createSampleRecordList(); mockMvc.perform(post("/biochemistry-analytics").contentType(MediaType.APPLICATION_JSON) .content(jacksonGenericValuesRecord.write(records).getJson())) .andExpect(status().isCreated()); @@ -89,7 +89,7 @@ void analytics_post_return_201() throws Exception { @Test @DisplayName("It should return HTTP code 204 when analytics records are updated") void analytics_put_return_204() throws Exception { - var mockDto = new UpdateAnalyticsMeanRecord("Glucose", "PCCC1", "1234", 10.5); + var mockDto = new UpdateAnalyticsMeanDTO("Glucose", "PCCC1", "1234", 10.5); mockMvc.perform(patch("/biochemistry-analytics").contentType(MediaType.APPLICATION_JSON) .content(jacksonUpdateAnalyticsMeanRecord.write(mockDto).getJson())) .andExpect(status().isNoContent()); @@ -100,8 +100,8 @@ void analytics_put_return_204() throws Exception { @Test @DisplayName("It should return a list of all analytics with pagination") void getAllAnalytics_return_list() throws Exception { - List records = createSampleRecordList(); - Page page = new PageImpl<>(records); + List records = createSampleRecordList(); + Page page = new PageImpl<>(records); when(biochemistryAnalyticsService.findAnalyticsPagedByNameIn(anyList(), any(Pageable.class))) .thenReturn(page); @@ -120,7 +120,7 @@ void getAllAnalytics_return_list() throws Exception { @DisplayName("It should return analytics records for a date range") @WithMockUser(username = "admin", roles = {"ADMIN"}) void getAnalyticsByDateRange_return_analytics() throws Exception { - Page records = new PageImpl<>(createSampleRecordList()); + Page records = new PageImpl<>(createSampleRecordList()); when(biochemistryAnalyticsService.findAnalyticsByNameInAndDateBetween(anyList(), any(), any(), any())) .thenReturn(records); @@ -138,7 +138,7 @@ void getAnalyticsByDateRange_return_analytics() throws Exception { @DisplayName("It should return mean and standard deviation for a date range") @WithMockUser(username = "admin", roles = {"ADMIN"}) void getMeanAndStandardDeviation_return_result() throws Exception { - MeanAndStdDeviationRecord result = new MeanAndStdDeviationRecord(10.5, 2.3); + MeanAndStdDeviationDTO result = new MeanAndStdDeviationDTO(10.5, 2.3); when(biochemistryAnalyticsService.calculateMeanAndStandardDeviation(any(), any(), any(), any())).thenReturn(result); diff --git a/src/test/java/leonardo/labutilities/qualitylabpro/controllers/CoagulationAnalyticsControllerTest.java b/src/test/java/leonardo/labutilities/qualitylabpro/controllers/CoagulationAnalyticControllerTest.java similarity index 87% rename from src/test/java/leonardo/labutilities/qualitylabpro/controllers/CoagulationAnalyticsControllerTest.java rename to src/test/java/leonardo/labutilities/qualitylabpro/controllers/CoagulationAnalyticControllerTest.java index 2ee8ae86..84fb80c7 100644 --- a/src/test/java/leonardo/labutilities/qualitylabpro/controllers/CoagulationAnalyticsControllerTest.java +++ b/src/test/java/leonardo/labutilities/qualitylabpro/controllers/CoagulationAnalyticControllerTest.java @@ -2,10 +2,10 @@ import leonardo.labutilities.qualitylabpro.configs.TestSecurityConfig; import leonardo.labutilities.qualitylabpro.controllers.analytics.CoagulationAnalyticsController; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationRecord; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationDTO; import leonardo.labutilities.qualitylabpro.repositories.UserRepository; -import leonardo.labutilities.qualitylabpro.services.analytics.CoagulationAnalyticsService; +import leonardo.labutilities.qualitylabpro.services.analytics.CoagulationAnalyticService; import leonardo.labutilities.qualitylabpro.services.authentication.TokenService; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -36,7 +36,7 @@ @AutoConfigureMockMvc @AutoConfigureJsonTesters @ActiveProfiles("test") -public class CoagulationAnalyticsControllerTest { +public class CoagulationAnalyticControllerTest { @Autowired private MockMvc mockMvc; @@ -48,16 +48,16 @@ public class CoagulationAnalyticsControllerTest { private UserRepository userRepository; @MockitoBean - private CoagulationAnalyticsService coagulationAnalyticsService; + private CoagulationAnalyticService coagulationAnalyticsService; @Autowired - private JacksonTester> jacksonGenericValuesRecord; + private JacksonTester> jacksonGenericValuesRecord; @Test @DisplayName("It should return a list of all analytics by level") void getAllAnalytics_by_level_return_list() throws Exception { - List records = createSampleRecordList(); - Page page = new PageImpl<>(records); + List records = createSampleRecordList(); + Page page = new PageImpl<>(records); when(coagulationAnalyticsService .findAnalyticsByNameInByLevel(anyList(), any(), any(), any(), any(Pageable.class))) @@ -76,7 +76,7 @@ void getAllAnalytics_by_level_return_list() throws Exception { @Test @DisplayName("It should return HTTP code 201 when analytics records are saved") void analytics_post_return_201() throws Exception { - List records = createSampleRecordList(); + List records = createSampleRecordList(); mockMvc.perform(post("/coagulation-analytics").contentType(MediaType.APPLICATION_JSON) .content(jacksonGenericValuesRecord.write(records).getJson())) .andExpect(status().isCreated()); @@ -86,8 +86,8 @@ void analytics_post_return_201() throws Exception { @Test @DisplayName("It should return a list of all analytics with pagination") void getAllAnalytics_return_list() throws Exception { - List records = createSampleRecordList(); - Page page = new PageImpl<>(records); + List records = createSampleRecordList(); + Page page = new PageImpl<>(records); when(coagulationAnalyticsService.findAnalyticsPagedByNameIn(anyList(), any(Pageable.class))) .thenReturn(page); @@ -104,8 +104,8 @@ void getAllAnalytics_return_list() throws Exception { @Test @DisplayName("It should return analytics records for a date range") void getAnalyticsByDateRange_return_analytics() throws Exception { - List records = createSampleRecordList(); - Page page = new PageImpl<>(records); + List records = createSampleRecordList(); + Page page = new PageImpl<>(records); when(coagulationAnalyticsService.findAnalyticsByNameInAndDateBetween(anyList(), any(), any(), any())) @@ -122,7 +122,7 @@ void getAnalyticsByDateRange_return_analytics() throws Exception { @Test @DisplayName("It should return mean and standard deviation for a date range") void getMeanAndStandardDeviation_return_result() throws Exception { - MeanAndStdDeviationRecord result = new MeanAndStdDeviationRecord(10.5, 2.3); + MeanAndStdDeviationDTO result = new MeanAndStdDeviationDTO(10.5, 2.3); when(coagulationAnalyticsService.calculateMeanAndStandardDeviation(any(), any(), any(), any())).thenReturn(result); diff --git a/src/test/java/leonardo/labutilities/qualitylabpro/controllers/HematologyAnalyticsControllerTest.java b/src/test/java/leonardo/labutilities/qualitylabpro/controllers/HematologyAnalyticControllerTest.java similarity index 88% rename from src/test/java/leonardo/labutilities/qualitylabpro/controllers/HematologyAnalyticsControllerTest.java rename to src/test/java/leonardo/labutilities/qualitylabpro/controllers/HematologyAnalyticControllerTest.java index 964588e3..f3211d75 100644 --- a/src/test/java/leonardo/labutilities/qualitylabpro/controllers/HematologyAnalyticsControllerTest.java +++ b/src/test/java/leonardo/labutilities/qualitylabpro/controllers/HematologyAnalyticControllerTest.java @@ -2,10 +2,10 @@ import leonardo.labutilities.qualitylabpro.configs.TestSecurityConfig; import leonardo.labutilities.qualitylabpro.controllers.analytics.HematologyAnalyticsController; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationRecord; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.dtos.analytics.MeanAndStdDeviationDTO; import leonardo.labutilities.qualitylabpro.repositories.UserRepository; -import leonardo.labutilities.qualitylabpro.services.analytics.HematologyAnalyticsService; +import leonardo.labutilities.qualitylabpro.services.analytics.HematologyAnalyticService; import leonardo.labutilities.qualitylabpro.services.authentication.TokenService; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -36,7 +36,7 @@ @AutoConfigureMockMvc @AutoConfigureJsonTesters @ActiveProfiles("test") -public class HematologyAnalyticsControllerTest { +public class HematologyAnalyticControllerTest { @MockitoBean private TokenService tokenService; @@ -48,16 +48,16 @@ public class HematologyAnalyticsControllerTest { private MockMvc mockMvc; @MockitoBean - private HematologyAnalyticsService hematologyAnalyticsService; + private HematologyAnalyticService hematologyAnalyticsService; @Autowired - private JacksonTester> jacksonGenericValuesRecord; + private JacksonTester> jacksonGenericValuesRecord; @Test @DisplayName("It should return a list of all analytics by level") void getAllAnalytics_by_level_return_list() throws Exception { - List records = createSampleRecordList(); - Page page = new PageImpl<>(records); + List records = createSampleRecordList(); + Page page = new PageImpl<>(records); when(hematologyAnalyticsService .findAnalyticsByNameInByLevel(anyList(), any(), any(), any(), any(Pageable.class))) @@ -76,7 +76,7 @@ void getAllAnalytics_by_level_return_list() throws Exception { @Test @DisplayName("It should return HTTP code 201 when analytics records are saved") void analytics_post_return_201() throws Exception { - List records = createSampleRecordList(); + List records = createSampleRecordList(); mockMvc.perform(post("/hematology-analytics").contentType(MediaType.APPLICATION_JSON) .content(jacksonGenericValuesRecord.write(records).getJson())) .andExpect(status().isCreated()); @@ -86,8 +86,8 @@ void analytics_post_return_201() throws Exception { @Test @DisplayName("It should return a list of all analytics with pagination") void getAllAnalytics_return_list() throws Exception { - List records = createSampleRecordList(); - Page page = new PageImpl<>(records); + List records = createSampleRecordList(); + Page page = new PageImpl<>(records); when(hematologyAnalyticsService.findAnalyticsPagedByNameIn(anyList(), any(Pageable.class))) .thenReturn(page); @@ -105,8 +105,8 @@ void getAllAnalytics_return_list() throws Exception { @Test @DisplayName("It should return analytics records for a date range") void getAnalyticsByDateRange_return_analytics() throws Exception { - List records = createSampleRecordList(); - Page page = new PageImpl<>(records); + List records = createSampleRecordList(); + Page page = new PageImpl<>(records); when(hematologyAnalyticsService.findAnalyticsByNameInAndDateBetween(anyList(), any(), any(), any())) .thenReturn(page); @@ -122,7 +122,7 @@ void getAnalyticsByDateRange_return_analytics() throws Exception { @Test @DisplayName("It should return mean and standard deviation for a date range") void getMeanAndStandardDeviation_return_result() throws Exception { - MeanAndStdDeviationRecord result = new MeanAndStdDeviationRecord(10.5, 2.3); + MeanAndStdDeviationDTO result = new MeanAndStdDeviationDTO(10.5, 2.3); when(hematologyAnalyticsService.calculateMeanAndStandardDeviation(any(), any(), any(), any())).thenReturn(result); diff --git a/src/test/java/leonardo/labutilities/qualitylabpro/controllers/UsersControllerTest.java b/src/test/java/leonardo/labutilities/qualitylabpro/controllers/UsersControllerTest.java index 0b730420..d344add4 100644 --- a/src/test/java/leonardo/labutilities/qualitylabpro/controllers/UsersControllerTest.java +++ b/src/test/java/leonardo/labutilities/qualitylabpro/controllers/UsersControllerTest.java @@ -2,11 +2,11 @@ import leonardo.labutilities.qualitylabpro.configs.TestSecurityConfig; import leonardo.labutilities.qualitylabpro.controllers.users.UsersController; -import leonardo.labutilities.qualitylabpro.dtos.authentication.LoginUserRecord; -import leonardo.labutilities.qualitylabpro.dtos.authentication.TokenJwtRecord; -import leonardo.labutilities.qualitylabpro.dtos.users.RecoverPasswordRecord; -import leonardo.labutilities.qualitylabpro.dtos.users.UpdatePasswordRecord; -import leonardo.labutilities.qualitylabpro.dtos.users.UsersRecord; +import leonardo.labutilities.qualitylabpro.dtos.authentication.LoginUserDTO; +import leonardo.labutilities.qualitylabpro.dtos.authentication.TokenJwtDTO; +import leonardo.labutilities.qualitylabpro.dtos.users.RecoverPasswordDTO; +import leonardo.labutilities.qualitylabpro.dtos.users.UpdatePasswordDTO; +import leonardo.labutilities.qualitylabpro.dtos.users.UsersDTO; import leonardo.labutilities.qualitylabpro.entities.User; import leonardo.labutilities.qualitylabpro.enums.UserRoles; import leonardo.labutilities.qualitylabpro.repositories.UserRepository; @@ -62,44 +62,44 @@ class UsersControllerTest { private UserRepository userRepository; @Autowired - private JacksonTester usersRecordJacksonTester; + private JacksonTester usersRecordJacksonTester; @Autowired - private JacksonTester loginRecordJacksonTester; + private JacksonTester loginRecordJacksonTester; @Autowired - private JacksonTester updatePasswordRecordJacksonTester; + private JacksonTester updatePasswordRecordJacksonTester; @Autowired - private JacksonTester recoverPasswordRecordJacksonTester; + private JacksonTester recoverPasswordRecordJacksonTester; @Test @DisplayName("Should return 204 when signing up a new user") void signUp_return_204() throws Exception { - UsersRecord usersRecord = new UsersRecord("testUser", "Marmota2024@", "test@example.com"); + UsersDTO usersDTO = new UsersDTO("testUser", "Marmota2024@", "test@example.com"); User user = new User("testUser", "password", "test@example.com", UserRoles.USER); when(userService.signUp(anyString(), anyString(), anyString())).thenReturn(user); mockMvc.perform(post("/users/sign-up") .contentType(MediaType.APPLICATION_JSON) - .content(usersRecordJacksonTester.write(usersRecord).getJson())) + .content(usersRecordJacksonTester.write(usersDTO).getJson())) .andExpect(status().isNoContent()) .andExpect(jsonPath("$.username").value("testUser")) .andExpect(jsonPath("$.email").value("test@example.com")); - verify(userService).signUp(usersRecord.username(), usersRecord.password(), usersRecord.email()); + verify(userService).signUp(usersDTO.username(), usersDTO.password(), usersDTO.email()); } @Test @DisplayName("Should return 200 and call userService.signIn when signing in") void signIn_shouldReturn200AndCallUserService() throws Exception { // Arrange - LoginUserRecord loginRecord = new LoginUserRecord("test@example.com", "password"); - TokenJwtRecord tokenJwtRecord = new TokenJwtRecord("TokenJwt"); + LoginUserDTO loginRecord = new LoginUserDTO("test@example.com", "password"); + TokenJwtDTO tokenJwtDTO = new TokenJwtDTO("TokenJwt"); when(userService.signIn(loginRecord.email(), loginRecord.password())) - .thenReturn(tokenJwtRecord); + .thenReturn(tokenJwtDTO); mockMvc.perform(post("/users/sign-in") .contentType(MediaType.APPLICATION_JSON) @@ -115,20 +115,20 @@ void signIn_shouldReturn200AndCallUserService() throws Exception { @Test @DisplayName("Should return 204 when requesting password recovery") void forgotPassword_return_204() throws Exception { - UsersRecord usersRecord = new UsersRecord("testUser", "Mandrake2024@", "test@example.com"); + UsersDTO usersDTO = new UsersDTO("testUser", "Mandrake2024@", "test@example.com"); mockMvc.perform(post("/users/password/forgot-password") .contentType(MediaType.APPLICATION_JSON) - .content(usersRecordJacksonTester.write(usersRecord).getJson())) + .content(usersRecordJacksonTester.write(usersDTO).getJson())) .andExpect(status().isNoContent()); - verify(userService).recoverPassword(usersRecord.username(), usersRecord.email()); + verify(userService).recoverPassword(usersDTO.username(), usersDTO.email()); } @Test @DisplayName("Should return 204 when changing password with recovery token") void changePassword_return_204() throws Exception { - RecoverPasswordRecord recoverRecord = new RecoverPasswordRecord( + RecoverPasswordDTO recoverRecord = new RecoverPasswordDTO( "test@example.com", "tempPassword", "newPassword"); mockMvc.perform(patch("/users/password/recover") @@ -156,7 +156,7 @@ void updatePassword_return_204() throws Exception { SecurityContextHolder.setContext(securityContext); final var auth = (User) authentication.getPrincipal(); - UpdatePasswordRecord updateRecord = new UpdatePasswordRecord + UpdatePasswordDTO updateRecord = new UpdatePasswordDTO (auth.getUsername(), auth.getEmail(), "oldPassword", "newPassword"); mockMvc.perform(patch("/users/password") @@ -176,7 +176,7 @@ void updatePassword_return_204() throws Exception { @Test @DisplayName("Should return 400 when signing up with invalid data") void signUp_with_invalid_data_return_400() throws Exception { - UsersRecord invalidRecord = new UsersRecord("", "", "invalid-email"); + UsersDTO invalidRecord = new UsersDTO("", "", "invalid-email"); mockMvc.perform(post("/users/sign-up") .contentType(MediaType.APPLICATION_JSON) @@ -187,7 +187,7 @@ void signUp_with_invalid_data_return_400() throws Exception { @Test @DisplayName("Should return 401 when signing in with invalid credentials") void signIn_with_invalid_credentials_return_401() throws Exception { - LoginUserRecord loginRecord = new LoginUserRecord("test@example.com", "wrongpassword"); + LoginUserDTO loginRecord = new LoginUserDTO("test@example.com", "wrongpassword"); when(userService.signIn(any(), any())) .thenThrow(new BadCredentialsException("Authentication failed at")); diff --git a/src/test/java/leonardo/labutilities/qualitylabpro/repositories/AnalyticsRepositoryTest.java b/src/test/java/leonardo/labutilities/qualitylabpro/repositories/AnalyticRepositoryTest.java similarity index 80% rename from src/test/java/leonardo/labutilities/qualitylabpro/repositories/AnalyticsRepositoryTest.java rename to src/test/java/leonardo/labutilities/qualitylabpro/repositories/AnalyticRepositoryTest.java index a4eb6896..031eb272 100644 --- a/src/test/java/leonardo/labutilities/qualitylabpro/repositories/AnalyticsRepositoryTest.java +++ b/src/test/java/leonardo/labutilities/qualitylabpro/repositories/AnalyticRepositoryTest.java @@ -2,11 +2,11 @@ import jakarta.persistence.EntityManager; import jakarta.persistence.Transient; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.entities.Analytics; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.entities.Analytic; import leonardo.labutilities.qualitylabpro.utils.components.RulesValidatorComponent; import leonardo.labutilities.qualitylabpro.utils.constants.AvailableBiochemistryAnalytics; -import leonardo.labutilities.qualitylabpro.utils.mappers.AnalyticsMapper; +import leonardo.labutilities.qualitylabpro.utils.mappers.AnalyticMapper; import org.flywaydb.core.Flyway; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -31,7 +31,7 @@ @DataJpaTest @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) @ActiveProfiles("test") -class AnalyticsRepositoryTest { +class AnalyticRepositoryTest { @Autowired private static final List ANALYTICS_NAME_LIST = new AvailableBiochemistryAnalytics().availableBioAnalytics(); @@ -54,15 +54,15 @@ static void setupDatabase(@Autowired Flyway flyway) { @BeforeEach void setupTestData() { - Analytics analytics = new Analytics(createSampleRecord(), rulesValidatorComponent); - repository.save(analytics); + Analytic analytic = new Analytic(createSampleRecord(), rulesValidatorComponent); + repository.save(analytic); } @Test() - @DisplayName("Should find all Analytics by level") + @DisplayName("Should find all Analytic by level") void testFindAllByLevel() { PageRequest pageable = PageRequest.of(0, 10); - List results = + List results = repository .findByNameInAndLevelAndDateBetween(ANALYTICS_NAME_LIST, "PCCC1", testDate.minusDays(1), testDate.plusDays(1), pageable) @@ -72,15 +72,15 @@ void testFindAllByLevel() { } @Test - @DisplayName("Should update Analytics.LevelLot by name,level and levelLot and return void") + @DisplayName("Should update Analytic.LevelLot by name,level and levelLot and return void") void testUpdateLevelLotByNameAndLevelAndLevelLot() { repository.updateMeanByNameAndLevelAndLevelLot("ALB2", "PCCC1", "0774693", 3.25); entityManager.clear(); - Analytics analytics = repository + Analytic analytic = repository .findByNameAndLevelAndLevelLot(PageRequest.of(0, 10), "ALB2", "PCCC1", "0774693") .get(0); - System.out.println(analytics.getMean()); - assertThat(analytics.getMean()).isEqualTo(3.25); + System.out.println(analytic.getMean()); + assertThat(analytic.getMean()).isEqualTo(3.25); } @Test @@ -94,8 +94,8 @@ void testExistsByName() { @DisplayName("Should find all analytics by name with pagination") void testFindAllByName() { PageRequest pageable = PageRequest.of(0, 10); - List results = repository.findByName("ALB2", pageable).stream() - .map(AnalyticsMapper::toRecord).toList(); + List results = repository.findByName("ALB2", pageable).stream() + .map(AnalyticMapper::toRecord).toList(); assertThat(results).isNotEmpty(); assertThat(results.getFirst().name()).isEqualTo("ALB2"); } @@ -113,8 +113,8 @@ void testExistsByDateAndLevelAndName() { void testFindAllByNameAndLevel() { PageRequest pageable = PageRequest.of(0, 10); - List results = repository.findByNameAndLevel(pageable, "ALB2", "PCCC1") - .stream().map(AnalyticsMapper::toRecord).toList(); + List results = repository.findByNameAndLevel(pageable, "ALB2", "PCCC1") + .stream().map(AnalyticMapper::toRecord).toList(); assertThat(results).isNotEmpty(); assertThat(results.getFirst().name()).isEqualTo("ALB2"); @@ -127,7 +127,7 @@ void testFindAllByNameInAndDateBetween() { setupTestData(); List names = List.of("ALB2"); - Page results = repository.findByNameInAndDateBetween(names, + Page results = repository.findByNameInAndDateBetween(names, testDate.minusDays(1), testDate.plusDays(1), Pageable.unpaged()); assertThat(results).isNotEmpty(); @@ -141,8 +141,8 @@ void testFindAllByNameIn() { List names = List.of("ALB2"); PageRequest pageable = PageRequest.of(0, 10); - List results = repository.findByNameIn(names, pageable).stream() - .map(AnalyticsMapper::toRecord).toList(); + List results = repository.findByNameIn(names, pageable).stream() + .map(AnalyticMapper::toRecord).toList(); assertThat(results).isNotEmpty(); assertThat(results.getFirst().name()).isEqualTo("ALB2"); @@ -154,10 +154,10 @@ void testFindAllByNameAndLevelAndDateBetween() { setupTestData(); PageRequest pageable = PageRequest.of(0, 10); - List results = repository + List results = repository .findByNameAndLevelAndDateBetween("ALB2", "PCCC1", testDate.minusDays(1), testDate.plusDays(1), pageable) - .stream().map(AnalyticsMapper::toRecord).toList(); + .stream().map(AnalyticMapper::toRecord).toList(); assertThat(results).isNotEmpty(); assertThat(results.getFirst().name()).isEqualTo("ALB2"); @@ -168,9 +168,9 @@ void testFindAllByNameAndLevelAndDateBetween() { @DisplayName("Should find all by date range") void testFindAllByDateBetween() { setupTestData(); - List results = + List results = repository.findByDateBetween(testDate.minusDays(1), testDate.plusDays(1)).stream() - .map(AnalyticsMapper::toRecord).toList(); + .map(AnalyticMapper::toRecord).toList(); assertThat(results).isNotEmpty(); } @@ -180,10 +180,10 @@ void testFindAllByNameAndDateBetweenGroupByLevel() { setupTestData(); PageRequest pageable = PageRequest.of(0, 10); - List results = repository + List results = repository .findByNameAndDateBetweenGroupByLevel("ALB2", testDate.minusDays(1), testDate.plusDays(1), pageable) - .stream().map(AnalyticsMapper::toRecord).toList(); + .stream().map(AnalyticMapper::toRecord).toList(); assertThat(results).isNotEmpty(); assertThat(results.getFirst().name()).isEqualTo("ALB2"); diff --git a/src/test/java/leonardo/labutilities/qualitylabpro/services/AnalyticsHelperServiceTests.java b/src/test/java/leonardo/labutilities/qualitylabpro/services/AnalyticHelperServiceTests.java similarity index 70% rename from src/test/java/leonardo/labutilities/qualitylabpro/services/AnalyticsHelperServiceTests.java rename to src/test/java/leonardo/labutilities/qualitylabpro/services/AnalyticHelperServiceTests.java index d8168676..b3433511 100644 --- a/src/test/java/leonardo/labutilities/qualitylabpro/services/AnalyticsHelperServiceTests.java +++ b/src/test/java/leonardo/labutilities/qualitylabpro/services/AnalyticHelperServiceTests.java @@ -1,17 +1,17 @@ package leonardo.labutilities.qualitylabpro.services; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; -import leonardo.labutilities.qualitylabpro.dtos.analytics.GroupedValuesByLevel; -import leonardo.labutilities.qualitylabpro.dtos.analytics.UpdateAnalyticsMeanRecord; -import leonardo.labutilities.qualitylabpro.entities.Analytics; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; +import leonardo.labutilities.qualitylabpro.dtos.analytics.GroupedValuesByLevelDTO; +import leonardo.labutilities.qualitylabpro.dtos.analytics.UpdateAnalyticsMeanDTO; +import leonardo.labutilities.qualitylabpro.entities.Analytic; import leonardo.labutilities.qualitylabpro.repositories.AnalyticsRepository; -import leonardo.labutilities.qualitylabpro.services.analytics.AnalyticsHelperService; +import leonardo.labutilities.qualitylabpro.services.analytics.AnalyticHelperService; import leonardo.labutilities.qualitylabpro.services.email.EmailService; import leonardo.labutilities.qualitylabpro.utils.components.ControlRulesValidators; import leonardo.labutilities.qualitylabpro.utils.components.RulesValidatorComponent; import leonardo.labutilities.qualitylabpro.utils.constants.AvailableBiochemistryAnalytics; import leonardo.labutilities.qualitylabpro.utils.exception.CustomGlobalErrorHandling; -import leonardo.labutilities.qualitylabpro.utils.mappers.AnalyticsMapper; +import leonardo.labutilities.qualitylabpro.utils.mappers.AnalyticMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -30,14 +30,14 @@ import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -class AnalyticsHelperServiceTests { +class AnalyticHelperServiceTests { private static final List ANALYTICS_NAME_LIST = new AvailableBiochemistryAnalytics().availableBioAnalytics(); @Mock private AnalyticsRepository analyticsRepository; @Mock - private AnalyticsHelperService analyticsHelperService; + private AnalyticHelperService analyticHelperService; @Mock private EmailService emailService; @Mock @@ -46,23 +46,23 @@ class AnalyticsHelperServiceTests { @BeforeEach void setUp() { try (AutoCloseable closeable = MockitoAnnotations.openMocks(this)) { - analyticsHelperService = new AnalyticsHelperService(analyticsRepository, emailService, + analyticHelperService = new AnalyticHelperService(analyticsRepository, emailService, controlRulesValidators) { @Override - public List findAnalyticsByNameAndLevel(Pageable pageable, - String name, String level) { + public List findAnalyticsByNameAndLevel(Pageable pageable, + String name, String level) { return analyticsRepository.findByNameAndLevel(pageable, name, level).stream() - .map(AnalyticsMapper::toRecord).toList(); + .map(AnalyticMapper::toRecord).toList(); } @Override - public List findAnalyticsByNameAndLevelAndDate(String name, - String level, LocalDateTime dateStart, LocalDateTime dateEnd) { + public List findAnalyticsByNameAndLevelAndDate(String name, + String level, LocalDateTime dateStart, LocalDateTime dateEnd) { return analyticsRepository .findByNameAndLevelAndDateBetween(name, level, dateStart, dateEnd, PageRequest.of(0, 200)) - .stream().map(AnalyticsMapper::toRecord).toList(); + .stream().map(AnalyticMapper::toRecord).toList(); } }; } catch (Exception e) { @@ -78,14 +78,14 @@ public List findAnalyticsByNameAndLevelAndDate(String name, // LocalDateTime startDate = LocalDateTime.of(2024, 1, 1, 0, 0); // LocalDateTime endDate = LocalDateTime.of(2024, 1, 2, 0, 0); // - // List expectedRecords = - // createDateRangeRecords().stream().map(AnalyticsMapper::toEntity).toList(); + // List expectedRecords = + // createDateRangeRecords().stream().map(AnalyticMapper::toEntity).toList(); // Page // when(analyticsRepository.findByNameInAndLevelAndDateBetween(mockList, mockLevel, startDate, // endDate, mockPageable)) // .thenReturn(expectedRecords); // - // analyticsHelperService.findAnalyticsByNameInByLevelBaseMethod(mockList, mockLevel, startDate, + // analyticHelperService.findAnalyticsByNameInByLevelBaseMethod(mockList, mockLevel, startDate, // endDate, mockPageable); // verify(analyticsRepository).findByNameInAndLevelAndDateBetween(mockList, mockLevel, // startDate, endDate, mockPageable); @@ -93,8 +93,8 @@ public List findAnalyticsByNameAndLevelAndDate(String name, @Test public void updateAnalyticsMean() { - var mockDto = new UpdateAnalyticsMeanRecord("Glucose", "PCCC1", "076587", 1.0); - analyticsHelperService.updateAnalyticsMeanByNameAndLevelAndLevelLot(mockDto.name(), + var mockDto = new UpdateAnalyticsMeanDTO("Glucose", "PCCC1", "076587", 1.0); + analyticHelperService.updateAnalyticsMeanByNameAndLevelAndLevelLot(mockDto.name(), mockDto.level(), mockDto.levelLot(), mockDto.mean()); verify(analyticsRepository).updateMeanByNameAndLevelAndLevelLot(mockDto.name(), mockDto.level(), mockDto.levelLot(), mockDto.mean()); @@ -103,16 +103,16 @@ public void updateAnalyticsMean() { @Test void shouldValidateRulesProcessedByRulesValidatorComponent() { // Arrange: create sample input records - List records = createSampleRecordList(); + List records = createSampleRecordList(); RulesValidatorComponent rulesValidatorComponent = new RulesValidatorComponent(); - // Act: convert the records to AnalyticsRecord using the validation component - List analytics = records.stream() - .map(values -> new Analytics(values, rulesValidatorComponent)).toList(); + // Act: convert the records to AnalyticsDTO using the validation component + List analytics = records.stream() + .map(values -> new Analytic(values, rulesValidatorComponent)).toList(); // Assert: validate the rules generated by the component - assertEquals(records.stream().map(AnalyticsRecord::rules).toList(), - analytics.stream().map(Analytics::getRules).toList(), """ + assertEquals(records.stream().map(AnalyticsDTO::rules).toList(), + analytics.stream().map(Analytic::getRules).toList(), """ The rules processed by the \ RulesValidatorComponent should match the input\ rules"""); @@ -120,35 +120,35 @@ void shouldValidateRulesProcessedByRulesValidatorComponent() { @Test void saveNewAnalyticsRecords_WithValidRecords_ShouldSaveSuccessfully() { - List records = createSampleRecordList(); + List records = createSampleRecordList(); when(analyticsRepository.existsByDateAndLevelAndName(any(), any(), any())) .thenReturn(false); when(analyticsRepository.saveAll(any())).thenReturn(null); - assertDoesNotThrow(() -> analyticsHelperService.saveNewAnalyticsRecords(records)); + assertDoesNotThrow(() -> analyticHelperService.saveNewAnalyticsRecords(records)); verify(analyticsRepository, times(1)).saveAll(any()); } @Test void saveNewAnalyticsRecords_WithDuplicateRecords_ShouldThrowException() { - List records = createSampleRecordList(); + List records = createSampleRecordList(); when(analyticsRepository.existsByDateAndLevelAndName(any(), any(), any())).thenReturn(true); assertThrows(CustomGlobalErrorHandling.DataIntegrityViolationException.class, - () -> analyticsHelperService.saveNewAnalyticsRecords(records)); + () -> analyticHelperService.saveNewAnalyticsRecords(records)); verify(analyticsRepository, never()).saveAll(any()); } @Test void findById_WithValidId_ShouldReturnRecord() { Long id = 1L; - Analytics analytics = new Analytics(); - when(analyticsRepository.findById(id)).thenReturn(Optional.of(analytics)); + Analytic analytic = new Analytic(); + when(analyticsRepository.findById(id)).thenReturn(Optional.of(analytic)); - Analytics result = AnalyticsMapper.toEntity(analyticsHelperService.findOneById(id)); + Analytic result = AnalyticMapper.toEntity(analyticHelperService.findOneById(id)); assertNotNull(result); - assertEquals(analytics, result); + assertEquals(analytic, result); } @Test @@ -157,7 +157,7 @@ void findById_WithInvalidId_ShouldThrowException() { when(analyticsRepository.findById(id)).thenReturn(Optional.empty()); assertThrows(CustomGlobalErrorHandling.ResourceNotFoundException.class, - () -> analyticsHelperService.findOneById(id)); + () -> analyticHelperService.findOneById(id)); } @Test @@ -165,15 +165,15 @@ void findAnalyticsByNameAndLevel_WithFilters_ShouldReturnFilteredRecords() { String name = "Glucose"; String level = "Normal"; Pageable pageable = PageRequest.of(0, 10); - List expectedRecords = createSampleRecordList().stream() + List expectedRecords = createSampleRecordList().stream() .filter(r -> r.name().equals(name) && r.level().equals(level)).toList().stream() - .map(AnalyticsMapper::toEntity).toList(); + .map(AnalyticMapper::toEntity).toList(); when(analyticsRepository.findByNameAndLevel(pageable, name, level)) .thenReturn(expectedRecords); - List result = - analyticsHelperService.findAnalyticsByNameAndLevel(pageable, name, level); + List result = + analyticHelperService.findAnalyticsByNameAndLevel(pageable, name, level); assertEquals(expectedRecords.size(), result.size()); verify(analyticsRepository).findByNameAndLevel(pageable, name, level); @@ -185,13 +185,13 @@ void findAllAnalyticsByNameAndLevelAndDate_WithDateRange_ShouldReturnFilteredRec String level = "Normal"; LocalDateTime startDate = LocalDateTime.of(2024, 1, 1, 0, 0); LocalDateTime endDate = LocalDateTime.of(2024, 1, 2, 0, 0); - List expectedRecords = - createDateRangeRecords().stream().map(AnalyticsMapper::toEntity).toList(); + List expectedRecords = + createDateRangeRecords().stream().map(AnalyticMapper::toEntity).toList(); when(analyticsRepository.findByNameAndLevelAndDateBetween(eq(name), eq(level), eq(startDate), eq(endDate), any(Pageable.class))).thenReturn(expectedRecords); - List result = analyticsHelperService + List result = analyticHelperService .findAnalyticsByNameAndLevelAndDate(name, level, startDate, endDate); assertNotNull(result); @@ -204,7 +204,7 @@ void deleteAnalyticsById_WithValidId_ShouldDelete() { when(analyticsRepository.existsById(id)).thenReturn(true); doNothing().when(analyticsRepository).deleteById(id); - assertDoesNotThrow(() -> analyticsHelperService.deleteAnalyticsById(id)); + assertDoesNotThrow(() -> analyticHelperService.deleteAnalyticsById(id)); verify(analyticsRepository).deleteById(id); } @@ -215,7 +215,7 @@ void deleteAnalyticsById_WithInvalidId_ShouldThrowException() { when(analyticsRepository.existsById(id)).thenReturn(false); assertThrows(CustomGlobalErrorHandling.ResourceNotFoundException.class, - () -> analyticsHelperService.deleteAnalyticsById(id)); + () -> analyticHelperService.deleteAnalyticsById(id)); verify(analyticsRepository, never()).deleteById(id); } @@ -224,7 +224,7 @@ void ensureNameExists_WithValidName_ShouldNotThrowException() { String name = "Glucose"; when(analyticsRepository.existsByName(name.toUpperCase())).thenReturn(true); - assertDoesNotThrow(() -> analyticsHelperService.ensureNameExists(name)); + assertDoesNotThrow(() -> analyticHelperService.ensureNameExists(name)); } @Test @@ -233,7 +233,7 @@ void ensureNameExists_WithInvalidName_ShouldThrowException() { when(analyticsRepository.existsByName(name.toUpperCase())).thenReturn(false); assertThrows(CustomGlobalErrorHandling.ResourceNotFoundException.class, - () -> analyticsHelperService.ensureNameExists(name)); + () -> analyticHelperService.ensureNameExists(name)); } @Test @@ -243,29 +243,29 @@ void ensureNameNotExists_WithInvalidName_ShouldThrowException() { CustomGlobalErrorHandling.ResourceNotFoundException exception = assertThrows(CustomGlobalErrorHandling.ResourceNotFoundException.class, - () -> analyticsHelperService.ensureNameExists(name)); + () -> analyticHelperService.ensureNameExists(name)); - assertEquals("AnalyticsRecord by name not found", exception.getMessage()); + assertEquals("AnalyticsDTO by name not found", exception.getMessage()); } @Test void isAnalyticsNonExistent_WithNonExistentRecord_ShouldReturnTrue() { - AnalyticsRecord record = createSampleRecord(); + AnalyticsDTO record = createSampleRecord(); when(analyticsRepository.existsByDateAndLevelAndName(record.date(), record.level(), record.name())).thenReturn(false); - boolean result = analyticsHelperService.isAnalyticsNonExistent(record); + boolean result = analyticHelperService.isAnalyticsNonExistent(record); assertTrue(result); } @Test void isAnalyticsNonExistent_WithExistentRecord_ShouldReturnFalse() { - AnalyticsRecord record = createSampleRecord(); + AnalyticsDTO record = createSampleRecord(); when(analyticsRepository.existsByDateAndLevelAndName(record.date(), record.level(), record.name())).thenReturn(true); - boolean result = analyticsHelperService.isAnalyticsNonExistent(record); + boolean result = analyticHelperService.isAnalyticsNonExistent(record); assertFalse(result); } @@ -275,14 +275,14 @@ void findGroupedAnalyticsByLevel_WithValidInputs_ShouldReturnGroupedRecords() { String name = "Glucose"; LocalDateTime startDate = LocalDateTime.of(2024, 1, 1, 0, 0); LocalDateTime endDate = LocalDateTime.of(2024, 1, 2, 0, 0); - List records = - createSampleRecordList().stream().map(AnalyticsMapper::toEntity).toList(); + List records = + createSampleRecordList().stream().map(AnalyticMapper::toEntity).toList(); when(analyticsRepository.findByNameAndDateBetweenGroupByLevel(eq(name), eq(startDate), eq(endDate), any(Pageable.class))).thenReturn(records); - List result = - analyticsHelperService.findGroupedAnalyticsByLevel(name, startDate, endDate); + List result = + analyticHelperService.findGroupedAnalyticsByLevel(name, startDate, endDate); assertNotNull(result); assertFalse(result.isEmpty()); diff --git a/src/test/java/leonardo/labutilities/qualitylabpro/utils/AnalyticsHelperMocks.java b/src/test/java/leonardo/labutilities/qualitylabpro/utils/AnalyticsHelperMocks.java index 0fa96553..0bebb885 100644 --- a/src/test/java/leonardo/labutilities/qualitylabpro/utils/AnalyticsHelperMocks.java +++ b/src/test/java/leonardo/labutilities/qualitylabpro/utils/AnalyticsHelperMocks.java @@ -1,6 +1,6 @@ package leonardo.labutilities.qualitylabpro.utils; -import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsRecord; +import leonardo.labutilities.qualitylabpro.dtos.analytics.AnalyticsDTO; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; @@ -10,147 +10,147 @@ import java.util.List; public class AnalyticsHelperMocks { - public static AnalyticsRecord createSampleRecord() { - return new AnalyticsRecord(1L, LocalDateTime.of(2024, 12, 16, 7, 53), "0774693", + public static AnalyticsDTO createSampleRecord() { + return new AnalyticsDTO(1L, LocalDateTime.of(2024, 12, 16, 7, 53), "0774693", "608384", "ALB2", "PCCC1", 3.45, 3.35, 0.2, "g/dL", "Average", "Approved"); } - public static List createComprehensiveRecordList() { - List records = new ArrayList<>(); + public static List createComprehensiveRecordList() { + List records = new ArrayList<>(); LocalDateTime baseDate = LocalDateTime.of(2024, 12, 16, 7, 53); // Biochemistry Tests (PCCC1, PCCC2) - records.add(new AnalyticsRecord(1L, baseDate, "0774693", "608384", + records.add(new AnalyticsDTO(1L, baseDate, "0774693", "608384", "ALB2", "PCCC1", 3.45, 3.35, 0.2, "g/dL", "Average", "Approved")); - records.add(new AnalyticsRecord(2L, baseDate.plusMinutes(5), "0774693", "608384", + records.add(new AnalyticsDTO(2L, baseDate.plusMinutes(5), "0774693", "608384", "ALP2S", "PCCC2", 125.0, 120.0, 5.0, "U/L", "Average", "Approved")); - records.add(new AnalyticsRecord(3L, baseDate.plusMinutes(10), "0774693", "608384", + records.add(new AnalyticsDTO(3L, baseDate.plusMinutes(10), "0774693", "608384", "ASTL", "PCCC1", 32.5, 30.0, 2.0, "U/L", "+1s", "Approved")); - records.add(new AnalyticsRecord(4L, baseDate.plusMinutes(15), "0774693", "608384", + records.add(new AnalyticsDTO(4L, baseDate.plusMinutes(15), "0774693", "608384", "BILD2", "PCCC2", 0.8, 0.75, 0.05, "mg/dL", "Average", "Approved")); - records.add(new AnalyticsRecord(5L, baseDate.plusMinutes(20), "0774693", "608384", + records.add(new AnalyticsDTO(5L, baseDate.plusMinutes(20), "0774693", "608384", "CA2", "PCCC1", 9.2, 9.0, 0.3, "mg/dL", "Average", "Approved")); // Hematology Tests (LOW, NORMAL, HIGH) - records.add(new AnalyticsRecord(6L, baseDate.plusMinutes(25), "0774693", "608384", + records.add(new AnalyticsDTO(6L, baseDate.plusMinutes(25), "0774693", "608384", "WBC", "LOW", 3.5, 3.8, 0.2, "10^3/µL", "-2s", "Failed")); - records.add(new AnalyticsRecord(7L, baseDate.plusMinutes(30), "0774693", "608384", + records.add(new AnalyticsDTO(7L, baseDate.plusMinutes(30), "0774693", "608384", "RBC", "NORMAL", 4.8, 4.7, 0.1, "10^6/µL", "Average", "Approved")); - records.add(new AnalyticsRecord(8L, baseDate.plusMinutes(35), "0774693", "608384", + records.add(new AnalyticsDTO(8L, baseDate.plusMinutes(35), "0774693", "608384", "HGB", "HIGH", 16.8, 16.5, 0.3, "g/dL", "+2s", "Failed")); - records.add(new AnalyticsRecord(9L, baseDate.plusMinutes(40), "0774693", "608384", + records.add(new AnalyticsDTO(9L, baseDate.plusMinutes(40), "0774693", "608384", "PLT", "NORMAL", 250.0, 245.0, 10.0, "10^3/µL", "Average", "Approved")); // Additional Biochemistry with varied statuses - records.add(new AnalyticsRecord(10L, baseDate.plusMinutes(45), "0774693", "608384", + records.add(new AnalyticsDTO(10L, baseDate.plusMinutes(45), "0774693", "608384", "CHOL2", "PCCC2", 185.0, 180.0, 5.0, "mg/dL", "+1s", "Approved")); - records.add(new AnalyticsRecord(11L, baseDate.plusMinutes(50), "0774693", "608384", + records.add(new AnalyticsDTO(11L, baseDate.plusMinutes(50), "0774693", "608384", "GLUC3", "PCCC1", 95.0, 90.0, 3.0, "mg/dL", "Average", "Approved")); // Differential counts with percentages - records.add(new AnalyticsRecord(12L, baseDate.plusMinutes(55), "0774693", "608384", + records.add(new AnalyticsDTO(12L, baseDate.plusMinutes(55), "0774693", "608384", "NEU%", "NORMAL", 62.0, 60.0, 2.0, "%", "Average", "Approved")); - records.add(new AnalyticsRecord(13L, baseDate.plusHours(1), "0774693", "608384", + records.add(new AnalyticsDTO(13L, baseDate.plusHours(1), "0774693", "608384", "LYM%", "HIGH", 45.0, 40.0, 2.0, "%", "+2s", "Failed")); // Electrolytes - records.add(new AnalyticsRecord(14L, baseDate.plusMinutes(65), "0774693", "608384", + records.add(new AnalyticsDTO(14L, baseDate.plusMinutes(65), "0774693", "608384", "NA-I", "PCCC1", 140.0, 138.0, 2.0, "mmol/L", "Average", "Approved")); - records.add(new AnalyticsRecord(15L, baseDate.plusMinutes(70), "0774693", "608384", + records.add(new AnalyticsDTO(15L, baseDate.plusMinutes(70), "0774693", "608384", "K-I", "PCCC1", 4.2, 4.0, 0.2, "mmol/L", "Average", "Approved")); // Failed biochemistry tests - records.add(new AnalyticsRecord(16L, baseDate.plusMinutes(75), "0774693", "608384", + records.add(new AnalyticsDTO(16L, baseDate.plusMinutes(75), "0774693", "608384", "CREJ2", "PCCC2", 2.5, 1.8, 0.2, "mg/dL", "+3s", "Failed")); - records.add(new AnalyticsRecord(17L, baseDate.plusMinutes(80), "0774693", "608384", + records.add(new AnalyticsDTO(17L, baseDate.plusMinutes(80), "0774693", "608384", "UREL", "PCCC2", 85.0, 65.0, 5.0, "mg/dL", "+3s", "Failed")); return records; } - public static List createHematologyRecordList() { - List records = new ArrayList<>(); + public static List createHematologyRecordList() { + List records = new ArrayList<>(); LocalDateTime baseDate = LocalDateTime.of(2024, 12, 16, 8, 0); // Complete Blood Count - records.add(new AnalyticsRecord(1L, baseDate, "0774693", "608384", + records.add(new AnalyticsDTO(1L, baseDate, "0774693", "608384", "WBC", "NORMAL", 7.5, 7.2, 0.3, "10^3/µL", "Average", "Approved")); - records.add(new AnalyticsRecord(2L, baseDate, "0774693", "608384", + records.add(new AnalyticsDTO(2L, baseDate, "0774693", "608384", "RBC", "NORMAL", 5.2, 5.0, 0.2, "10^6/µL", "Average", "Approved")); - records.add(new AnalyticsRecord(3L, baseDate, "0774693", "608384", + records.add(new AnalyticsDTO(3L, baseDate, "0774693", "608384", "HGB", "NORMAL", 14.5, 14.0, 0.5, "g/dL", "Average", "Approved")); - records.add(new AnalyticsRecord(4L, baseDate, "0774693", "608384", + records.add(new AnalyticsDTO(4L, baseDate, "0774693", "608384", "HCT", "NORMAL", 42.0, 41.0, 1.0, "%", "Average", "Approved")); // RBC Indices - records.add(new AnalyticsRecord(5L, baseDate, "0774693", "608384", + records.add(new AnalyticsDTO(5L, baseDate, "0774693", "608384", "MCV", "NORMAL", 88.0, 87.0, 1.0, "fL", "Average", "Approved")); - records.add(new AnalyticsRecord(6L, baseDate, "0774693", "608384", + records.add(new AnalyticsDTO(6L, baseDate, "0774693", "608384", "MCH", "LOW", 27.0, 29.0, 1.0, "pg", "-2s", "Failed")); - records.add(new AnalyticsRecord(7L, baseDate, "0774693", "608384", + records.add(new AnalyticsDTO(7L, baseDate, "0774693", "608384", "MCHC", "HIGH", 36.0, 34.0, 1.0, "g/dL", "+2s", "Failed")); // Differential Counts - records.add(new AnalyticsRecord(8L, baseDate, "0774693", "608384", + records.add(new AnalyticsDTO(8L, baseDate, "0774693", "608384", "NEU#", "NORMAL", 4.5, 4.3, 0.2, "10^3/µL", "Average", "Approved")); - records.add(new AnalyticsRecord(9L, baseDate, "0774693", "608384", + records.add(new AnalyticsDTO(9L, baseDate, "0774693", "608384", "LYM#", "HIGH", 3.8, 3.0, 0.2, "10^3/µL", "+2s", "Failed")); return records; } - public static Page createAnalyticsRecordPage(Pageable pageable) { - List records = createSampleRecordList(); + public static Page createAnalyticsRecordPage(Pageable pageable) { + List records = createSampleRecordList(); return new PageImpl<>(records, pageable, records.size()); } - public static List createSampleRecordList() { - List records = new ArrayList<>(); + public static List createSampleRecordList() { + List records = new ArrayList<>(); // Normal level records - records.add(new AnalyticsRecord(1L, LocalDateTime.of(2024, 12, 16, 7, 53), "0774693", + records.add(new AnalyticsDTO(1L, LocalDateTime.of(2024, 12, 16, 7, 53), "0774693", "608384", "ALB2", "PCCC1", 3.45, 3.35, 0.2, "g/dL", "Average", "Approved")); - records.add(new AnalyticsRecord(2L, LocalDateTime.of(2024, 12, 16, 7, 53), "0774707", + records.add(new AnalyticsDTO(2L, LocalDateTime.of(2024, 12, 16, 7, 53), "0774707", "704991", "ALB2", "PCCC2", 4.85, 4.94, 0.3, "g/dL", "Average", "Approved")); // Failed records - records.add(new AnalyticsRecord(3L, LocalDateTime.of(2024, 12, 16, 8, 30), "0774707", + records.add(new AnalyticsDTO(3L, LocalDateTime.of(2024, 12, 16, 8, 30), "0774707", "704991", "ALTL", "PCCC2", 82.84, 110.0, 7.0, "U/L", "-3s", "Failed")); // Different analyte records - records.add(new AnalyticsRecord(4L, LocalDateTime.of(2024, 12, 16, 7, 54), "0774707", + records.add(new AnalyticsDTO(4L, LocalDateTime.of(2024, 12, 16, 7, 54), "0774707", "704991", "AMYL2", "PCCC2", 188.64, 187.0, 11.0, "U/L", "Average", "Approved")); return records; } - public static List createMultiAnalyteRecordList() { - List records = new ArrayList<>(); + public static List createMultiAnalyteRecordList() { + List records = new ArrayList<>(); // ALB2 record - records.add(new AnalyticsRecord(1L, LocalDateTime.of(2024, 12, 16, 7, 53), "0774693", + records.add(new AnalyticsDTO(1L, LocalDateTime.of(2024, 12, 16, 7, 53), "0774693", "608384", "ALB2", "PCCC1", 3.45, 3.35, 0.2, "g/dL", "Average", "Approved")); // ALTL record - records.add(new AnalyticsRecord(2L, LocalDateTime.of(2024, 12, 16, 9, 2), "0774693", + records.add(new AnalyticsDTO(2L, LocalDateTime.of(2024, 12, 16, 9, 2), "0774693", "608384", "ALTL", "PCCC1", 48.1, 46.8, 2.8, "U/L", "Average", "Approved")); // CHOL2 record - records.add(new AnalyticsRecord(3L, LocalDateTime.of(2024, 12, 16, 7, 56), "0774693", + records.add(new AnalyticsDTO(3L, LocalDateTime.of(2024, 12, 16, 7, 56), "0774693", "608384", "CHOL2", "PCCC1", 101.69, 104.0, 5.0, "mg/dL", "Average", "Approved" )); return records; } - public static List createDateRangeRecords() { - List records = new ArrayList<>(); + public static List createDateRangeRecords() { + List records = new ArrayList<>(); LocalDateTime baseDate = LocalDateTime.of(2024, 12, 16, 7, 53); // Add records across multiple timepoints for (int i = 0; i < 5; i++) { - records.add(new AnalyticsRecord((long) i + 1, baseDate.plusMinutes(i * 30), + records.add(new AnalyticsDTO((long) i + 1, baseDate.plusMinutes(i * 30), "0774693", "608384", "ALB2", "PCCC1", 3.45, 3.35, 0.2, "g/dL", "Average", "Approved")); } @@ -158,8 +158,8 @@ public static List createDateRangeRecords() { return records; } - public static AnalyticsRecord createOutOfRangeRecord() { - return new AnalyticsRecord(1L, LocalDateTime.of(2024, 12, 16, 8, 30), "0774707", + public static AnalyticsDTO createOutOfRangeRecord() { + return new AnalyticsDTO(1L, LocalDateTime.of(2024, 12, 16, 8, 30), "0774707", "704991", "ALTL", "PCCC2", 82.84, 110.0, 7.0, "U/L", "-3s", "Failed"); } }