From 1926982c687ed202ea942fa24485a071dc0d0897 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 4 Dec 2024 09:43:19 +0100 Subject: [PATCH 01/26] fix: improve manytoone relations in db (no link tables) --- .../contact/controller/AddressController.java | 13 ---- .../controller/ContactEventController.java | 25 +------ .../controller/CampaignController.java | 6 -- .../controller/PartitioningController.java | 17 ----- .../metadata/controller/SourceController.java | 20 ++---- .../metadata/controller/SurveyController.java | 6 -- .../controller/QuestioningController.java | 3 - .../query/controller/WebclientController.java | 64 +++++------------ .../QuestioningCommentController.java | 24 +------ .../QuestioningEventController.java | 72 +++++-------------- .../SurveyUnitCommentController.java | 18 +---- .../controller/SurveyUnitController.java | 17 ++--- .../contact/domain/Contact.java | 2 +- .../contact/domain/ContactEvent.java | 1 + .../metadata/domain/Campaign.java | 12 ++-- .../metadata/domain/CampaignEvent.java | 25 ------- .../metadata/domain/Owner.java | 6 +- .../metadata/domain/Partitioning.java | 1 + .../metadata/domain/Source.java | 6 +- .../metadata/domain/Support.java | 3 +- .../metadata/domain/Survey.java | 3 +- .../repository/CampaignEventRepository.java | 8 --- .../questioning/domain/Operator.java | 8 +-- .../questioning/domain/OperatorService.java | 2 +- .../questioning/domain/Questioning.java | 10 +-- .../domain/QuestioningAccreditation.java | 1 + .../domain/QuestioningComment.java | 3 + .../domain/QuestioningCommunication.java | 1 + .../questioning/domain/QuestioningEvent.java | 1 + .../questioning/domain/SurveyUnit.java | 4 +- .../questioning/domain/SurveyUnitComment.java | 3 + .../user/domain/SourceAccreditation.java | 13 +--- .../user/domain/User.java | 2 +- .../user/domain/UserEvent.java | 1 + .../service/impl/ContactServiceImpl.java | 17 ++--- .../metadata/service/CampaignService.java | 10 --- .../metadata/service/OwnerService.java | 6 -- .../metadata/service/SourceService.java | 3 - .../metadata/service/SupportService.java | 7 -- .../metadata/service/SurveyService.java | 3 - .../service/impl/CampaignServiceImpl.java | 44 ------------ .../service/impl/OwnerServiceImpl.java | 26 +------ .../service/impl/SourceServiceImpl.java | 29 -------- .../service/impl/SupportServiceImpl.java | 20 ------ .../service/impl/SurveyServiceImpl.java | 34 --------- .../service/QuestioningCommentService.java | 5 +- .../service/QuestioningEventService.java | 7 +- .../service/SurveyUnitCommentService.java | 8 +-- .../service/SurveyUnitService.java | 2 +- .../impl/QuestioningCommentServiceImpl.java | 12 +++- .../impl/QuestioningEventServiceImpl.java | 3 +- .../impl/SurveyUnitCommentServiceImpl.java | 19 +++-- .../service/impl/SurveyUnitServiceImpl.java | 8 +-- .../view/service/impl/ViewServiceImpl.java | 6 +- 54 files changed, 141 insertions(+), 529 deletions(-) delete mode 100644 platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/CampaignEvent.java delete mode 100644 platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/repository/CampaignEventRepository.java diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/AddressController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/AddressController.java index 381e51cd..590aaa5a 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/AddressController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/AddressController.java @@ -16,8 +16,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -26,8 +24,6 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; -import java.util.List; - @RestController @PreAuthorize(AuthorityPrivileges.HAS_MANAGEMENT_PRIVILEGES) @Tag(name = "1 - Contacts", description = "Enpoints to create, update, delete and find contacts") @@ -93,13 +89,4 @@ public ResponseEntity putAddress(@PathVariable("id") String id, } - class AddressPage extends PageImpl { - - private static final long serialVersionUID = -5570255373624396569L; - - public AddressPage(List content, Pageable pageable, long total) { - super(content, pageable, total); - } - } - } diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactEventController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactEventController.java index 510073ac..efb19552 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactEventController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactEventController.java @@ -12,8 +12,6 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.modelmapper.ModelMapper; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -23,8 +21,6 @@ import org.springframework.web.servlet.support.ServletUriComponentsBuilder; import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; @RestController(value = "contactEvents") @PreAuthorize(AuthorityPrivileges.HAS_USER_PRIVILEGES) @@ -63,13 +59,9 @@ public ResponseEntity> getContactContactEvents(@PathVariab @Deprecated(since = "2.6.0", forRemoval = true) public ResponseEntity postContactEvent(@RequestBody @Valid ContactEventDto contactEventDto) { - Contact contact = contactService.findByIdentifier(contactEventDto.getIdentifier()); + contactService.findByIdentifier(contactEventDto.getIdentifier()); ContactEvent contactEvent = convertToEntity(contactEventDto); ContactEvent newContactEvent = contactEventService.saveContactEvent(contactEvent); - Set setContactEvents = contact.getContactEvents(); - setContactEvents.add(newContactEvent); - contact.setContactEvents(setContactEvents); - contactService.saveContact(contact); HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.set(HttpHeaders.LOCATION, ServletUriComponentsBuilder.fromCurrentRequest().toUriString()); @@ -88,11 +80,7 @@ public ResponseEntity postContactEvent(@RequestBody @Valid Cont @ResponseStatus(HttpStatus.NO_CONTENT) @Deprecated(since = "2.6.0", forRemoval = true) public void deleteContactEvent(@PathVariable("id") Long id) { - ContactEvent contactEvent = contactEventService.findById(id); - Contact contact = contactEvent.getContact(); - contact.setContactEvents(contact.getContactEvents().stream().filter(ce -> !ce.equals(contactEvent)) - .collect(Collectors.toSet())); - contactService.saveContact(contact); + contactEventService.findById(id); contactEventService.deleteContactEvent(id); } @@ -107,14 +95,5 @@ private ContactEvent convertToEntity(ContactEventDto contactEventDto) { return modelMapper.map(contactEventDto, ContactEvent.class); } - class ContactEventPage extends PageImpl { - - private static final long serialVersionUID = 3619811755902956158L; - - public ContactEventPage(List content, Pageable pageable, long total) { - super(content, pageable, total); - } - } - } diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/CampaignController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/CampaignController.java index 31f011b0..23203989 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/CampaignController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/CampaignController.java @@ -180,9 +180,6 @@ public ResponseEntity putCampaign(@PathVariable("id") String id, @R } Campaign campaign = campaignService.insertOrUpdateCampaign(convertToEntity(campaignDto)); - Survey survey = campaign.getSurvey(); - survey.getCampaigns().add(campaign); - surveyService.insertOrUpdateSurvey(survey); return ResponseEntity.status(httpStatus).headers(responseHeaders).body(convertToDto(campaign)); } @@ -199,9 +196,6 @@ public void deleteCampaign(@PathVariable("id") String id) throws fr.insee.survey Campaign campaign = campaignService.findById(id); int nbQuestioningDeleted = 0; - Survey survey = campaign.getSurvey(); - survey.getCampaigns().remove(campaign); - surveyService.insertOrUpdateSurvey(survey); List uploadsCamp = uploadService.findAllByIdCampaign(id); campaignService.deleteCampaignById(id); Set listPartitionings = campaign.getPartitionings(); diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/PartitioningController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/PartitioningController.java index 69a298aa..e8e324b2 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/PartitioningController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/PartitioningController.java @@ -20,8 +20,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.modelmapper.ModelMapper; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -94,12 +92,7 @@ public ResponseEntity putPartitioning(@PathVariable("id") Strin log.info("Create partitioning with the id {}", partitioningDto.getId()); httpStatus = HttpStatus.CREATED; } - - partitioning = partitioningService.insertOrUpdatePartitioning(convertToEntity(partitioningDto)); - Campaign campaign = partitioning.getCampaign(); - campaign.getPartitionings().add(partitioning); - campaignService.insertOrUpdateCampaign(campaign); return ResponseEntity.status(httpStatus).headers(responseHeaders).body(convertToDto(partitioning)); } @@ -108,9 +101,6 @@ public ResponseEntity putPartitioning(@PathVariable("id") Strin @Transactional public void deletePartitioning(@PathVariable("id") String id) { Partitioning partitioning = partitioningService.findById(id); - Campaign campaign = partitioning.getCampaign(); - campaign.getPartitionings().remove(partitioning); - campaignService.insertOrUpdateCampaign(campaign); partitioningService.deletePartitioningById(id); int nbQuestioningDeleted = questioningService.deleteQuestioningsOfOnePartitioning(partitioning); @@ -126,11 +116,4 @@ private Partitioning convertToEntity(PartitioningDto partitioningDto) { return modelmapper.map(partitioningDto, Partitioning.class); } - class PartitioningPage extends PageImpl { - - public PartitioningPage(List content, Pageable pageable, long total) { - super(content, pageable, total); - } - } - } diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/SourceController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/SourceController.java index 9482e12e..47766313 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/SourceController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/SourceController.java @@ -103,11 +103,6 @@ public ResponseEntity putSource(@PathVariable("id") Strin source = sourceService.insertOrUpdateSource(convertToEntity(sourceOnlineStatusDto)); - if (source.getOwner() != null && httpStatus.equals(HttpStatus.CREATED)) - ownerService.addSourceFromOwner(source.getOwner(), source); - if (source.getSupport() != null && httpStatus.equals(HttpStatus.CREATED)) - supportService.addSourceFromSupport(source.getSupport(), source); - return ResponseEntity.status(httpStatus).headers(responseHeaders).body(convertToCompleteDto(source)); } @@ -120,19 +115,12 @@ public void deleteSource(@PathVariable("id") String id) { int nbViewDeleted = 0; Source source = sourceService.findById(id); - if (source.getOwner() != null) - ownerService.removeSourceFromOwner(source.getOwner(), source); - - if (source.getSupport() != null) - supportService.removeSourceFromSupport(source.getSupport(), source); - - sourceService.deleteSourceById(id); List listCampaigns = new ArrayList<>(); List listPartitionings = new ArrayList<>(); - source.getSurveys().stream().forEach(su -> listCampaigns.addAll(su.getCampaigns())); - source.getSurveys().stream().forEach( - su -> su.getCampaigns().stream().forEach(c -> listPartitionings.addAll(c.getPartitionings()))); + source.getSurveys().forEach(su -> listCampaigns.addAll(su.getCampaigns())); + source.getSurveys().forEach( + su -> su.getCampaigns().forEach(c -> listPartitionings.addAll(c.getPartitionings()))); for (Campaign campaign : listCampaigns) { nbViewDeleted += viewService.deleteViewsOfOneCampaign(campaign); @@ -140,6 +128,8 @@ public void deleteSource(@PathVariable("id") String id) { for (Partitioning partitioning : listPartitionings) { nbQuestioningDeleted += questioningService.deleteQuestioningsOfOnePartitioning(partitioning); } + sourceService.deleteSourceById(id); + log.info("Source {} deleted with all its metadata children - {} questioning deleted - {} view deleted", id, nbQuestioningDeleted, nbViewDeleted); diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/SurveyController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/SurveyController.java index e15e8253..328b79d8 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/SurveyController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/controller/SurveyController.java @@ -119,9 +119,6 @@ public ResponseEntity putSurvey(@PathVariable("id") String id, @Reque } survey = surveyService.insertOrUpdateSurvey(convertToEntity(surveyDto)); - Source source = survey.getSource(); - source.getSurveys().add(survey); - sourceService.insertOrUpdateSource(source); return ResponseEntity.status(httpStatus).headers(responseHeaders).body(convertToDto(survey)); } @@ -135,9 +132,6 @@ public void deleteSurvey(@PathVariable("id") String id) { int nbQuestioningDeleted = 0; int nbViewDeleted = 0; - Source source = survey.getSource(); - source.getSurveys().remove(survey); - sourceService.insertOrUpdateSource(source); surveyService.deleteSurveyById(id); List listPartitionings = new ArrayList<>(); diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/QuestioningController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/QuestioningController.java index 7bc2c403..b7997e81 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/QuestioningController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/QuestioningController.java @@ -2,7 +2,6 @@ import fr.insee.survey.datacollectionmanagement.configuration.auth.user.AuthorityPrivileges; import fr.insee.survey.datacollectionmanagement.constants.Constants; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Parameters; import fr.insee.survey.datacollectionmanagement.metadata.domain.Partitioning; import fr.insee.survey.datacollectionmanagement.metadata.enums.ParameterEnum; import fr.insee.survey.datacollectionmanagement.metadata.service.PartitioningService; @@ -62,8 +61,6 @@ public ResponseEntity postQuestioning(@RequestBody QuestioningDto questioning Questioning questioning = convertToEntity(questioningDto); questioning.setSurveyUnit(su); questioning = questioningService.saveQuestioning(questioning); - su.getQuestionings().add(questioning); - surveyUnitService.saveSurveyUnit(su); HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.set(HttpHeaders.LOCATION, ServletUriComponentsBuilder.fromCurrentRequest().toUriString()); return ResponseEntity.status(HttpStatus.CREATED).headers(responseHeaders).body(convertToDto(questioning)); diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java index 400f02da..9424d7c0 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java @@ -82,10 +82,10 @@ public class WebclientController { private final ViewService viewService; - private final QuestioningAccreditationService questioningAccreditationService; - private final QuestioningEventService questioningEventService; + private final QuestioningAccreditationService questioningAccreditationService; + private final ModelMapper modelMapper; @Operation(summary = "Create or update questioning for webclients - Returns the questioning and all its accreditations") @@ -115,17 +115,7 @@ public ResponseEntity putQuestioning(@RequestBody Quest HttpStatus httpStatus = HttpStatus.OK; su = convertToEntity(questioningWebclientDto.getSurveyUnit()); - - // Create su if not exists or update - try { - SurveyUnit optSuBase = surveyUnitService.findbyId(idSu); - su.setQuestionings(optSuBase.getQuestionings()); - - } catch (NotFoundException e) { - log.warn("survey unit {} does not exist - Creation of the survey unit", - idSu); - su.setQuestionings(new HashSet<>()); - } + surveyUnitService.saveSurveyUnitAndAddress(su); // Create questioning if not exists Questioning questioning = questioningService.findByIdPartitioningAndSurveyUnitIdSu(idPartitioning, idSu); @@ -137,12 +127,13 @@ public ResponseEntity putQuestioning(@RequestBody Quest questioning.setIdPartitioning(idPartitioning); questioning.setSurveyUnit(su); questioning.setModelName(modelName); + questioningService.saveQuestioning(questioning); QuestioningEvent questioningEvent = new QuestioningEvent(); questioningEvent.setType(TypeQuestioningEvent.INITLA); questioningEvent.setDate(new Date()); questioningEvent.setQuestioning(questioning); - questioning.setQuestioningEvents(new HashSet<>(List.of(questioningEvent))); - questioning.setQuestioningAccreditations(new HashSet<>()); + questioningEventService.saveQuestioningEvent(questioningEvent); + } @@ -150,17 +141,11 @@ public ResponseEntity putQuestioning(@RequestBody Quest createContactAndAccreditations(idSu, part, questioning, contactAccreditationDto); } - // save questioning and su - questioningService.saveQuestioning(questioning); - su.getQuestionings().add(questioning); - surveyUnitService.saveSurveyUnitAddressComments(su); - - questioningReturn.setIdPartitioning(idPartitioning); questioningReturn.setModelName(modelName); questioningReturn.setSurveyUnit(convertToDto(questioning.getSurveyUnit())); List listContactAccreditationDto = new ArrayList<>(); - questioning.getQuestioningAccreditations().stream() + questioning.getQuestioningAccreditations() .forEach(acc -> listContactAccreditationDto .add(convertToDto(contactService.findByIdentifier(acc.getIdContact()), acc.isMain()))); questioningReturn.setContacts(listContactAccreditationDto); @@ -180,6 +165,7 @@ private void createContactAndAccreditations(String idSu, Partitioning part, Ques Contact contact; try { contact = convertToEntity(contactAccreditationDto); + contactService.findByIdentifier(contactAccreditationDto.getIdentifier()); if (contactAccreditationDto.getAddress() != null) contact.setAddress(addressService.convertToEntity(contactAccreditationDto.getAddress())); contactService.updateContactAddressEvent(contact, node); @@ -210,19 +196,21 @@ private void createContactAndAccreditations(String idSu, Partitioning part, Ques questioningAccreditation.setIdContact(contactAccreditationDto.getIdentifier()); questioningAccreditation.setMain(contactAccreditationDto.isMain()); questioningAccreditation.setQuestioning(questioning); - setExistingAccreditations.add(questioningAccreditation); + questioningAccreditationService.saveQuestioningAccreditation(questioningAccreditation); // create view viewService.createView(contactAccreditationDto.getIdentifier(), questioning.getSurveyUnit().getIdSu(), part.getCampaign().getId()); - questioning.getQuestioningAccreditations().add(questioningAccreditation); } else { // update accreditation - QuestioningAccreditation questioningAccreditation = listContactAccreditations.get(0); + QuestioningAccreditation questioningAccreditation = listContactAccreditations.getFirst(); questioningAccreditation.setMain(contactAccreditationDto.isMain()); + questioningAccreditationService.saveQuestioningAccreditation(questioningAccreditation); + } + } @Operation(summary = "Get questioning for webclients") @@ -249,7 +237,7 @@ public ResponseEntity getQuestioning(@RequestParam(requ questioningWebclientDto.setModelName(modelName); questioningWebclientDto.setSurveyUnit(convertToDto(questioning.getSurveyUnit())); List listContactAccreditationDto = new ArrayList<>(); - questioning.getQuestioningAccreditations().stream() + questioning.getQuestioningAccreditations() .forEach(acc -> listContactAccreditationDto .add(convertToDto(contactService.findByIdentifier(acc.getIdContact()), acc.isMain()))); questioningWebclientDto.setContacts(listContactAccreditationDto); @@ -311,33 +299,15 @@ public ResponseEntity putMetadata(@PathVariable("id") String id, campaign.setSurvey(survey); Partitioning partitioning = convertToEntity(metadataDto.getPartitioningDto()); partitioning.setCampaign(campaign); - - campaign = campaignService.addPartitionigToCampaign(campaign, partitioning); - survey = surveyService.addCampaignToSurvey(survey, campaign); - source = sourceService.addSurveyToSource(source, survey); - owner = ownerService.insertOrUpdateOwner(owner); - support = supportService.insertOrUpdateSupport(support); - source = sourceService.insertOrUpdateSource(source); - source.setOwner(owner); source.setSupport(support); - Set sourcesOwner = (owner.getSources() == null) ? new HashSet<>() - : owner.getSources(); - sourcesOwner.add(source); - owner.setSources(sourcesOwner); - - Set sourcesSupport = (support.getSources() == null) ? new HashSet<>() - : support.getSources(); - sourcesSupport.add(source); - support.setSources(sourcesSupport); - + campaign = campaignService.insertOrUpdateCampaign(campaign); + survey = surveyService.insertOrUpdateSurvey(survey); + source = sourceService.insertOrUpdateSource(source); owner = ownerService.insertOrUpdateOwner(owner); support = supportService.insertOrUpdateSupport(support); source = sourceService.insertOrUpdateSource(source); - survey = surveyService.insertOrUpdateSurvey(survey); - campaign = campaignService.insertOrUpdateCampaign(campaign); - partitioning = partitioningService.insertOrUpdatePartitioning(partitioning); metadataReturn.setOwnerDto(convertToDto(owner)); metadataReturn.setSupportDto(convertToDto(support)); diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/QuestioningCommentController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/QuestioningCommentController.java index cea5f013..7b485817 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/QuestioningCommentController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/QuestioningCommentController.java @@ -3,7 +3,6 @@ import fr.insee.survey.datacollectionmanagement.configuration.auth.user.AuthorityPrivileges; import fr.insee.survey.datacollectionmanagement.constants.Constants; import fr.insee.survey.datacollectionmanagement.questioning.domain.Questioning; -import fr.insee.survey.datacollectionmanagement.questioning.domain.QuestioningComment; import fr.insee.survey.datacollectionmanagement.questioning.dto.QuestioningCommentInputDto; import fr.insee.survey.datacollectionmanagement.questioning.dto.QuestioningCommentOutputDto; import fr.insee.survey.datacollectionmanagement.questioning.service.QuestioningCommentService; @@ -17,15 +16,11 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.modelmapper.ModelMapper; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.Date; -import java.util.Set; - @RestController @PreAuthorize(AuthorityPrivileges.HAS_MANAGEMENT_PRIVILEGES) @Tag(name = "2 - Questioning", description = "Enpoints to create, update, delete and find entities around the questionings") @@ -34,10 +29,8 @@ @Validated public class QuestioningCommentController { - private final QuestioningService questioningService; private final QuestioningCommentService questioningCommentService; - private final ModelMapper modelMapper; - + private final QuestioningService questioningService; @Operation(summary = "Create a questioning comment") @PostMapping(value = Constants.API_QUESTIONING_ID_COMMENT, produces = "application/json", consumes = "application/json") @@ -47,21 +40,10 @@ public class QuestioningCommentController { @ApiResponse(responseCode = "400", description = "Bad request"), @ApiResponse(responseCode = "404", description = "Not found") }) - public QuestioningCommentOutputDto postQuestioningComment(@PathVariable Long id, @Valid @RequestBody QuestioningCommentInputDto questioningCommentDto) { - + public QuestioningCommentOutputDto postQuestioningComment(@PathVariable Long id, @Valid @RequestBody QuestioningCommentInputDto questioningCommentInputDto) { Questioning questioning = questioningService.findbyId(id); - QuestioningComment questioningComment = questioningCommentService.convertToEntity(questioningCommentDto); - questioningComment.setDate(new Date()); - QuestioningComment newQuestioningComment = questioningCommentService.saveQuestioningComment(questioningComment); - Set setQuestioningComments = questioning.getQuestioningComments(); - setQuestioningComments.add(newQuestioningComment); - questioning.setQuestioningComments(setQuestioningComments); - questioningService.saveQuestioning(questioning); - return questioningCommentService.convertToOutputDto(newQuestioningComment); + return questioningCommentService.saveQuestioningComment(questioning, questioningCommentInputDto); } - - - } diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/QuestioningEventController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/QuestioningEventController.java index 601020db..06d77116 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/QuestioningEventController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/QuestioningEventController.java @@ -19,17 +19,11 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.modelmapper.ModelMapper; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.support.ServletUriComponentsBuilder; -import java.text.ParseException; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -54,12 +48,10 @@ public class QuestioningEventController { @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "400", description = "Bad Request") }) - public ResponseEntity findQuestioningEventsByQuestioning(@PathVariable("id") Long id) { + public List findQuestioningEventsByQuestioning(@PathVariable("id") Long id) { Questioning questioning = questioningService.findbyId(id); Set setQe = questioning.getQuestioningEvents(); - return ResponseEntity.status(HttpStatus.OK) - .body(setQe.stream() - .map(questioningEventService::convertToDto).toList()); + return setQe.stream().map(questioningEventService::convertToDto).toList(); } @@ -69,27 +61,14 @@ public ResponseEntity findQuestioningEventsByQuestioning(@PathVariable("id") @ApiResponse(responseCode = "201", description = "Created", content = @Content(schema = @Schema(implementation = QuestioningEventDto.class))), @ApiResponse(responseCode = "400", description = "Bad request") }) - public ResponseEntity postQuestioningEvent(@Parameter(description = "questioning id") Long id, - @RequestBody QuestioningEventDto questioningEventDto) { - Questioning questioning = questioningService.findbyId(id); + @ResponseStatus(HttpStatus.CREATED) + public QuestioningEventDto postQuestioningEvent(@Parameter(description = "questioning id") Long id, + @RequestBody QuestioningEventDto questioningEventDto) { + questioningService.findbyId(id); + QuestioningEvent questioningEvent = questioningEventService.convertToEntity(questioningEventDto); + QuestioningEvent newQuestioningEvent = questioningEventService.saveQuestioningEvent(questioningEvent); + return questioningEventService.convertToDto(newQuestioningEvent); - try { - QuestioningEvent questioningEvent = questioningEventService.convertToEntity(questioningEventDto); - QuestioningEvent newQuestioningEvent = questioningEventService.saveQuestioningEvent(questioningEvent); - Set setQuestioningEvents = questioning.getQuestioningEvents(); - setQuestioningEvents.add(newQuestioningEvent); - questioning.setQuestioningEvents(setQuestioningEvents); - questioningService.saveQuestioning(questioning); - HttpHeaders responseHeaders = new HttpHeaders(); - responseHeaders.set(HttpHeaders.LOCATION, - ServletUriComponentsBuilder.fromCurrentRequest().toUriString()); - return ResponseEntity.status(HttpStatus.CREATED).headers(responseHeaders) - .body(questioningEventService.convertToDto(newQuestioningEvent)); - - } catch (ParseException e) { - log.error(e.getMessage(),e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Error"); - } } @@ -103,31 +82,18 @@ public ResponseEntity postQuestioningEvent(@Parameter(description = "question public ResponseEntity deleteQuestioningEvent(@PathVariable("id") Long id) { QuestioningEvent questioningEvent = questioningEventService.findbyId(id); - try { - Upload upload = (questioningEvent.getUpload() != null ? questioningEvent.getUpload() : null); - Questioning quesitoning = questioningEvent.getQuestioning(); - quesitoning.setQuestioningEvents(quesitoning.getQuestioningEvents().stream() - .filter(qe -> !qe.equals(questioningEvent)).collect(Collectors.toSet())); - questioningService.saveQuestioning(quesitoning); - questioningEventService.deleteQuestioningEvent(id); - if (upload != null && questioningEventService.countIdUploadInEvents(upload.getId()) == 0) { - uploadService.delete(upload); - } - return ResponseEntity.status(HttpStatus.NO_CONTENT).body("Questioning event deleted"); - - } catch (Exception e) { - log.error(e.getMessage(),e); - return new ResponseEntity<>("Error", HttpStatus.BAD_REQUEST); + Upload upload = (questioningEvent.getUpload() != null ? questioningEvent.getUpload() : null); + Questioning quesitoning = questioningEvent.getQuestioning(); + quesitoning.setQuestioningEvents(quesitoning.getQuestioningEvents().stream() + .filter(qe -> !qe.equals(questioningEvent)).collect(Collectors.toSet())); + questioningService.saveQuestioning(quesitoning); + questioningEventService.deleteQuestioningEvent(id); + if (upload != null && questioningEventService.countIdUploadInEvents(upload.getId()) == 0) { + uploadService.delete(upload); } - } - + return ResponseEntity.status(HttpStatus.NO_CONTENT).body("Questioning event deleted"); - class QuestioningEventPage extends PageImpl { - private static final long serialVersionUID = 656181199902518234L; - - public QuestioningEventPage(List content, Pageable pageable, long total) { - super(content, pageable, total); - } } + } diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitCommentController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitCommentController.java index 9312f455..31f92e08 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitCommentController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitCommentController.java @@ -3,7 +3,6 @@ import fr.insee.survey.datacollectionmanagement.configuration.auth.user.AuthorityPrivileges; import fr.insee.survey.datacollectionmanagement.constants.Constants; import fr.insee.survey.datacollectionmanagement.questioning.domain.SurveyUnit; -import fr.insee.survey.datacollectionmanagement.questioning.domain.SurveyUnitComment; import fr.insee.survey.datacollectionmanagement.questioning.dto.SurveyUnitCommentInputDto; import fr.insee.survey.datacollectionmanagement.questioning.dto.SurveyUnitCommentOutputDto; import fr.insee.survey.datacollectionmanagement.questioning.service.SurveyUnitCommentService; @@ -17,15 +16,11 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.modelmapper.ModelMapper; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.Date; -import java.util.Set; - @RestController @PreAuthorize(AuthorityPrivileges.HAS_MANAGEMENT_PRIVILEGES) @Tag(name = "2 - Questioning", description = "Enpoints to create, update, delete and find entities around the questionings") @@ -34,10 +29,8 @@ @Validated public class SurveyUnitCommentController { - private final SurveyUnitService surveyUnitService; private final SurveyUnitCommentService surveyUnitCommentService; - private final ModelMapper modelMapper; - + private final SurveyUnitService surveyUnitService; @Operation(summary = "Create a survey unit comment") @PostMapping(value = Constants.API_SURVEY_UNITS_ID_COMMENT, produces = "application/json", consumes = "application/json") @@ -50,14 +43,7 @@ public class SurveyUnitCommentController { public SurveyUnitCommentOutputDto postSurveyUnitComment(@PathVariable String id, @Valid @RequestBody SurveyUnitCommentInputDto surveyUnitCommentDto) { SurveyUnit surveyUnit = surveyUnitService.findbyId(id); - SurveyUnitComment surveyUnitComment = surveyUnitCommentService.convertToEntity(surveyUnitCommentDto); - surveyUnitComment.setDate(new Date()); - SurveyUnitComment newSurveyUnitComment = surveyUnitCommentService.saveSurveyUnitComment(surveyUnitComment); - Set setSurveyUnitComments = surveyUnit.getSurveyUnitComments(); - setSurveyUnitComments.add(newSurveyUnitComment); - surveyUnit.setSurveyUnitComments(setSurveyUnitComments); - surveyUnitService.saveSurveyUnit(surveyUnit); - return surveyUnitCommentService.convertToOutputDto(surveyUnit); + return surveyUnitCommentService.saveSurveyUnitComment(surveyUnit, surveyUnitCommentDto); } diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java index a32e72f3..106c23f8 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java @@ -34,7 +34,6 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; -import java.util.Collections; import java.util.List; @RestController @@ -85,15 +84,11 @@ public Page searchSurveyUnits( Pageable pageable = PageRequest.of(page, pageSize, Sort.by(sort)); - switch (SurveyUnitParamEnum.fromValue(searchType)) { - case SurveyUnitParamEnum.IDENTIFIER: - return surveyUnitService.findbyIdentifier(searchParam, pageable); - case SurveyUnitParamEnum.CODE: - return surveyUnitService.findbyIdentificationCode(searchParam, pageable); - case SurveyUnitParamEnum.NAME: - return surveyUnitService.findbyIdentificationName(searchParam, pageable); - } - return new PageImpl<>(Collections.emptyList()); + return switch (SurveyUnitParamEnum.fromValue(searchType)) { + case SurveyUnitParamEnum.IDENTIFIER -> surveyUnitService.findbyIdentifier(searchParam, pageable); + case SurveyUnitParamEnum.CODE -> surveyUnitService.findbyIdentificationCode(searchParam, pageable); + case SurveyUnitParamEnum.NAME -> surveyUnitService.findbyIdentificationName(searchParam, pageable); + }; } @Operation(summary = "Search for a survey unit by its id") @@ -141,7 +136,7 @@ public ResponseEntity putSurveyUnit(@PathVariable("id") String id } return ResponseEntity.status(responseStatus) - .body(convertToDto(surveyUnitService.saveSurveyUnitAddressComments(surveyUnit))); + .body(convertToDto(surveyUnitService.saveSurveyUnitAndAddress(surveyUnit))); } diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/domain/Contact.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/domain/Contact.java index 6c6b67c1..92d03fa7 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/domain/Contact.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/domain/Contact.java @@ -38,7 +38,7 @@ public class Contact { @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) private Address address; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "contact") private Set contactEvents; @Enumerated(EnumType.STRING) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/domain/ContactEvent.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/domain/ContactEvent.java index 01703fa5..997c79d3 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/domain/ContactEvent.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/domain/ContactEvent.java @@ -25,6 +25,7 @@ public class ContactEvent { private ContactEventTypeEnum type; @ManyToOne + @JoinColumn(name="contact_identifier") private Contact contact; @JdbcTypeCode(SqlTypes.JSON) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Campaign.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Campaign.java index d880e9a3..c3851c92 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Campaign.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Campaign.java @@ -18,26 +18,28 @@ public class Campaign { @Id private String id; - + @Column(name = "YEAR_VALUE") - @NonNull + @NonNull private Integer year; - + @Column(name = "PERIOD_VALUE") @NonNull @Enumerated(EnumType.STRING) private PeriodEnum period; - + private String campaignWording; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "campaign") private Set partitionings; + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @Enumerated(EnumType.STRING) private Set params; @ManyToOne + @JoinColumn(name = "survey_id") private Survey survey; } diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/CampaignEvent.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/CampaignEvent.java deleted file mode 100644 index 0e2686b6..00000000 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/CampaignEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -package fr.insee.survey.datacollectionmanagement.metadata.domain; - -import jakarta.persistence.*; -import lombok.*; - -import java.util.Date; - -@Entity -@Getter -@Setter -@NoArgsConstructor -public class CampaignEvent { - - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "campaign_event_seq") - private Long id; - @NonNull - private String type; - @NonNull - private Date date; - - @ManyToOne - private Campaign campaign; - -} diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Owner.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Owner.java index f63ce85c..d4ef7dc5 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Owner.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Owner.java @@ -1,8 +1,6 @@ package fr.insee.survey.datacollectionmanagement.metadata.domain; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; +import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; @@ -20,7 +18,7 @@ public class Owner { private String ministry; private String logo; - @OneToMany + @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner") private Set sources; } \ No newline at end of file diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Partitioning.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Partitioning.java index f3bb0ab1..e4c53747 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Partitioning.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Partitioning.java @@ -23,6 +23,7 @@ public class Partitioning { private Date returnDate; @ManyToOne + @JoinColumn(name = "campaign_id") private Campaign campaign; @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Source.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Source.java index 5df06555..3147cfe5 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Source.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Source.java @@ -27,18 +27,20 @@ public class Source { @NonNull private Boolean mandatoryMySurveys; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "source") private Set surveys; - @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "source") private Set sourceAccreditations; @ManyToOne @NonNull + @JoinColumn(name = "owner_id") private Owner owner; @ManyToOne @NonNull + @JoinColumn(name = "support_id") private Support support; @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Support.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Support.java index 101bc512..eb9cac2f 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Support.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Support.java @@ -1,5 +1,6 @@ package fr.insee.survey.datacollectionmanagement.metadata.domain; +import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.OneToMany; @@ -25,7 +26,7 @@ public class Support { private String city; private String zipCode; - @OneToMany + @OneToMany(cascade = CascadeType.ALL, mappedBy = "support") private Set sources; } diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Survey.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Survey.java index 3e80e42d..c98cbda3 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Survey.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/domain/Survey.java @@ -36,7 +36,7 @@ public class Survey { private String specimenUrl; private String communication; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "survey") private Set campaigns; @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @@ -44,6 +44,7 @@ public class Survey { private Set params; @ManyToOne + @JoinColumn(name = "source_id") private Source source; } diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/repository/CampaignEventRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/repository/CampaignEventRepository.java deleted file mode 100644 index c9d579bd..00000000 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/repository/CampaignEventRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package fr.insee.survey.datacollectionmanagement.metadata.repository; - -import org.springframework.data.jpa.repository.JpaRepository; - -import fr.insee.survey.datacollectionmanagement.metadata.domain.CampaignEvent; - -public interface CampaignEventRepository extends JpaRepository { -} diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/Operator.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/Operator.java index 23ee1cb2..4179a164 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/Operator.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/Operator.java @@ -1,10 +1,7 @@ package fr.insee.survey.datacollectionmanagement.questioning.domain; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; @@ -20,6 +17,9 @@ public class Operator { private String firstName; private String lastName; private String phoneNumber; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "operator_service_id") + private OperatorService operatorService; } diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/OperatorService.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/OperatorService.java index 79f49095..fd24dc7d 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/OperatorService.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/OperatorService.java @@ -16,7 +16,7 @@ public class OperatorService { private String name; private String mail; - @OneToMany + @OneToMany(cascade = CascadeType.ALL, mappedBy = "operatorService") @EqualsAndHashCode.Exclude @ToString.Exclude private Set operators; diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/Questioning.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/Questioning.java index 8054d4b9..372b8e01 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/Questioning.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/Questioning.java @@ -24,19 +24,21 @@ public class Questioning { @NonNull private String idPartitioning; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "questioning") private Set questioningAccreditations; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "questioning") private Set questioningEvents; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "questioning") private Set questioningCommunications; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "questioning") + private Set questioningComments; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @JoinColumn(name = "survey_unit_id_su") @NonNull private SurveyUnit surveyUnit; diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningAccreditation.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningAccreditation.java index b7add662..6e026463 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningAccreditation.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningAccreditation.java @@ -26,6 +26,7 @@ public class QuestioningAccreditation { private String idContact; @ManyToOne + @JoinColumn(name = "questioning_id") private Questioning questioning; @Override diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningComment.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningComment.java index fb27893e..b1360150 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningComment.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningComment.java @@ -17,4 +17,7 @@ public class QuestioningComment { private String comment; private String author; private Date date; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "questioning_id") + private Questioning questioning; } diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningCommunication.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningCommunication.java index 654d99ef..4ac22f6f 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningCommunication.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningCommunication.java @@ -25,6 +25,7 @@ public class QuestioningCommunication { private TypeCommunicationEvent type; @ManyToOne + @JoinColumn(name = "questioning_id") private Questioning questioning; @Enumerated(EnumType.STRING) private StatusCommunication status; diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningEvent.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningEvent.java index 06e16a88..2c9c21cd 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningEvent.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningEvent.java @@ -28,6 +28,7 @@ public class QuestioningEvent { private TypeQuestioningEvent type; @ManyToOne + @JoinColumn(name = "questioning_id") private Questioning questioning; @ManyToOne(fetch = FetchType.EAGER) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnit.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnit.java index ef54a65c..4a4dfdf6 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnit.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnit.java @@ -19,7 +19,7 @@ public class SurveyUnit { @Id private String idSu; - @OneToMany + @OneToMany(cascade = CascadeType.ALL, mappedBy = "surveyUnit") private Set questionings; private String identificationCode; @@ -33,7 +33,7 @@ public class SurveyUnit { @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) private SurveyUnitAddress surveyUnitAddress; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "surveyUnit" ) private Set surveyUnitComments; @Override diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnitComment.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnitComment.java index e861a982..ce0d67c8 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnitComment.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnitComment.java @@ -17,4 +17,7 @@ public class SurveyUnitComment { private String comment; private String author; private Date date; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "survey_unit_id_su") + private SurveyUnit surveyUnit; } diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/user/domain/SourceAccreditation.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/user/domain/SourceAccreditation.java index 14f90737..8b15d475 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/user/domain/SourceAccreditation.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/user/domain/SourceAccreditation.java @@ -22,17 +22,8 @@ public class SourceAccreditation { @NonNull private String idUser; - @OneToOne + @ManyToOne + @JoinColumn(name = "source_id") private Source source; - @Override - public String toString() { - return "SourceAccreditation{" + - "id=" + id + - ", creationDate=" + creationDate + - ", creationAuthor='" + creationAuthor + '\'' + - ", idUser='" + idUser + '\'' + - ", source=" + source + - '}'; - } } diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/user/domain/User.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/user/domain/User.java index de2fcb99..6bfb565c 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/user/domain/User.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/user/domain/User.java @@ -28,7 +28,7 @@ public class User { @Enumerated(EnumType.ORDINAL) private UserRoleTypeEnum role; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user") private Set userEvents; } diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/user/domain/UserEvent.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/user/domain/UserEvent.java index 0009baf5..e760d3ce 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/user/domain/UserEvent.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/user/domain/UserEvent.java @@ -27,6 +27,7 @@ public class UserEvent { private UserEventTypeEnum type; @ManyToOne + @JoinColumn(name="user_identifier") private User user; @JdbcTypeCode(SqlTypes.JSON) diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java index a8a7066f..75cffa86 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java @@ -16,10 +16,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Set; @Service @RequiredArgsConstructor @@ -76,13 +73,11 @@ public Page searchContactByName(String name, Pageable pageable @Override @Transactional public Contact createContactAddressEvent(Contact contact, JsonNode payload) { - if (contact.getAddress() != null) { - addressService.saveAddress(contact.getAddress()); - } + Contact contactS = saveContact(contact); ContactEvent newContactEvent = contactEventService.createContactEvent(contact, ContactEventTypeEnum.create, payload); - contact.setContactEvents(new HashSet<>(Collections.singletonList(newContactEvent))); - return saveContact(contact); + contactEventService.saveContactEvent(newContactEvent); + return contactS; } @Override @@ -97,12 +92,10 @@ public Contact updateContactAddressEvent(Contact contact, JsonNode payload) thro addressService.saveAddress(contact.getAddress()); } - Set setContactEventsContact = existingContact.getContactEvents(); ContactEvent contactEventUpdate = contactEventService.createContactEvent(contact, ContactEventTypeEnum.update, payload); - setContactEventsContact.add(contactEventUpdate); - contact.setContactEvents(setContactEventsContact); - return saveContact(contact); + contactEventService.saveContactEvent(contactEventUpdate); + return contact; } @Override diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/CampaignService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/CampaignService.java index 46ea6fd4..06e8b55c 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/CampaignService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/CampaignService.java @@ -1,14 +1,12 @@ package fr.insee.survey.datacollectionmanagement.metadata.service; import fr.insee.survey.datacollectionmanagement.metadata.domain.Campaign; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Partitioning; import fr.insee.survey.datacollectionmanagement.metadata.dto.CampaignMoogDto; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import java.util.Collection; -import java.util.List; @Service public interface CampaignService { @@ -17,20 +15,12 @@ public interface CampaignService { Campaign findById(String idCampaign); - List findbyPeriod(String period); - - List findbySourceYearPeriod(String source, Integer year, String period); - - List findbySourcePeriod(String source, String period); - Page findAll(Pageable pageable); Campaign insertOrUpdateCampaign(Campaign campaign); void deleteCampaignById(String id); - Campaign addPartitionigToCampaign(Campaign campaign, Partitioning partitioning); - /** * Check if a campaign is ongoing, which means checks if all the partitiongs of the campaign are ongoing * @param idCampaign id of the campaign diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/OwnerService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/OwnerService.java index 2485f242..5e139be6 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/OwnerService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/OwnerService.java @@ -1,7 +1,6 @@ package fr.insee.survey.datacollectionmanagement.metadata.service; import fr.insee.survey.datacollectionmanagement.metadata.domain.Owner; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Source; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -13,10 +12,5 @@ public interface OwnerService { Owner insertOrUpdateOwner(Owner owner); - void deleteOwnerById(String id); - - void removeSourceFromOwner(Owner owner, Source source); - - void addSourceFromOwner(Owner owner, Source source); } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/SourceService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/SourceService.java index b676baf3..d557beef 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/SourceService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/SourceService.java @@ -1,7 +1,6 @@ package fr.insee.survey.datacollectionmanagement.metadata.service; import fr.insee.survey.datacollectionmanagement.metadata.domain.Source; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Survey; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -15,6 +14,4 @@ public interface SourceService { void deleteSourceById(String id); - Source addSurveyToSource(Source source, Survey survey); - } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/SupportService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/SupportService.java index b10b3e59..52142ce9 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/SupportService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/SupportService.java @@ -1,6 +1,5 @@ package fr.insee.survey.datacollectionmanagement.metadata.service; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Source; import fr.insee.survey.datacollectionmanagement.metadata.domain.Support; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -13,10 +12,4 @@ public interface SupportService { Support insertOrUpdateSupport(Support support); - void deleteSupportById(String id); - - void removeSourceFromSupport(Support support, Source source); - - void addSourceFromSupport(Support support, Source source); - } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/SurveyService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/SurveyService.java index 49ad1e7a..1c1637b5 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/SurveyService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/SurveyService.java @@ -1,6 +1,5 @@ package fr.insee.survey.datacollectionmanagement.metadata.service; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Campaign; import fr.insee.survey.datacollectionmanagement.metadata.domain.Survey; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -17,6 +16,4 @@ public interface SurveyService { void deleteSurveyById(String id); - Survey addCampaignToSurvey(Survey survey, Campaign campaign); - } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/CampaignServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/CampaignServiceImpl.java index b014dc39..f1019cc9 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/CampaignServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/CampaignServiceImpl.java @@ -50,25 +50,11 @@ public Collection getCampaigns() { return moogCampaigns; } - @Override - public List findbyPeriod(String period) { - return campaignRepository.findByPeriod(period); - } - @Override public Campaign findById(String idCampaign) { return campaignRepository.findById(idCampaign).orElseThrow(() -> new NotFoundException(String.format("Campaign %s not found", idCampaign))); } - @Override - public List findbySourceYearPeriod(String source, Integer year, String period) { - return campaignRepository.findBySourceYearPeriod(source, year, period); - } - - @Override - public List findbySourcePeriod(String source, String period) { - return campaignRepository.findBySourcePeriod(source, period); - } @Override public Page findAll(Pageable pageable) { @@ -77,14 +63,6 @@ public Page findAll(Pageable pageable) { @Override public Campaign insertOrUpdateCampaign(Campaign campaign) { - try { - Campaign campaignBase = findById(campaign.getId()); - log.info("Update campaign with the id {}", campaign.getId()); - campaign.setPartitionings(campaignBase.getPartitionings()); - - } catch (NotFoundException e) { - log.info("Create campaign with the id {}", campaign.getId()); - } return campaignRepository.save(campaign); } @@ -94,29 +72,7 @@ public void deleteCampaignById(String id) { campaignRepository.deleteById(id); } - @Override - public Campaign addPartitionigToCampaign(Campaign campaign, Partitioning partitioning) { - Set partitionings; - try { - Campaign campaignBase = findById(campaign.getId()); - partitionings = campaignBase.getPartitionings(); - if (!isPartitioningPresent(partitioning, campaignBase)) - partitionings.add(partitioning); - } catch (NotFoundException e) { - partitionings = Set.of(partitioning); - } - campaign.setPartitionings(partitionings); - return campaign; - } - private boolean isPartitioningPresent(Partitioning p, Campaign c) { - for (Partitioning part : c.getPartitionings()) { - if (part.getId().equals(p.getId())) { - return true; - } - } - return false; - } @Override public boolean isCampaignOngoing(String idCampaign) { diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/OwnerServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/OwnerServiceImpl.java index 80bd7a8c..8ef5fb5c 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/OwnerServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/OwnerServiceImpl.java @@ -2,7 +2,6 @@ import fr.insee.survey.datacollectionmanagement.exception.NotFoundException; import fr.insee.survey.datacollectionmanagement.metadata.domain.Owner; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Source; import fr.insee.survey.datacollectionmanagement.metadata.repository.OwnerRepository; import fr.insee.survey.datacollectionmanagement.metadata.service.OwnerService; import lombok.RequiredArgsConstructor; @@ -32,35 +31,14 @@ public Owner insertOrUpdateOwner(Owner owner) { try { Owner ownerBase = findById(owner.getId()); - log.info("Update owner with the id {}", owner.getId()); - owner.setSources(ownerBase.getSources()); + log.info("Update owner with the id {}", ownerBase.getId()); + return ownerRepository.save(owner); } catch (NotFoundException e) { log.info("Create owner with the id {}", owner.getId()); return ownerRepository.save(owner); } - return ownerRepository.save(owner); - } - - @Override - public void deleteOwnerById(String id) { - ownerRepository.deleteById(id); - - } - - @Override - public void removeSourceFromOwner(Owner owner, Source source) { - if (owner != null && owner.getSources() != null) { - owner.getSources().remove(source); - ownerRepository.save(owner); - } - } - - @Override - public void addSourceFromOwner(Owner owner, Source source) { - owner.getSources().add(source); - ownerRepository.save(owner); } } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/SourceServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/SourceServiceImpl.java index 1f8f483b..99af7a14 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/SourceServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/SourceServiceImpl.java @@ -2,7 +2,6 @@ import fr.insee.survey.datacollectionmanagement.exception.NotFoundException; import fr.insee.survey.datacollectionmanagement.metadata.domain.Source; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Survey; import fr.insee.survey.datacollectionmanagement.metadata.repository.SourceRepository; import fr.insee.survey.datacollectionmanagement.metadata.service.SourceService; import lombok.RequiredArgsConstructor; @@ -11,8 +10,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import java.util.Set; - @Service @Slf4j @RequiredArgsConstructor @@ -49,30 +46,4 @@ public void deleteSourceById(String id) { } - @Override - public Source addSurveyToSource(Source source, Survey survey) { - Set surveys; - try { - Source sourceBase = findById(source.getId()); - surveys = sourceBase.getSurveys(); - if (!isSurveyPresent(survey, sourceBase)) { - surveys.add(survey); - } - } catch (NotFoundException e) { - surveys = Set.of(survey); - - } - source.setSurveys(surveys); - return source; - } - - private boolean isSurveyPresent(Survey su, Source s) { - for (Survey survey : s.getSurveys()) { - if (survey.getId().equals(su.getId())) { - return true; - } - } - return false; - } - } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/SupportServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/SupportServiceImpl.java index cfc3513b..2d93db6d 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/SupportServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/SupportServiceImpl.java @@ -1,7 +1,6 @@ package fr.insee.survey.datacollectionmanagement.metadata.service.impl; import fr.insee.survey.datacollectionmanagement.exception.NotFoundException; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Source; import fr.insee.survey.datacollectionmanagement.metadata.domain.Support; import fr.insee.survey.datacollectionmanagement.metadata.repository.SupportRepository; import fr.insee.survey.datacollectionmanagement.metadata.service.SupportService; @@ -42,24 +41,5 @@ public Support insertOrUpdateSupport(Support support) { } - @Override - public void deleteSupportById(String id) { - supportRepository.deleteById(id); - - } - - @Override - public void removeSourceFromSupport(Support support, Source source) { - if (support != null && support.getSources() != null) { - support.getSources().remove(source); - supportRepository.save(support); - } - } - - @Override - public void addSourceFromSupport(Support support, Source source) { - support.getSources().add(source); - supportRepository.save(support); - } } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/SurveyServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/SurveyServiceImpl.java index aa7b1ba6..900d8fd0 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/SurveyServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/metadata/service/impl/SurveyServiceImpl.java @@ -1,7 +1,6 @@ package fr.insee.survey.datacollectionmanagement.metadata.service.impl; import fr.insee.survey.datacollectionmanagement.exception.NotFoundException; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Campaign; import fr.insee.survey.datacollectionmanagement.metadata.domain.Survey; import fr.insee.survey.datacollectionmanagement.metadata.repository.SurveyRepository; import fr.insee.survey.datacollectionmanagement.metadata.service.SurveyService; @@ -11,9 +10,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Set; - @Service @Slf4j @RequiredArgsConstructor @@ -55,34 +51,4 @@ public void deleteSurveyById(String id) { surveyRepository.deleteById(id); } - @Override - public Survey addCampaignToSurvey(Survey survey, Campaign campaign) { - - Set campaigns; - try { - Survey surveyBase = findById(survey.getId()); - campaigns = surveyBase.getCampaigns(); - if(!isCampaignPresent(campaign, surveyBase)) { - campaigns.add(campaign); - } - } - catch (NotFoundException e){ - campaigns = Set.of(campaign); - - } - survey.setCampaigns(campaigns); - return survey; - - } - - - private boolean isCampaignPresent(Campaign c, Survey s) { - for (Campaign camp : s.getCampaigns()) { - if (camp.getId().equals(c.getId())) { - return true; - } - } - return false; } - -} diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/QuestioningCommentService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/QuestioningCommentService.java index 23931b26..3d50c8af 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/QuestioningCommentService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/QuestioningCommentService.java @@ -1,14 +1,13 @@ package fr.insee.survey.datacollectionmanagement.questioning.service; +import fr.insee.survey.datacollectionmanagement.questioning.domain.Questioning; import fr.insee.survey.datacollectionmanagement.questioning.domain.QuestioningComment; import fr.insee.survey.datacollectionmanagement.questioning.dto.QuestioningCommentInputDto; import fr.insee.survey.datacollectionmanagement.questioning.dto.QuestioningCommentOutputDto; public interface QuestioningCommentService { - QuestioningComment saveQuestioningComment(QuestioningComment questioningComment); - - QuestioningComment convertToEntity(QuestioningCommentInputDto questioningCommentDto); + QuestioningCommentOutputDto saveQuestioningComment(Questioning questioning, QuestioningCommentInputDto questioningCommentInputDto); QuestioningCommentOutputDto convertToOutputDto(QuestioningComment questioningComment); } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/QuestioningEventService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/QuestioningEventService.java index 096f33f0..697e2092 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/QuestioningEventService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/QuestioningEventService.java @@ -6,7 +6,6 @@ import fr.insee.survey.datacollectionmanagement.questioning.enums.TypeQuestioningEvent; import org.springframework.stereotype.Service; -import java.text.ParseException; import java.util.List; import java.util.Optional; @@ -15,9 +14,9 @@ public interface QuestioningEventService { QuestioningEvent findbyId(Long id); - public QuestioningEvent saveQuestioningEvent(QuestioningEvent questioningEvent); + QuestioningEvent saveQuestioningEvent(QuestioningEvent questioningEvent); - public void deleteQuestioningEvent(Long id); + void deleteQuestioningEvent(Long id); /** * Get the last event sorted by order of importance among the event types @@ -34,6 +33,6 @@ public interface QuestioningEventService { QuestioningEventDto convertToDto(QuestioningEvent questioningEvent) ; - QuestioningEvent convertToEntity(QuestioningEventDto questioningEventDto) throws ParseException; + QuestioningEvent convertToEntity(QuestioningEventDto questioningEventDto); } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/SurveyUnitCommentService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/SurveyUnitCommentService.java index 4e9b3ed8..abd0d7e5 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/SurveyUnitCommentService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/SurveyUnitCommentService.java @@ -1,17 +1,11 @@ package fr.insee.survey.datacollectionmanagement.questioning.service; import fr.insee.survey.datacollectionmanagement.questioning.domain.SurveyUnit; -import fr.insee.survey.datacollectionmanagement.questioning.domain.SurveyUnitComment; import fr.insee.survey.datacollectionmanagement.questioning.dto.SurveyUnitCommentInputDto; import fr.insee.survey.datacollectionmanagement.questioning.dto.SurveyUnitCommentOutputDto; public interface SurveyUnitCommentService { - SurveyUnitComment saveSurveyUnitComment(SurveyUnitComment surveyUnitComment); - - SurveyUnitComment convertToEntity(SurveyUnitCommentInputDto surveyUnitCommentDto); - - SurveyUnitCommentOutputDto convertToOutputDto(SurveyUnit surveyUnit); - + SurveyUnitCommentOutputDto saveSurveyUnitComment(SurveyUnit surveyUnit, SurveyUnitCommentInputDto surveyUnitCommentInputDto); } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/SurveyUnitService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/SurveyUnitService.java index 2562d846..34c4e2aa 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/SurveyUnitService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/SurveyUnitService.java @@ -19,7 +19,7 @@ public interface SurveyUnitService { SurveyUnit saveSurveyUnit(SurveyUnit surveyUnit); - SurveyUnit saveSurveyUnitAddressComments(SurveyUnit surveyUnit); + SurveyUnit saveSurveyUnitAndAddress(SurveyUnit surveyUnit); void deleteSurveyUnit(String id); diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningCommentServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningCommentServiceImpl.java index 6851b293..f7f0578d 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningCommentServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningCommentServiceImpl.java @@ -1,6 +1,7 @@ package fr.insee.survey.datacollectionmanagement.questioning.service.impl; +import fr.insee.survey.datacollectionmanagement.questioning.domain.Questioning; import fr.insee.survey.datacollectionmanagement.questioning.domain.QuestioningComment; import fr.insee.survey.datacollectionmanagement.questioning.dto.QuestioningCommentInputDto; import fr.insee.survey.datacollectionmanagement.questioning.dto.QuestioningCommentOutputDto; @@ -11,6 +12,8 @@ import org.modelmapper.ModelMapper; import org.springframework.stereotype.Service; +import java.util.Date; + @Service @Slf4j @RequiredArgsConstructor @@ -20,11 +23,14 @@ public class QuestioningCommentServiceImpl implements QuestioningCommentService private final ModelMapper modelMapper; @Override - public QuestioningComment saveQuestioningComment(QuestioningComment questioningComment) { - return questioningCommentRepository.save(questioningComment); + public QuestioningCommentOutputDto saveQuestioningComment(Questioning questioning, QuestioningCommentInputDto questioningCommentInputDto) { + QuestioningComment questioningComment = convertToEntity(questioningCommentInputDto); + questioningComment.setDate(new Date()); + questioningComment.setQuestioning(questioning); + QuestioningComment newQuestioningComment = questioningCommentRepository.save(questioningComment); + return convertToOutputDto(newQuestioningComment); } - @Override public QuestioningComment convertToEntity(QuestioningCommentInputDto questioningCommentDto) { return modelMapper.map(questioningCommentDto, QuestioningComment.class); } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningEventServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningEventServiceImpl.java index 4f7283d7..5cec16e1 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningEventServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningEventServiceImpl.java @@ -13,7 +13,6 @@ import org.modelmapper.ModelMapper; import org.springframework.stereotype.Service; -import java.text.ParseException; import java.util.List; import java.util.Optional; @@ -62,7 +61,7 @@ public QuestioningEventDto convertToDto(QuestioningEvent questioningEvent) { return modelMapper.map(questioningEvent, QuestioningEventDto.class); } - public QuestioningEvent convertToEntity(QuestioningEventDto questioningEventDto) throws ParseException { + public QuestioningEvent convertToEntity(QuestioningEventDto questioningEventDto) { return modelMapper.map(questioningEventDto, QuestioningEvent.class); } } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/SurveyUnitCommentServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/SurveyUnitCommentServiceImpl.java index 2971ceaa..8562a7f5 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/SurveyUnitCommentServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/SurveyUnitCommentServiceImpl.java @@ -6,30 +6,37 @@ import fr.insee.survey.datacollectionmanagement.questioning.dto.SurveyUnitCommentOutputDto; import fr.insee.survey.datacollectionmanagement.questioning.repository.SurveyUnitCommentRepository; import fr.insee.survey.datacollectionmanagement.questioning.service.SurveyUnitCommentService; +import fr.insee.survey.datacollectionmanagement.questioning.service.SurveyUnitService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.modelmapper.ModelMapper; import org.springframework.stereotype.Service; +import java.util.Date; + @Service @Slf4j @RequiredArgsConstructor public class SurveyUnitCommentServiceImpl implements SurveyUnitCommentService { private final SurveyUnitCommentRepository surveyUnitCommentRepository; + private final SurveyUnitService surveyUnitService; private final ModelMapper modelMapper; @Override - public SurveyUnitComment saveSurveyUnitComment(SurveyUnitComment surveyUnitComment) { - return surveyUnitCommentRepository.save(surveyUnitComment); + public SurveyUnitCommentOutputDto saveSurveyUnitComment(SurveyUnit surveyUnit, SurveyUnitCommentInputDto surveyUnitCommentInputDto) { + + SurveyUnitComment surveyUnitComment = convertToEntity(surveyUnitCommentInputDto); + surveyUnitComment.setDate(new Date()); + surveyUnitComment.setSurveyUnit(surveyUnit); + SurveyUnitComment newSurveyUnitComment = surveyUnitCommentRepository.save(surveyUnitComment); + return convertToOutputDto(newSurveyUnitComment); } - @Override public SurveyUnitComment convertToEntity(SurveyUnitCommentInputDto surveyUnitCommentDto) { return modelMapper.map(surveyUnitCommentDto, SurveyUnitComment.class); } - @Override - public SurveyUnitCommentOutputDto convertToOutputDto(SurveyUnit surveyUnit) { - return modelMapper.map(surveyUnit, SurveyUnitCommentOutputDto.class); + public SurveyUnitCommentOutputDto convertToOutputDto(SurveyUnitComment surveyUnitComment) { + return modelMapper.map(surveyUnitComment, SurveyUnitCommentOutputDto.class); } } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/SurveyUnitServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/SurveyUnitServiceImpl.java index 2f601643..5ece4a20 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/SurveyUnitServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/SurveyUnitServiceImpl.java @@ -53,14 +53,8 @@ public SurveyUnit saveSurveyUnit(SurveyUnit surveyUnit) { } @Override - public SurveyUnit saveSurveyUnitAddressComments(SurveyUnit surveyUnit) { + public SurveyUnit saveSurveyUnitAndAddress(SurveyUnit surveyUnit) { - try { - SurveyUnit existingSurveyUnit = findbyId(surveyUnit.getIdSu()); - surveyUnit.setSurveyUnitComments(existingSurveyUnit.getSurveyUnitComments()); - } catch (NotFoundException e) { - log.debug("Survey unit does not exist"); - } if (surveyUnit.getSurveyUnitAddress() != null) { try { SurveyUnit existingSurveyUnit = findbyId(surveyUnit.getIdSu()); diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/view/service/impl/ViewServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/view/service/impl/ViewServiceImpl.java index d0667c8d..33758c93 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/view/service/impl/ViewServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/view/service/impl/ViewServiceImpl.java @@ -79,7 +79,7 @@ public View createView(String identifier, String idSu, String campaignId) { view.setCampaignId(campaignId); view.setIdSu(idSu); List listContactView = findViewByIdentifier(identifier); - listContactView.stream().forEach(v -> { + listContactView.forEach(v -> { if (v.getIdSu() == null) deleteView(v); }); @@ -89,8 +89,8 @@ public View createView(String identifier, String idSu, String campaignId) { @Override public int deleteViewsOfOneCampaign(Campaign campaign) { List listtView = findViewByCampaignId(campaign.getId()); - listtView.stream() - .forEach(v -> deleteView(v)); + listtView + .forEach(this::deleteView); return listtView.size(); } From d42b13b6ef74c96b2abdfd555473bbca0eeef179 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 4 Dec 2024 10:39:51 +0100 Subject: [PATCH 02/26] fix: save contact --- .../contact/service/impl/ContactServiceImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java index 75cffa86..7e85db0f 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java @@ -73,8 +73,11 @@ public Page searchContactByName(String name, Pageable pageable @Override @Transactional public Contact createContactAddressEvent(Contact contact, JsonNode payload) { + if (contact.getAddress() != null) { + addressService.saveAddress(contact.getAddress()); + } Contact contactS = saveContact(contact); - ContactEvent newContactEvent = contactEventService.createContactEvent(contact, ContactEventTypeEnum.create, + ContactEvent newContactEvent = contactEventService.createContactEvent(contactS, ContactEventTypeEnum.create, payload); contactEventService.saveContactEvent(newContactEvent); return contactS; @@ -95,7 +98,7 @@ public Contact updateContactAddressEvent(Contact contact, JsonNode payload) thro ContactEvent contactEventUpdate = contactEventService.createContactEvent(contact, ContactEventTypeEnum.update, payload); contactEventService.saveContactEvent(contactEventUpdate); - return contact; + return saveContact(contact); } @Override From ac21341124791c3cb992ff759af815a032a60694 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 4 Dec 2024 11:07:45 +0100 Subject: [PATCH 03/26] refactor: contactService and ContactController --- .../contact/controller/ContactController.java | 63 +++------------ .../contact/service/ContactService.java | 11 +++ .../service/impl/ContactServiceImpl.java | 80 ++++++++++++++++++- 3 files changed, 100 insertions(+), 54 deletions(-) diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java index 88fb971f..fc970dfa 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java @@ -9,8 +9,6 @@ import fr.insee.survey.datacollectionmanagement.contact.dto.ContactDto; import fr.insee.survey.datacollectionmanagement.contact.dto.SearchContactDto; import fr.insee.survey.datacollectionmanagement.contact.enums.ContactParamEnum; -import fr.insee.survey.datacollectionmanagement.contact.enums.GenderEnum; -import fr.insee.survey.datacollectionmanagement.contact.service.AddressService; import fr.insee.survey.datacollectionmanagement.contact.service.ContactService; import fr.insee.survey.datacollectionmanagement.contact.util.PayloadUtil; import fr.insee.survey.datacollectionmanagement.contact.validation.ValidContactParam; @@ -30,7 +28,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.modelmapper.ModelMapper; import org.springframework.data.domain.*; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -54,14 +51,11 @@ public class ContactController { private final ContactService contactService; - - private final AddressService addressService; - + private final ViewService viewService; private final QuestioningAccreditationService questioningAccreditationService; - private final ModelMapper modelMapper; /** * @deprecated @@ -75,7 +69,7 @@ public ContactPage getContacts( @RequestParam(defaultValue = "identifier") String sort) { Pageable pageable = PageRequest.of(page, size, Sort.by(sort)); Page pageC = contactService.findAll(pageable); - List listC = pageC.stream().map(this::convertToDto).toList(); + List listC = pageC.stream().map(contactService::convertToDto).toList(); return new ContactPage(listC, pageable, pageC.getTotalElements()); } @@ -86,7 +80,7 @@ public ContactDetailsDto getContact(@PathVariable("id") String id) { String idContact = StringUtils.upperCase(id); Contact contact = contactService.findByIdentifier(idContact); List listCampaigns = viewService.findDistinctCampaignByIdentifier(idContact); - return convertToContactDetailsDto(contact, listCampaigns); + return contactService.convertToContactDetailsDto(contact, listCampaigns); } @@ -101,28 +95,22 @@ public ResponseEntity putContact(@PathVariable("id") String id, if (!contactDto.getIdentifier().equalsIgnoreCase(id)) { throw new NotMatchException("id and contact identifier don't match"); } - Contact contact; HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.set(HttpHeaders.LOCATION, ServletUriComponentsBuilder.fromCurrentRequest() - .buildAndExpand(contactDto.getIdentifier()).toUriString()); + .buildAndExpand(id).toUriString()); JsonNode payload = PayloadUtil.getPayloadAuthor(auth.getName()); - + HttpStatus httpStatus = HttpStatus.OK; try { - contact = convertToEntity(contactDto); - if (contactDto.getAddress() != null) - contact.setAddress(addressService.convertToEntity(contactDto.getAddress())); - Contact contactUpdate = contactService.updateContactAddressEvent(contact, payload); - return ResponseEntity.ok().headers(responseHeaders).body(convertToDto(contactUpdate)); + contactService.findByIdentifier(id); } catch (NotFoundException e) { log.info("Creating contact with the identifier {}", contactDto.getIdentifier()); - contact = convertToEntityNewContact(contactDto); - if (contactDto.getAddress() != null) - contact.setAddress(addressService.convertToEntity(contactDto.getAddress())); - Contact contactCreate = contactService.createContactAddressEvent(contact, payload); - viewService.createView(id, null, null); - return ResponseEntity.status(HttpStatus.CREATED).headers(responseHeaders).body(convertToDto(contactCreate)); + httpStatus = HttpStatus.CREATED; } + Contact contact = contactService.updateOrCreateContact(id, contactDto, payload); + + + return ResponseEntity.status(httpStatus).headers(responseHeaders).body(contactService.convertToDto(contact)); } @@ -177,35 +165,6 @@ public Page searchContacts( } - private ContactDto convertToDto(Contact contact) { - ContactDto contactDto = modelMapper.map(contact, ContactDto.class); - contactDto.setCivility(contact.getGender().name()); - return contactDto; - } - - private ContactDetailsDto convertToContactDetailsDto(Contact contact, List listCampaigns) { - ContactDetailsDto contactDetailsDto = modelMapper.map(contact, ContactDetailsDto.class); - contactDetailsDto.setCivility(contact.getGender()); - contactDetailsDto.setListCampaigns(listCampaigns); - return contactDetailsDto; - } - - private Contact convertToEntity(ContactDto contactDto) { - Contact contact = modelMapper.map(contactDto, Contact.class); - contact.setGender(GenderEnum.valueOf(contactDto.getCivility())); - Contact oldContact = contactService.findByIdentifier(contactDto.getIdentifier()); - contact.setComment(oldContact.getComment()); - contact.setAddress(oldContact.getAddress()); - contact.setContactEvents(oldContact.getContactEvents()); - - return contact; - } - - private Contact convertToEntityNewContact(ContactDto contactDto) { - Contact contact = modelMapper.map(contactDto, Contact.class); - contact.setGender(GenderEnum.valueOf(contactDto.getCivility())); - return contact; - } static class ContactPage extends PageImpl { diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java index 6f1020a3..81d95c13 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java @@ -2,6 +2,8 @@ import com.fasterxml.jackson.databind.JsonNode; import fr.insee.survey.datacollectionmanagement.contact.domain.Contact; +import fr.insee.survey.datacollectionmanagement.contact.dto.ContactDetailsDto; +import fr.insee.survey.datacollectionmanagement.contact.dto.ContactDto; import fr.insee.survey.datacollectionmanagement.contact.dto.SearchContactDto; import fr.insee.survey.datacollectionmanagement.exception.NotFoundException; import org.springframework.data.domain.Page; @@ -46,6 +48,8 @@ public interface ContactService { */ void deleteContact(String identifier); + Contact updateOrCreateContact(String id, ContactDto contactDto, JsonNode payload); + Contact createContactAddressEvent(Contact contact, JsonNode payload); Contact updateContactAddressEvent(Contact contact, JsonNode payload) throws NotFoundException; @@ -59,4 +63,11 @@ public interface ContactService { Page searchContactByName(String name, Pageable pageable); + ContactDto convertToDto(Contact contact); + + ContactDetailsDto convertToContactDetailsDto(Contact contact, List listCampaigns); + + Contact convertToEntity(ContactDto contactDto); + + Contact convertToEntityNewContact(ContactDto contactDto); } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java index 7e85db0f..d955e818 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java @@ -3,20 +3,26 @@ import com.fasterxml.jackson.databind.JsonNode; import fr.insee.survey.datacollectionmanagement.contact.domain.Contact; import fr.insee.survey.datacollectionmanagement.contact.domain.ContactEvent; +import fr.insee.survey.datacollectionmanagement.contact.dto.ContactDetailsDto; +import fr.insee.survey.datacollectionmanagement.contact.dto.ContactDto; import fr.insee.survey.datacollectionmanagement.contact.dto.SearchContactDto; import fr.insee.survey.datacollectionmanagement.contact.enums.ContactEventTypeEnum; +import fr.insee.survey.datacollectionmanagement.contact.enums.GenderEnum; import fr.insee.survey.datacollectionmanagement.contact.repository.ContactRepository; import fr.insee.survey.datacollectionmanagement.contact.service.AddressService; import fr.insee.survey.datacollectionmanagement.contact.service.ContactEventService; import fr.insee.survey.datacollectionmanagement.contact.service.ContactService; import fr.insee.survey.datacollectionmanagement.exception.NotFoundException; +import fr.insee.survey.datacollectionmanagement.view.service.ViewService; import lombok.RequiredArgsConstructor; +import org.modelmapper.ModelMapper; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Optional; @Service @RequiredArgsConstructor @@ -28,6 +34,10 @@ public class ContactServiceImpl implements ContactService { private final ContactEventService contactEventService; + private final ViewService viewService; + + private final ModelMapper modelMapper; + @Override public Page findAll(Pageable pageable) { return contactRepository.findAll(pageable); @@ -53,6 +63,39 @@ public void deleteContact(String identifier) { contactRepository.deleteById(identifier); } + @Override + @Transactional + public Contact updateOrCreateContact(String id, ContactDto contactDto, JsonNode payload) { + // Vérifier si le contact existe + Optional existingContact = contactRepository.findById(id); + + if (existingContact.isPresent()) { + // Mise à jour du contact existant + Contact contact = convertToEntity(contactDto); + + if (contactDto.getAddress() != null) { + contact.setAddress(addressService.convertToEntity(contactDto.getAddress())); + } + + return updateContactAddressEvent(contact, payload); + + } else { + // Création d'un nouveau contact + Contact newContact = convertToEntityNewContact(contactDto); + + if (contactDto.getAddress() != null) { + newContact.setAddress(addressService.convertToEntity(contactDto.getAddress())); + } + + Contact createdContact = createContactAddressEvent(newContact, payload); + + // Créer une vue pour le nouveau contact + viewService.createView(id, null, null); + + return createdContact; + } + } + @Override public Page searchContactByIdentifier(String identifier, Pageable pageable) { @@ -71,7 +114,6 @@ public Page searchContactByName(String name, Pageable pageable @Override - @Transactional public Contact createContactAddressEvent(Contact contact, JsonNode payload) { if (contact.getAddress() != null) { addressService.saveAddress(contact.getAddress()); @@ -84,7 +126,6 @@ public Contact createContactAddressEvent(Contact contact, JsonNode payload) { } @Override - @Transactional public Contact updateContactAddressEvent(Contact contact, JsonNode payload) throws NotFoundException { Contact existingContact = findByIdentifier(contact.getIdentifier()); @@ -106,6 +147,41 @@ public void deleteContactAddressEvent(Contact contact) { // delete cascade deleteContact(contact.getIdentifier()); + + } + + @Override + public ContactDto convertToDto(Contact contact) { + ContactDto contactDto = modelMapper.map(contact, ContactDto.class); + contactDto.setCivility(contact.getGender().name()); + return contactDto; + } + + @Override + public ContactDetailsDto convertToContactDetailsDto(Contact contact, List listCampaigns) { + ContactDetailsDto contactDetailsDto = modelMapper.map(contact, ContactDetailsDto.class); + contactDetailsDto.setCivility(contact.getGender()); + contactDetailsDto.setListCampaigns(listCampaigns); + return contactDetailsDto; + } + + @Override + public Contact convertToEntity(ContactDto contactDto) { + Contact contact = modelMapper.map(contactDto, Contact.class); + contact.setGender(GenderEnum.valueOf(contactDto.getCivility())); + Contact oldContact = findByIdentifier(contactDto.getIdentifier()); + contact.setComment(oldContact.getComment()); + contact.setAddress(oldContact.getAddress()); + contact.setContactEvents(oldContact.getContactEvents()); + + return contact; + } + + @Override + public Contact convertToEntityNewContact(ContactDto contactDto) { + Contact contact = modelMapper.map(contactDto, Contact.class); + contact.setGender(GenderEnum.valueOf(contactDto.getCivility())); + return contact; } From 961f322aebb1bb2741fcb17d62959a360663b745 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 4 Dec 2024 11:57:35 +0100 Subject: [PATCH 04/26] fix: test --- .../integration/QuestioningInformationsSteps.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/QuestioningInformationsSteps.java b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/QuestioningInformationsSteps.java index f26981cf..fb8b12bb 100644 --- a/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/QuestioningInformationsSteps.java +++ b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/QuestioningInformationsSteps.java @@ -94,10 +94,6 @@ public void createSurvey(String surveyId, String sourceId) { Source source = sourceRepository.findById(sourceId).orElseThrow(() -> new IllegalArgumentException("Source not found")); survey.setSource(source); surveyRepository.save(survey); - Set listSurveySource = source.getSurveys(); - listSurveySource.add(survey); - source.setSurveys(listSurveySource); - sourceRepository.save(source); } @Transactional @@ -108,10 +104,6 @@ public void createCampaign(String campaignId, String surveyId) { Survey survey = surveyRepository.findById(surveyId).orElseThrow(() -> new IllegalArgumentException("Survey not found")); campaign.setSurvey(survey); campaignRepository.save(campaign); - Set listCampaignSurvey = survey.getCampaigns(); - listCampaignSurvey.add(campaign); - survey.setCampaigns(listCampaignSurvey); - surveyRepository.save(survey); } @Transactional @@ -122,10 +114,6 @@ public void createPartitioning(String partId, String campaignId) { Campaign campaign = campaignRepository.findById(campaignId).orElseThrow(() -> new IllegalArgumentException("Campaign not found")); part.setCampaign(campaign); partitioningRepository.save(part); - Set listPartCampaign = campaign.getPartitionings(); - listPartCampaign.add(part); - campaign.setPartitionings(listPartCampaign); - campaignRepository.save(campaign); } @Transactional From a156c3e840f664bcb87c11aa5ecb3f95ef236dac Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 4 Dec 2024 15:37:49 +0100 Subject: [PATCH 05/26] fix: put metadata for webclients --- .../query/controller/WebclientController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java index 9424d7c0..889820bc 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java @@ -302,12 +302,12 @@ public ResponseEntity putMetadata(@PathVariable("id") String id, source.setOwner(owner); source.setSupport(support); - campaign = campaignService.insertOrUpdateCampaign(campaign); - survey = surveyService.insertOrUpdateSurvey(survey); - source = sourceService.insertOrUpdateSource(source); owner = ownerService.insertOrUpdateOwner(owner); support = supportService.insertOrUpdateSupport(support); source = sourceService.insertOrUpdateSource(source); + survey = surveyService.insertOrUpdateSurvey(survey); + campaign = campaignService.insertOrUpdateCampaign(campaign); + partitioning = partitioningService.insertOrUpdatePartitioning(partitioning); metadataReturn.setOwnerDto(convertToDto(owner)); metadataReturn.setSupportDto(convertToDto(support)); From 3ed91b7165e042af43df3dcc4433c0b935572fb2 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 4 Dec 2024 16:53:49 +0100 Subject: [PATCH 06/26] fix: update MDD --- docs/Contacts.jpg | Bin 25566 -> 0 bytes docs/MDD-pilotage.png | Bin 0 -> 115258 bytes docs/datacollection-uml.iuml | 164 ----------------------------- docs/di_pg_sicpilbo_dv03 - MDD.png | Bin 339648 -> 0 bytes 4 files changed, 164 deletions(-) delete mode 100644 docs/Contacts.jpg create mode 100644 docs/MDD-pilotage.png delete mode 100644 docs/datacollection-uml.iuml delete mode 100644 docs/di_pg_sicpilbo_dv03 - MDD.png diff --git a/docs/Contacts.jpg b/docs/Contacts.jpg deleted file mode 100644 index 7d143921b33d3ea63d4b5bae864f4d3dff497bab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25566 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 D5)$qx diff --git a/docs/MDD-pilotage.png b/docs/MDD-pilotage.png new file mode 100644 index 0000000000000000000000000000000000000000..15e38c4cd3438f60ee25ae0dcd2fc63927e14e57 GIT binary patch literal 115258 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

|4|b;Ukl+vu#qdDLm%6BOAAKOA@`dqhrby4W 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 z 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%0AvK!B&Rba=oNCcC6id@FvR#*qvcmcDpig z>_6pv5+#T)2;#ovSZ%T;^)oJ*-2mF5yP4ar=U$;TnY!-Z3B~^?3;%tT4{DW3DrNrj zD@*{Ut3Loj?S#WGQI_b#J*%`S8+2bcR|MnbOF2v7g1v4zTq>_>+#Wy?##4W2%`@Z|o z|D;dq;uLmxL5@Aq798u?1`_aQp!B3C4Cy*CH|=386=Q*X?CbLeZC{-5;PmC*@I?;u9nfUmE^w^Xk|_w$&=qV*rx{ zqLU#O7ej1=Da3O-$o--{&0p^OY6w>#rE~?62MB0hc#-`91dMBG2DQ#_{Qw4ZL)QsAcihXi*Om zZR7Qb&+tc!j5#sb7yCR>KU3~NJUWcgmb zpz7Zr3QW1=C3kW4-3aJQaDwp}vH5~N5tBukxp%ojV5jH(?SIZDfaI!q&$hO&i_y^SM(+3aUt;)DMnK*Y$e4QTAc zy&q`0Sg<-ehrPMJY6f;bVq43vcyGGBmRE{G=U|4EOU1(RZA}pPF zZk{M4ApBFr-}<9qAd-dyny<4zPBj8N`SuQ9EA8Ug#w8801Znu(_{1f$>1ropHpn;R z#GhS&6k28FtoR!Py0J2BVKMx%Tt}U5m-gWf9YaWO7uVE)M*_w17k7|}QyYMXQX$%G zaN?+pLv0du^p)J;4gXi7o##Ck6u9^H57<3M5*1QYpO{*&55}6$83>erM&`i(!M#xe zUEh=4Kxsgxc98Q{uE;;oV`v>gKkg!cx$~I@pxJ`twQs)opMLc7tE10nyIic$CbF5w z^u$q96Nm7A2N0ln5SttUfZgKRVft^a`han=L4S1kXjpWx4yMhJAG9&yIzBd)9^~&= z!?vq{82y0zSvDuad1-7l%l)%_6rTU&f6ND%_2lCCI!(XpkGBM`GBrP0KEuo8Jgfnr z{2q*{BDY4!L|T@wx&!3xWl)?Da1;4RPQn&QCi7ycf`x0m8Ww~qiY_}pG4BLzXrP>D z-Ma(UZhyQ5J^R(|sHiP8YguL+S8=39{3-AY z7e&d`)HMs$X+95A(+BaPGK290CB}9o5G4lSRy;m+9|-L-S`;?@>{tC+h`Njv)TFnB z=$Y;q?iw{YPD`S8)Q1Ka38xC%cy5NOpmgFt=0-}G7O)4ugJV;}-@_@*JON~jSq#Ya zz79!iII4)kP)^lhsjG2kAOJf7l4bUd5mA^JOBq>^d~`|@%}d(GwIGsO%Lk&~e=0bc8XpWW82j6S>#Rj4jAe?&T=2M_ypEnizuNfR2U8z2uI^TN zZYyoyYkdFJoYqjuJ_l3=}|HbH4|~4Jrgdq>sFcRD?j%;9C#()|E{w8W7TF2fR{` z@f#3(5NibR>YOtmVXrF16pAVYCS#hX-X3`^oN+1dmqU6p)0Fp-vNT#XIkXHLI_(a@ zbf$ljlMqp!p0+5~6t?f3I#80D6Y*K$k0n!q^8-NAyNX-cE>obAK@b^wNax$3*Vh&o zee*51p8%~U@@k8Bht-KaBy5p#MeF}5OD;3>V_RW{*JshDZ0G zl6G5$1fUWsdM2B#Tg4IRHBo-SziRE~KpO2?ngSTPQ`=4BLbP5G9qTyg@hd0?&ZB_Z zUPXZl5LXAg;wPT62?3}>~87cxIf~E zrK*(ao6}p~>Z%=55Xx`OxI`1MUg*Eorb!Mf^8j+&@HK}{^CKF2?HIWKTJptlrQNoKmLOLunL^!N|J6)hWyol=9{P}FfSbVd>e>b%7 z-|%NxEo%fV5VTUC18WhCpFroNFm_PFw=ghZ)7nGszx5AR(PAnwiXyMa7%unnoi-IO z~UgqCP4U7)BPaM%I{#r4UyriocSV zuX+O^%9P!@l#KJIZ%n6p*=ZOmRpq1>tk&t!`2Msq?r<~UJJQ4k8uJPnoD z>**X*##xHLlD?q=(1@rI*KsqLMk3lm-e+vo4J$ize|V_g+Aqz!p}WKIw|CZ9YAfz( zioeI|P!+aG`*V~dISpZB{!-Lj~ipUq<@u)cXWLQnf7pIh>7 z9e426tr@gT&~HzLgCsvN4cR zWRvOl&PC6oRd1uV=%DDvIw!*>-Rp6KAtA<+D4n^sJm9QxwD%=YLz~vLpegNKDYO<8 zro=BeVbH8VIw2W+o++XFfv4H}#&yZQ|5`>?h@#^&(?asqLj*rd%ri>}aI49JuR z1O_8xZIwT1NB>JEZ>*;DCPZDchhLm&%B6$9j%1z1?*;(gHjwiM*<1K4gx>bpb@jyP zxoZOIA%=-2O-sKdxl#unw^;PQSAC1LLPC|^>SL<;H9$?bihEy>_o#$VdJ^(h8kaQr z3y1}MyTcIP+l4NQHng|rNR1Y%#9q4Ss}gu$X-8-XKV^1l6qre|NWM<~i!hJE_h*NP z@gNac)c=;$evXaOmt>PVJtqs+&(;hOgXGb zaNhVtR_V}7kOi4F6P&>%1->S&ht)DH=h{YVjtvGb)E+H9c2q}U$oE<&`=c=C2SY6` z<5DgFOJOxeF(1mtc)5;X6Zxc zDeh-MkcT%-C8q>Y0HTkUB8wiw_=45MKA=IanCdaaU%K9~jRDlURZz?E8a+nwLklYi zX>k`j9TXhvUgwE33mLGR9?sT#b+Cr#L~nu`#+0*`PvS;yR6neD)&)X86P(8-F0KTD zLcx>6^${m^KrcHI&iL~A7`7=jPV&7r_EHby;$91IM!0kOdalg|O><4tCL+vwAOEms z`c6Fnz7FXr_qPimE2-EJ_A0fOf~6)sL{{F)Ckk;Q;|8cOeAEfS^4-51tN+J<{J%vC z&A|-JH7S%=@RpKPxznC&wU$;OcM$?Ny0@{s13q=9j})^eiw$xA6yQW`Au7#XcAirJ zS~A+1<7zh?{}-;MDP7<~N47xusU+uQz^}7kA&BMZfZDzKsSTXkJy7R%3uG-nVIx&I zCmPt`0^sa3P%H@W9}$OKE4_1-bAdIvUEe2^L`aFuyFH+)`JxJNLNmtm>3k}+GA~(GvL`@x1EB$IFBM}&0GuPhdJ!pC+!1?-h>-bvHiU5dcLfk zn~d)r0-e$Dlf9Ss{xEEfxOih4)_l^Y-l``@;kTjIFg{vU%n1@=yIGX*8aYGuWRo+@ z=A2a(V#Wiz+Zjv0JX1lf$Ys;|f z>#HMYYdWsF-?)Z$h%|OSG(27adPy!{-t!qUgDelx-?W09uS+AUlXsk9_~GOQ@ST65i+ zjDx6v7-6wtUbM9)+NkTg)n-zx!S?dm>nSVP_Bdx4gmm|JF$cll0zKs(HNlG)QRaOU zVy*g3ezm>(J$^MCouktw4j{VcVb;;*{MHx~S!tY}7>ek~7X5|zQe`ey0!;mFwV7AZ zfck|qgu)YWm?{jr7h}8 zz>IRS?Z3+Bq3c|Rup+tJUJ8xh3TKy{$*>EdoR~8cRiOGz_aM7Uw~Kqpze(pwWal}T zeH@KYgvN&A)p1gts5UMs`IiKqyT#P2A6G)3&wIXVFN@bI7RE_wkT32l8vu|p%O@bF|&l#aCFA!HS2y*7D(hV3y^8b4r!u~Lc& zQTJ#|)zgiG#}@8T@N!C7pd1o1mK1``pnWiok8aD#vAXGZ zfSLLE)1aA?X}BBw_EfY?&fH~@sMnXmDCgGU02)|TQLg523_96dlTL~P-F@r4Mt{w zQBvM>GGA;Br0bm}RrFrO(lRl3dP$wN&q7uI992D$s_V^pUGc4YjQ0$>BWrvzic~J9 z9+GuILn$U#bXxeCwdJ>?%#_N&7}I1QPjmGQam3u@LZybO%Z1UYRMXVrH0=&akwYq7 zKIbq+$3`W({9n?NjUC0g`yeEl3T|*Yr(~L9nm;|TnDR;*QHiA5PR4!zEC@#^*u01$ zG-D>j5t+OEGAZL_MaVH{an$@hWQE0i)4g!e&=Fq!qRis0sDI%DW5?AInIK^Ha%&P* ztX*fx+N%P$BGv67>uY=%l~q$G89MpkevyJ&R)Z?Y+)J4<8kA+km=^E&)fUW;^54Od zKj^irJLSU5(NLQ*(D&XSlIRmYbw2J<213a@CO^VXa5C&E( za3o15rK}=Lbf-*;8khiOl4%*8#wA-HT`3TNrYxY>O^>>Cy2|=0oy1}GikNQ++gdPm zGzvdFGf_h=PKMN-5Jwm{qh}tN7H=R?E|X(LZmV$b#G{uNR~#~ha<0u*nL^1t? z`PyF=?1haY5&XHpmjh*{!Z z?at7ci_KH5CRU*@e0>kLpP(aqN*@!(Pr422(#^Bgh|ZTfA^k^@Mm@T%=8iRJpVCUp z4(riH;ZCbOE_%KX1%p4~!9c|T?b7i9C>K|AhEJ&K*5_e2M}a6>3ZD=JSyuR>{JNo{ zUe}Ul$(iMRQ%&;n3(_%!tqcN0)TqKSR(X0{H4Y8OW6abiFg<*%#ezHSbt6fjQIX>S z+G;c@G8IwkZfU=(XV-l!T*n_LfqB>79a>Ui;0M7m{cMm=%{fN=U@j=)eDW#mF%>Ay z1Oj;=tHD6&q_a~>&s&S;CdW6`%VkKMQMapw8$mS>t_was>vwHvjLW$mY>`6g*p-W& zM)=0%1N{k?N$CbZ(>DAPhwH7;|chLpV@i*42(zZ}M|D!cy zbnX&FXMfvTYB#7`{rTEjX6^k%>bjf%11CS6_3rHIqQpa;e1(O$cQ+P^XU)`)2$-|i?%&_J*S&n)WYx=IZ<~uUiykreDujWk-GZ}84LuMSn24I!TIYT zh2g=Wu5z|8JM<--pl!6q%;;#K8Eo!JQ%a(|8#%XP=(S2$bLoC9n7ToMoKE_FT3isJ zSICWjWcEyqb>0Mb!+ce?eu{%N`>~B&UF61Pt@^m&EH`ymF^R$Ax{1qK6WEnVU2pXf zMdo*>)}(9Z%pR*e-p^P3nsf~gHfw)Mij29W7GSs1+B|bFmnyVNmcjFauwfJnblq^ZnY^Bq|GC%+zX z1nr)K5*I4e`;m?2-er&~(-Dg$?e;-0P2Fg&>U;$b$|%yy+A@wmdCtZNOhbw?4a=F> zaWkfwQiE(0tjIc!A}w=WyK^>xGpejnRyvH?Z=iqm{%~UFT8kUu7|$gZj5Y z{zewzK+Cn;RflIUG@YFa?J-`9g4ok6b-nZB|5wQ07is`!0C1|GA9#9gV!td`4}iC- zzKl>=fIR_@1(2>V%*Nq)+{(0&b0Z&)L*CY`k9zT!APA@hNQmK7p ztJ&-TPp>;jjKwjeze@R@cr*13zf^dmoClb>29N&Tj4=m3&H1P*G3J&qw*B(~D=MYl zKfIG!9W&0uLrnr8O$=Bf0QPXqIkg2JguG@=W1>`w&nKqEJiL?F72IS? zIn+~nv8QBP9|Q&JnThW-?T8~YIi6Hj%FtEqP^np*MK{1J_ElXhN8 zT_y)4Zu3id?~}a2cWQR}><-(pjWPL_leH5?Ss2q%Gs4{LZ09T`ll|Q}oyWNMbVpqE zSsp;BX^594R!BRSpDwS>=Sw6iaKb=HHDRRGgZs?hz{B`MW)Xus>*9exk>qT z{N@vLia2{&gmA#GYdwlKy6*AS76zF>x#bz6oM~^dyxA_m@ z6Vn{#QT4G_^ii&z`HTJ3HD{dps5UbE9mUMdOsmlPG_7xPQ2NMFtNP=sKJ=0G9_E9x z(`M!H09a+M&AaG6BFr*a97fTcALC8as#a$pe}}ziRF8?FH?Sp^JJ>4!WVGXnro@paF!3! z)%V>vDyt~h-`>~W2|AJ1E{QbstnO5if_lgx*yEVNvHwi$C31jVRrTQAVN~ca!MtHl z#a0tdyi8-O>IY)w!kWkFeEN5f^C%!d>}TH2Sxi5f<8}RRXv1@)c3#1` zO{9+ohy7%XVzYLa9iuVrQ}(K;RBZ)yd{YC>Ty?x&i=0FMEzL9AXaj{71k>=RtY7$s z*VxN-KHIb+t+>XqoOQMH1xe0#(u}Zo#(C(hIHF5s!GU|nLaCR|BEITO@-LW3$)nuL zyBkiQ=LpZv{~?I`g^B&YK-&N4XcA-PN;qj^=U)E{TF65uqK9h@fCr_nROm0Pv!#4_ z#k!NRjA3n&5k5x^=dS$S*O!Hk~H_kXE=#0=BR^6n(aYXuNxh#uJ^_oTQ^ z+H9l13d1fpz*7vnb5KXg!!tC}!Y<^VVr!vZ9UT?P_q2QE0!T^j zm-`<~2X9kMB!>>YD>tojgnN%euu18PyMV-V@`=l!QeHl^TM&!>FUwa+qK&n_Kv*vM5c z+R4p?+8F#gG89kb0tZZl9FPy;Z zKeH>M)?i}niHtK47Sgeqna_!*|4VKKR(}dY@-ZP0oq;}E&5L4lemYy6FjZmqoN=sZ z1te=22T0h#9~mOLj2+2&%-=8mcMJ<1ErT5*PakzhZ>T}(>2>fI>E#H8U2guU?B{cw zART84MP*Iof&f-++DwO}JnpIcd$Wg*{!ZUwOG~FKTXWN6j%X%E^FM0 z(T+ovI9-rQ5-6Wjd4*~zQ!=TyYG@XM?MCDuaPz1vpFg8uk+iGFsQxABDXKg<$JaU} z$dTTU2LSCfxCxrFDPTzzTD3k-f(BGX7PGo?N; z&F)vls=>U1Rzq7jB0jHZIG+k%L(^2tbujYA+1+rM`<2y4pFFWsi4EAC+h=5b^Sh&5|K~)oLT8--7o-v z_F$QB+iKTEW?l+QJBguyQB?3>6hvOnbl8(xvcbGMp8_O|lM?o*;ekZc435d{XfMEU+d`HrTp8*~{ztzkNz(?GFeK2QJ~2jmcN2Y_*Tx8U#ljzOPb*txqd z=MHR6q<*ueg?a9psG%@>yP+Xs8%ao(tRr)U7yuko!bNsGUEeP?*St3BMT{ z!!A5LLBlk=SN2njYBzd)Mf0yEckCqm4tm*n-fFVlBV{ckGgOCiBVeg{@gScIU2nq^5 z%#b6#5j5ISoB|`$wq9Ktk0@3%T3#}qc&5%N^Ly0r7l#o9KIS(Sow29gP>}&v>FL`gCFCBbw$lW|yY~r6P*xf0AQqV#EZFiZn$0{?va@ovsh+ z92uOML=jwtdT9nWdjOI8LLA}WF<%2T)L_w`Ud{tvr?Eqb_n2+eWP$RxJ7G)c>9M64 zA%g5gzTnDR{To8<1{WAqJ8UpOm~!~^?CC>X|L)uYC@GzbfYvi=XBEYBNX9 zYtes{^BJN6>kk_x7fd96U-h+MQD$JHpv;=RFQZyX~>__m&mZG68b$B1f>y+A_s<|YAKsJkYa zBvY?tvZj{b{7Z*a3G`jrUR;{krV-Fo$V~^o54=sWjUWZ(gmQ$k^WukB};<^Q`N-&w5z&L4m(!+65aJ^ao#&;FX!~*Q&PqQyHh%X zHL$k&ab=~?MFi`m!2BD}&Zl_6A%lf+sUO?5J|BQ$xStk<% zl-PrSWz#~6)vT^2nHRIU4s*o0HM2Se_RVbev|DBJq-eQ`No|tk@D)umY#%Vj6j{T| zdDEhDxCeCHt3fV&{d267Fdx3Ib4Q?)5>qN~AgD=S^wX%p;7x^y^Tu`;q*Iw2e|ET~ zgc8wTH=jqeNb*nhU~RslI9e%>p+1h}JQmD0^ivh3c< z$c@Dx#NZRY;Zx@%QXJKBLtb8j|;!f}0sP^7Sp`=AhdYxLqp{@x%b2Sv}zEQ3! zSG+-L!V9<_D*5d}?aBTG00j8Hai2C#x`&i5u8)gtw=y20q<2X3{-_Vo(8Nmc4)4dE z$(^D2s7_6x(e{PkpB@BRiG~M>hf1X2)^*`0FcE&XkQYJy;ka`#(Z4qBuyq}5aWijA zq6Re%eFw}5?N<-I3F>wU$?`1v4k-?Aa?S>@S&u@#hV7XlHv=Q3fu?Z$|C6Thmfe~y z#1#)f^Bx9T!ZV1qo0FdTuR%UM3}Ad{9)`B0DkhPHbDCBkQ@0EEvk^GAfA2EXcg|K{8I z^WmUQZnn4kS~Iyusx>R|Sa5Ae2y2OxDEg@3q8_6^tr4Ib23@Ml+jUt#l^33Bg4QO( zTs-FRt|#M4j>p;zZ>XMHzWnWAWo6|J$vVA}N&}SBm@b2Pwgu{kLTpx#J!OzL4_dD} znOn&qmMN)B%*;FgS+4o}n#QnK=QFv~6Dx_meQ!wjgjw8RWihqmgDXV+^`=RH zPIRHRm>uyNdmeX92=$uULrC85wzKqI_!Ln=F=MBUd%W%IaWG_vEHr#%EnoWD={Eo*XQiBJ-o+S#o>rC|(+#*a8U&O| z=1;Jp?owgG37{lAjd#5SNf^%a&gsAEsW~|xEOStJ)+Yv!y*nd%cXpARe0eR1jX)N? ztJHc%wdSe=`_dk`6c~5F7@M z26?&9qjoL_2E%koRR6U7f(L->} zIiv8GU{n(Qmz~z6EXNqqlh1qap99A!4G{w6=P69jIPM-96aPxA>d30^k-!T@VkX{;`nm|w|d;;tlb|t zm0X+t5~gzWAY*Nf_d%C}Gr5u6rvl~08^xKO zT)+u(O#>DeJZGZz0w;8030LWfDp{8+XZ&s2Dnew4GzRbVN_D%5nx_Zjw={hT7O zJQVaA(j9GF13F>5_al$4c};1aGAj{6mWdc1m-F(HE(nFN%uV@oWGHF4k}&VMNQ|kr2Z5tiArXD2 z1%hqv+Fn(3&rSm-Q>m&AC3Yw7dlAZKlqx{}68KOY=aeAodRA!@bGo(|?c#i11Mx_? z&wb2Q9SJc}i8mx3FVwl(lj@>U)}alZK{m?p#3av}RHE@XH2c*h^8I7ObCaj@Zybio zwGQ2C@-)I2lf^5sMMEycgc~*l*}hsQ5xS`j{5&n5PZrO<6it4`?c(_9!wxBCFz6NK z2lZ0<;oSUQe=2}BA@=#l1?YdgqD%%!k<}8;%UG=SIA^AysHj6mzN2!f8l_AkAhwWH zrg%yf&{~ZxxoviU&vempp|=cOdSMd&ZxYmeH!wdJs+_yVqxb&T`>a$3(4m;jiv zN#bf?kK)G%pYF_xUd_&r`*iWJ)&4j`>~o1ZIU-&eCc`=#fi29M&dSU4v^-IEO=3bH(p zo7Jd;vZZBp3e=fC`3*1bwA|{z=)N#A@++>u^Mkv8)Uc(F#27XD?U?*+0@O1^>YG85$FF?XSnnzO^reyUA^HU7D)ZaeC|+a{Vn4G5^ZCM;z{%3N!04JVkc zr1nexyvJu7y&yT%#x+5Uf6vjDgUPn>Xh>~cDr zUzF1>gR$cC@A39^+Cbg{&ksG$2-)Q=!ZcNMyKaO}Gu9M!kN&iJr`WWcoBgSO* zG7piytWw~@K9V<<$&Ama6s%0@`s}yXKb%!^S4hTqwubCAk zbZbt>aw`5v2-%NT|0wxtGDr0$b?F_iPIB|(hUirbU|caHBFVJ?r%)5Y20*RPrhB3E z4ze|ma{ODN^E+H?haJm6<*a0&IE?LQ$91vbj(QdBU8L@mvn|d?n-Gm=5LyXe9S>4m0q&mnladMmi8zX0l3e=#i)2oZOh7+<-g25?>un_ z1@{!JkK54N;C-d;2`zjD(0PC<=UO@0FS7jcN$p); z^=08v_}jd#dUn3~3$Fh=roB-UD4-2K$UA+U$V=IIgR=uE%wrADpr7eJs|wLdiaFWW z_9J|6lnjA3(->NJuyaCjagoKG9GkDgjpv>Fx#t0XpQ5p(ukc$nY7POvTxju1`^?i( zyeBU@q0IhgQ;XFbu*tj@>cvHisku2VX!G(E{fJzGxQ1{YVrG6q}}F8Dm)^AjwvHJI6(?B{xoja z@DxbNE4Pyb3m`r=P(jYF@5=k^X9=%kZ`jn%DNpaPS4LP1W#(nD;CuNq|Gf&5qeLOP zzAb?AySD*(fAIbfQLsA*X8t({-i5nfJ+}9>;bQoYAF3bV^Th(3x%kd$0gBj8#QzH4 zcQlZ^sGTmpiQ8B@H?VkEj?u-XCXas=MF599b}?`f^%ZuWTeQsjBHe$Qzi_Jb08Pj% z4)jVibeDA4zmF3B4!U1H0_RKCTl8W7yzbMzX|g*RGNf%=jLFCOH6IY?eyXr9GVK#! zov_t3e=z=3jdo9hd*;6l#;O)CvrC zcKL0tceY`Y8SDymZeGt=;BUH`@=>@CmVMJa#RGWruOeKNG16)h$drBG|7|agM2`!HI22^<@zv1cK@dK>876sEq1tnWiMpcNMeYG}W3`v{DZZ z9Zdy+K`B6&JM4qwchq#+R_EV$I~f$aS^(G-ov; z$E5j0X5J>HWEbL9vTm8a*s8wHQA)&`5j=LU@29TmbqzRqJ92mwvCqp+m6kOkD5E>u zJH0Nfax!Tdk^RuOXy#rO2EM#Mn(%!qi9^d?l`pSxPs^dk5ZfA5w4kQi+Z=rL5*!cD z#cwPi=w#>OaqG!iEXfh~&cfT&>C2GNM^g2=j7aqfT@2ShJUH1Uh*Qb8L6P+*>d&o8 zpcyA*wSMt;R#=r5!=G%Ig};<<*eO?=(|`M%f9ll_{-GtABImcNmG0jX`cRNCq8PW5 z-uc(2r_|j}-0LOG$%a+j`yNTdNBvy9Do(y=fZX>z_sUlf1Wk92th)RMJH(PtG;#&k z$H5qW=gn|>u zFpjDz(OU8QH zRRO|-6eJ1>p)moJz>aRi{qCcT;Dw=#?(+Eo^+wGduhxj+m z7Gw9rpZUSH;fSX~K+Ii`vr*>6uv6M3!BdP~?m#eT8N@?9J1e>-$(7^F4wel2X?NcN zJrojS#i%!okR-6w$>(y3_rws* z3rX18S-WuWi2?eB#Hp0vj2JmMSZ~yf_>L$yb24-BFU6bdZR5o%S;44db9SIYPNFVl&Ju zZdY7*W=~XN%RIXiIy2Cojg*7ao=}>8kb^^gp1aW*^}i>YlSxx$ZI;|-^Wz(JH{uHR zBqMPsS3^eE@44ca7cZ@qV~M*>UFA=3l^E8&iEilYh0vUU@4#BulP&}dwki>oJ5wW? z{MMpu$vCfDHoURy$)i?u$+pN@CCage{)p5Js-%t2Y_wl0uU|WTlo=V9`ET0q#&o_QD7o(r`jhS)Cd>UP3JO12|LDF#u3akss{kg zK`0rl*FaORdZ}9kQ1cB3oqz8vCC`$ND|#QUkiaVNAN1eA^xHQpFn!HlfoXQAbKLm# z;TYMqZAv=5`MxEyZ=F1{PmSd+ko+YJ6|2JDkldVW2V{xHC%z4vLVN4*2kFnrtGu7Ygm%kH@x!$2C#}e7W+9Jn_YoPK0RVAilYrZGg=8_-i`BYP^!pR&lpHjs- z(*KYU!?HtJ8XXAln$Rj&+Y~&+hkh@Ex6+KTJ5N9BzP9->NtSi_f|+;mPgmoXx*DLa zRtz78kXP>Zc)zpr)J<|$j6HeS3cd{*lhumM3D3))h-Zbq^`I~?xV2NHx%E}Y@^EE8T zavL1?QR`Zfat`+cDJMy@9IAgKjAHxmcgEty0q!+xJAk6IoI&r0o5|~2+!r0#8yZ$1 zwW*BLJ7HR6JXnzt_2zD1(9)UC{9tfgmoSFN&?8w5G*qcdCLL0PDez|wZOsU$RW#4g zsf+0vK|wQ{F&kx0j`{qaEL0Y%ZPK>vu*X5*c9Ru3wMJ@)eQ5&KUFAQDz?6kQ>(Iv) zLHDRxy=J9``R#{9i+>iPg+=)_+U0@%1<-&Aqnlx#x*k|T7JJX}zBzMGX%dD%z&%n%qJ-lX*ct zmmg2|>fJ=KH|>NMbTjb;e1|N&hjjYQ+Rz5|fkapa-jtK)0nVnd;(A5-gDiR0>|Sz+ zNZ&pQ>*e6ajkKUWr9C-ylqBSp}~g1L|ZPEyHOIy0+)OJ zW0>ppY0fq~=&*-VB*_37Xb?f|8clk}KCa_`=?$E2{W%nQo4axSZCbi~k_) z{Q#aH@M*I+Svan!urSnLm*C|cyez6(U8Zu0JFK)BqAY8K63_!xSH=%kewSm~q%6k0=1f4V|0iZbFsI`IA++{#gb8He-ol0b<2X@s$;QB z6MgTp8Y(O(lpG(^X(=hsxWi>4WEe@Zb;3>99NIM*I3|N9Xx?}voRs$kQsVp8i%nXr(U>mIg47C z#Y48aHRH*{$Y^3n89QW8I1XZ9ae4^#OaV?swD*543qQvH{As}3xdor83*U1=*4sr2 zhrdb}bH7nkzTU=y9Ce2Gxb$3VopRnrf^Z9+yLO&^1H!fv9j-HoeO)c6>!6_1`ZDjX zAWr>5aIn6%WHi0M=qAL0+`0XK#7j#o$xG$Axs=qUd8w($7ez0Em;D2)zJ3pr6nxaH zzw6DQe#kJ*@|!pv{#X2q5Roxy4=!2waXH~BZ+c=e)YN;xc)JaPU3g-{!7e=B;1p%4 zZ`oGJX|)d)+NXlV%>r`^Lr{sVz0?JYd3po^N=Cc>CjHuOEyT+t2?JJqn*bqJ06rW9WgNO5IT&F3s`fx>A9`r2|JkA}%X<0PaQvX7Lj;HJ zy>B#|Vpo1m3?amSMG%mHHhAC(dtjWC`cR?dOWv;cLV~B?xs~4Sr9e*RN~^dcBTX#T zWrZl-xVU{D%p+NSOE!J*KK~I3t^g-VTWZ54#zjZ;3(-bja00FFbT1Xop6id* zAMDe=Lt3I*XYtqJ=i|Vi&h|uX&|Q`|!Eh?4*I2n(W2iH@b#Urr2t)WQx>$ea1U^I- z@!@>IdUyMo4lM1iwAsZHX!rweftwTo;wd9)G%`~T8k7F^;P#2KQFySdq^ka?>u3 z<-mo-S%wA59SBY5;`mVJU0E&N*uR~j@v{n&K@pf~@$D-~pEZ)lkPC)PL&e0in>GLd From 65a35fe909a3247d4d5e58d4ca7cf1205ee855e7 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Thu, 5 Dec 2024 17:23:15 +0100 Subject: [PATCH 07/26] fix: improve search methods for questioning --- .../questioning/domain/QuestioningEvent.java | 2 +- .../repository/QuestioningRepository.java | 14 ++++++++++++-- .../service/impl/QuestioningServiceImpl.java | 3 +-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningEvent.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningEvent.java index 2c9c21cd..0459288e 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningEvent.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningEvent.java @@ -31,7 +31,7 @@ public class QuestioningEvent { @JoinColumn(name = "questioning_id") private Questioning questioning; - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "id_upload") @JsonManagedReference private Upload upload; diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java index 85b88662..5a64dcdf 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java @@ -4,6 +4,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import java.util.Set; @@ -14,8 +15,17 @@ public interface QuestioningRepository extends JpaRepository Questioning findByIdPartitioningAndSurveyUnitIdSu(String idPartitioning, String surveyUnitIdSu); - Page findBySurveyUnitIdSuOrSurveyUnitIdentificationCodeOrQuestioningAccreditationsIdContact( - String surveyUnitIdSu, String surveyUnitIdentificationCode, String idContact, Pageable pageable); + @Query(""" + SELECT q FROM Questioning q + LEFT JOIN FETCH q.questioningAccreditations acc + LEFT JOIN FETCH q.questioningEvents evt + LEFT JOIN FETCH q.questioningCommunications comm + WHERE q.surveyUnit.idSu =:searchParam + OR q.surveyUnit.identificationName =:searchParam + OR acc.idContact =:searchParam + """) + + Page findQuestioningByParam(String searchParam,Pageable pageable ); Set findBySurveyUnitIdSu(String idSu); diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java index 100ad0d4..c5077971 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java @@ -143,13 +143,12 @@ public String getAccessUrl(String baseUrl, String typeUrl, String role, Question public Page searchQuestioning(String param, Pageable pageable) { Page pageQuestionings; if (!StringUtils.isEmpty(param)) { - pageQuestionings = questioningRepository.findBySurveyUnitIdSuOrSurveyUnitIdentificationCodeOrQuestioningAccreditationsIdContact(param, param, param, pageable); + pageQuestionings = questioningRepository.findQuestioningByParam(param, pageable); } else { pageQuestionings = questioningRepository.findAll(pageable); } - List searchDtos = pageQuestionings .stream() .map(this::convertToSearchDto).toList(); From cbb7feb01482a0a7678004437b8c45ba8c9f6dd3 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Thu, 5 Dec 2024 17:23:23 +0100 Subject: [PATCH 08/26] fix: improve search methods for contacts --- .../contact/controller/ContactController.java | 6 +++--- .../contact/repository/ContactRepository.java | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java index fc970dfa..ab93f56e 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java @@ -155,11 +155,11 @@ public Page searchContacts( switch (ContactParamEnum.fromValue(searchType)) { case ContactParamEnum.IDENTIFIER: - return contactService.searchContactByIdentifier(searchParam, pageable); + return contactService.searchContactByIdentifier(searchParam.toUpperCase(), pageable); case ContactParamEnum.NAME: - return contactService.searchContactByName(searchParam, pageable); + return contactService.searchContactByName(searchParam.toUpperCase(), pageable); case ContactParamEnum.EMAIL: - return contactService.searchContactByEmail(searchParam, pageable); + return contactService.searchContactByEmail(searchParam.toUpperCase(), pageable); } return new PageImpl<>(Collections.emptyList()); diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java index 11426db5..296e1064 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java @@ -28,7 +28,7 @@ public interface ContactRepository extends PagingAndSortingRepository Date: Thu, 5 Dec 2024 17:37:06 +0100 Subject: [PATCH 09/26] fix: improve serach contact by email or identifier --- .../contact/repository/ContactRepository.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java index 296e1064..b588cbd8 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java @@ -28,7 +28,7 @@ public interface ContactRepository extends PagingAndSortingRepository Date: Fri, 6 Dec 2024 14:58:13 +0100 Subject: [PATCH 10/26] fix: add missing index --- .../questioning/domain/QuestioningComment.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningComment.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningComment.java index b1360150..bda02a98 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningComment.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/QuestioningComment.java @@ -9,6 +9,9 @@ @Entity @Getter @Setter +@Table(indexes = { + @Index(name = "idQuestioningComment_index", columnList = "questioning_id") +}) public class QuestioningComment { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "quest_comment_seq") From 005a4a647f72b564b2e2c047aa11d5662f5c3f7b Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Fri, 6 Dec 2024 14:58:32 +0100 Subject: [PATCH 11/26] fix: remove sort in search endpoints --- .../contact/controller/ContactController.java | 5 ++--- .../questioning/controller/SurveyUnitController.java | 5 ++--- .../questioning/domain/SurveyUnit.java | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java index ab93f56e..d239c20b 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java @@ -145,13 +145,12 @@ public Page searchContacts( @RequestParam(required = true) String searchParam, @RequestParam(required = false) @Valid @ValidContactParam String searchType, @RequestParam(defaultValue = "0") Integer page, - @RequestParam(defaultValue = "10") Integer pageSize, - @RequestParam(defaultValue = "identifier") String sort) { + @RequestParam(defaultValue = "10") Integer pageSize) { log.info( "Search contact by {} with param = {} page = {} pageSize = {}", searchType, searchParam, page, pageSize); - Pageable pageable = PageRequest.of(page, pageSize, Sort.by(sort)); + Pageable pageable = PageRequest.of(page, pageSize); switch (ContactParamEnum.fromValue(searchType)) { case ContactParamEnum.IDENTIFIER: diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java index 106c23f8..cc7cb9b2 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java @@ -77,12 +77,11 @@ public Page searchSurveyUnits( @RequestParam(required = true) String searchParam, @RequestParam(required = true) @Valid @ValidSurveyUnitParam @Schema(description = "id or code or name")String searchType, @RequestParam(defaultValue = "0") Integer page, - @RequestParam(defaultValue = "20") Integer pageSize, - @RequestParam(defaultValue = "id_su") String sort) { + @RequestParam(defaultValue = "20") Integer pageSize) { log.info( "Search surveyUnit by {} with param = {} page = {} pageSize = {}", searchType, searchParam, page, pageSize); - Pageable pageable = PageRequest.of(page, pageSize, Sort.by(sort)); + Pageable pageable = PageRequest.of(page, pageSize); return switch (SurveyUnitParamEnum.fromValue(searchType)) { case SurveyUnitParamEnum.IDENTIFIER -> surveyUnitService.findbyIdentifier(searchParam, pageable); diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnit.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnit.java index 4a4dfdf6..d93316b9 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnit.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnit.java @@ -30,7 +30,7 @@ public class SurveyUnit { private String label; - @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) + @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) private SurveyUnitAddress surveyUnitAddress; @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "surveyUnit" ) From a22798e9f18df9bcb2f3e5e105f4753c1bc97444 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Fri, 6 Dec 2024 17:18:16 +0100 Subject: [PATCH 12/26] feat: improve search questioning using union all --- .../repository/QuestioningRepository.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java index 5a64dcdf..50626a0a 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java @@ -16,13 +16,23 @@ Questioning findByIdPartitioningAndSurveyUnitIdSu(String idPartitioning, String surveyUnitIdSu); @Query(""" - SELECT q FROM Questioning q - LEFT JOIN FETCH q.questioningAccreditations acc - LEFT JOIN FETCH q.questioningEvents evt - LEFT JOIN FETCH q.questioningCommunications comm - WHERE q.surveyUnit.idSu =:searchParam - OR q.surveyUnit.identificationName =:searchParam - OR acc.idContact =:searchParam + SELECT q FROM Questioning q + LEFT JOIN FETCH q.questioningAccreditations acc + LEFT JOIN FETCH q.questioningEvents evt + LEFT JOIN FETCH q.questioningCommunications comm + WHERE q.surveyUnit.idSu = :searchParam + UNION ALL + SELECT q FROM Questioning q + LEFT JOIN FETCH q.questioningAccreditations acc + LEFT JOIN FETCH q.questioningEvents evt + LEFT JOIN FETCH q.questioningCommunications comm + WHERE q.surveyUnit.identificationName = :searchParam + UNION ALL + SELECT q FROM Questioning q + LEFT JOIN FETCH q.questioningAccreditations acc + LEFT JOIN FETCH q.questioningEvents evt + LEFT JOIN FETCH q.questioningCommunications comm + WHERE acc.idContact = :searchParam """) Page findQuestioningByParam(String searchParam,Pageable pageable ); From 322d4be789e2c8163d026808bf9feca2c9d823d4 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Fri, 6 Dec 2024 17:18:32 +0100 Subject: [PATCH 13/26] feat: improve search endpoints using union all (V2 versions) --- .../contact/controller/ContactController.java | 20 +++ .../controller/SurveyUnitController.java | 20 +++ .../controller/SurveyUnitControllerTest.java | 2 +- .../contact/repository/ContactRepository.java | 121 +++++++++++++----- .../questioning/domain/SurveyUnit.java | 2 +- .../repository/SurveyUnitRepository.java | 47 ++++++- .../contact/service/ContactService.java | 2 + .../service/impl/ContactServiceImpl.java | 7 + .../service/SurveyUnitService.java | 1 + .../service/impl/SurveyUnitServiceImpl.java | 5 + 10 files changed, 187 insertions(+), 40 deletions(-) diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java index d239c20b..41d47265 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java @@ -164,6 +164,26 @@ public Page searchContacts( } + @GetMapping(path = Constants.API_CONTACTS_SEARCH+"/V2", produces = "application/json") + @Operation(summary = "Search contact by parameter (identifier, email, name, firstName lastName)") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = SearchContactDto.class)))), + @ApiResponse(responseCode = "400", description = "Bad Request") + }) + public Page searchContactByParam( + @RequestParam(required = true) String searchParam, + @RequestParam(defaultValue = "0") Integer page, + @RequestParam(defaultValue = "10") Integer pageSize) { + + log.info( + "Search contact with param = {} page = {} pageSize = {}", searchParam, page, pageSize); + + Pageable pageable = PageRequest.of(page, pageSize); + + return contactService.searchContactByParam(searchParam.toUpperCase(), pageable); + + } + static class ContactPage extends PageImpl { diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java index cc7cb9b2..70ea3410 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java @@ -105,6 +105,26 @@ public SurveyUnitDetailsDto findSurveyUnit(@PathVariable("id") String id) { } + @Operation(summary = "Multi-criteria search survey-unit") + @GetMapping(value = Constants.API_SURVEY_UNITS_SEARCH+"/V2", produces = "application/json") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = SearchSurveyUnitDto.class)))), + @ApiResponse(responseCode = "404", description = "Not found"), + @ApiResponse(responseCode = "400", description = "Bad Request") + }) + public Page searchSurveyUnitsByParam( + @RequestParam(required = true) String searchParam, + @RequestParam(defaultValue = "0") Integer page, + @RequestParam(defaultValue = "20") Integer pageSize) { + log.info( + "Search surveyUnit ith param = {} page = {} pageSize = {}", searchParam, page, pageSize); + + Pageable pageable = PageRequest.of(page, pageSize); + + return surveyUnitService.findByParameter(searchParam, pageable); + } + + @Operation(summary = "Create or update a survey unit") @PutMapping(value = Constants.API_SURVEY_UNITS_ID, produces = "application/json", consumes = "application/json") @ApiResponses(value = { diff --git a/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitControllerTest.java b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitControllerTest.java index 5244b083..032952f8 100644 --- a/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitControllerTest.java +++ b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitControllerTest.java @@ -34,7 +34,7 @@ @AutoConfigureMockMvc @SpringBootTest @ActiveProfiles("test") -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS) +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) class SurveyUnitControllerTest { @Autowired diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java index b588cbd8..681faf9a 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java @@ -18,52 +18,107 @@ public interface ContactRepository extends PagingAndSortingRepository findByIdentifier( String param, Pageable pageable); + Page findByIdentifier(String param, Pageable pageable); @Query( value = """ - SELECT - c.identifier as identifier, - c.email as email, - c.first_name as firstName, - c.last_name as lastName - FROM - contact c - WHERE - UPPER(c.email) LIKE :param || '%' - """, + SELECT + c.identifier as identifier, + c.email as email, + c.first_name as firstName, + c.last_name as lastName + FROM + contact c + WHERE + UPPER(c.email) LIKE :param || '%' + """, nativeQuery = true ) - Page findByEmail( String param, Pageable pageable); + Page findByEmail(String param, Pageable pageable); + @Query( value = """ - SELECT - c.identifier as identifier, - c.email as email, - c.first_name as firstName, - c.last_name as lastName - FROM - contact c - WHERE - UPPER(c.last_name) LIKE :param || '%' - OR UPPER(first_name || ' ' || last_name) LIKE :param || '%' - """, + SELECT + c.identifier as identifier, + c.email as email, + c.first_name as firstName, + c.last_name as lastName + FROM + contact c + WHERE + UPPER(c.last_name) LIKE :param || '%' + OR UPPER(first_name || ' ' || last_name) LIKE :param || '%' + """, nativeQuery = true ) Page findByFirstNameLastName(String param, Pageable pageable); + @Query( + value = """ + SELECT + * + FROM + contact c + WHERE + UPPER(c.last_name) LIKE :param || '%' + UNION ALL + SELECT + * + FROM + contact c + WHERE + UPPER(first_name || ' ' || last_name) LIKE :param || '%' + UNION ALL + SELECT + * + FROM + contact c + WHERE + UPPER(c.email) LIKE :param || '%' + UNION ALL + SELECT + * + FROM + contact c + WHERE + UPPER(c.identifier) LIKE :param || '%' + """, + countQuery = """ + SELECT COUNT(*) + FROM ( + SELECT 1 + FROM contact c + WHERE UPPER(c.last_name) LIKE :param || '%' + UNION ALL + SELECT 1 + FROM contact c + WHERE UPPER(c.first_name || ' ' || c.last_name) LIKE :param || '%' + UNION ALL + SELECT 1 + FROM contact c + WHERE UPPER(c.email) LIKE :param || '%' + UNION ALL + SELECT 1 + FROM contact c + WHERE UPPER(c.identifier) LIKE :param || '%' + ) AS count_query""", + nativeQuery = true + ) + Page findByParam(String param, Pageable pageable); + } diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnit.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnit.java index d93316b9..4a4dfdf6 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnit.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/domain/SurveyUnit.java @@ -30,7 +30,7 @@ public class SurveyUnit { private String label; - @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) private SurveyUnitAddress surveyUnitAddress; @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "surveyUnit" ) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/SurveyUnitRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/SurveyUnitRepository.java index c5692d29..888d052e 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/SurveyUnitRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/SurveyUnitRepository.java @@ -19,7 +19,7 @@ public interface SurveyUnitRepository extends JpaRepository FROM survey_unit su WHERE - UPPER(su.id_su) LIKE CONCAT(UPPER(:param), '%') + UPPER(su.id_su) LIKE :param || '%' """) Page findByIdentifier(String param, Pageable pageable); @@ -29,8 +29,8 @@ public interface SurveyUnitRepository extends JpaRepository FROM survey_unit su WHERE - UPPER(su.identification_code) LIKE CONCAT(UPPER(:param), '%') - + UPPER(su.identification_code) LIKE :param || '%' + """) Page findByIdentificationCode(String param, Pageable pageable); @@ -40,8 +40,45 @@ public interface SurveyUnitRepository extends JpaRepository FROM survey_unit su WHERE - UPPER(su.identification_name) LIKE CONCAT(UPPER(:param), '%') - + UPPER(su.identification_name) LIKE :param || '%' + """) Page findByIdentificationName(String param, Pageable pageable); + + @Query(nativeQuery = true, + value = """ + SELECT + * + FROM + survey_unit su + WHERE + UPPER(su.id_su) LIKE :param || '%' + UNION ALL + SELECT + * + FROM + survey_unit su + WHERE + UPPER(su.identification_name) LIKE :param || '%' + UNION ALL + SELECT + * + FROM + survey_unit su + WHERE + UPPER(su.identification_code) LIKE :param || '%' + """, + countQuery = """ + SELECT COUNT(*) + FROM ( + SELECT 1 FROM survey_unit su + WHERE UPPER(su.id_su) LIKE :param || '%' + UNION ALL + SELECT 1 FROM survey_unit su + WHERE UPPER(su.identification_name) LIKE :param || '%' + UNION ALL + SELECT 1 FROM survey_unit su + WHERE UPPER(su.identification_code) LIKE :param || '%' + ) AS count_query""") + Page findByParam(String param, Pageable pageable); } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java index 81d95c13..6e1a2625 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java @@ -50,6 +50,8 @@ public interface ContactService { Contact updateOrCreateContact(String id, ContactDto contactDto, JsonNode payload); + Page searchContactByParam(String param, Pageable pageable); + Contact createContactAddressEvent(Contact contact, JsonNode payload); Contact updateContactAddressEvent(Contact contact, JsonNode payload) throws NotFoundException; diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java index d955e818..a0eb2a1d 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java @@ -112,6 +112,13 @@ public Page searchContactByName(String name, Pageable pageable return contactRepository.findByFirstNameLastName(name, pageable); } + @Override + public Page searchContactByParam(String param, Pageable pageable) { + return contactRepository.findByParam(param, pageable); + } + + + @Override public Contact createContactAddressEvent(Contact contact, JsonNode payload) { diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/SurveyUnitService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/SurveyUnitService.java index 34c4e2aa..f5c98901 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/SurveyUnitService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/SurveyUnitService.java @@ -23,4 +23,5 @@ public interface SurveyUnitService { void deleteSurveyUnit(String id); + Page findByParameter(String searchParam, Pageable pageable); } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/SurveyUnitServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/SurveyUnitServiceImpl.java index 5ece4a20..1c6bd50a 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/SurveyUnitServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/SurveyUnitServiceImpl.java @@ -77,4 +77,9 @@ public void deleteSurveyUnit(String id) { } + @Override + public Page findByParameter(String searchParam, Pageable pageable) { + return surveyUnitRepository.findByParam(searchParam.toUpperCase(), pageable); + } + } From d6fc79fb8c8ed1381e315a4b1a8ec4f4197e2295 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Mon, 9 Dec 2024 13:13:50 +0100 Subject: [PATCH 14/26] fix: serach param to upper case --- .../query/controller/SearchQuestioningController.java | 2 +- .../questioning/controller/SurveyUnitController.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/SearchQuestioningController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/SearchQuestioningController.java index 639a0ac0..f22bfe61 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/SearchQuestioningController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/SearchQuestioningController.java @@ -38,7 +38,7 @@ public Page searchQuestionings( Pageable pageable = PageRequest.of(page, pageSize); - return questioningService.searchQuestioning(searchParam, pageable); + return questioningService.searchQuestioning(searchParam.toUpperCase(), pageable); } diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java index 70ea3410..a0579728 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/controller/SurveyUnitController.java @@ -84,9 +84,9 @@ public Page searchSurveyUnits( Pageable pageable = PageRequest.of(page, pageSize); return switch (SurveyUnitParamEnum.fromValue(searchType)) { - case SurveyUnitParamEnum.IDENTIFIER -> surveyUnitService.findbyIdentifier(searchParam, pageable); - case SurveyUnitParamEnum.CODE -> surveyUnitService.findbyIdentificationCode(searchParam, pageable); - case SurveyUnitParamEnum.NAME -> surveyUnitService.findbyIdentificationName(searchParam, pageable); + case SurveyUnitParamEnum.IDENTIFIER -> surveyUnitService.findbyIdentifier(searchParam.toUpperCase(), pageable); + case SurveyUnitParamEnum.CODE -> surveyUnitService.findbyIdentificationCode(searchParam.toUpperCase(), pageable); + case SurveyUnitParamEnum.NAME -> surveyUnitService.findbyIdentificationName(searchParam.toUpperCase(), pageable); }; } From 3e3d358a637b2c01c7f97df51d7d1ffa069f0b8a Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Mon, 9 Dec 2024 13:33:23 +0100 Subject: [PATCH 15/26] fix: search distinct questioning --- .../questioning/service/impl/QuestioningServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java index c5077971..b462baa9 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java @@ -150,7 +150,7 @@ public Page searchQuestioning(String param, Pageable pagea } List searchDtos = pageQuestionings - .stream() + .stream().distinct() .map(this::convertToSearchDto).toList(); return new PageImpl<>(searchDtos, pageable, pageQuestionings.getTotalElements()); From 680ae69bdc69b44680abf47f2cea276300f5f092 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Tue, 10 Dec 2024 14:44:15 +0100 Subject: [PATCH 16/26] fix: remove duplicates contacts --- .../contact/repository/ContactRepository.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java index 681faf9a..ba6b9032 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java @@ -76,21 +76,21 @@ OR UPPER(first_name || ' ' || last_name) LIKE :param || '%' contact c WHERE UPPER(c.last_name) LIKE :param || '%' - UNION ALL + UNION SELECT * FROM contact c WHERE - UPPER(first_name || ' ' || last_name) LIKE :param || '%' - UNION ALL + UPPER(first_name || ' ' || last_name) LIKE :param || '%' + UNION SELECT * FROM contact c WHERE UPPER(c.email) LIKE :param || '%' - UNION ALL + UNION SELECT * FROM @@ -104,15 +104,15 @@ SELECT COUNT(*) SELECT 1 FROM contact c WHERE UPPER(c.last_name) LIKE :param || '%' - UNION ALL + UNION SELECT 1 FROM contact c WHERE UPPER(c.first_name || ' ' || c.last_name) LIKE :param || '%' - UNION ALL + UNION SELECT 1 FROM contact c WHERE UPPER(c.email) LIKE :param || '%' - UNION ALL + UNION SELECT 1 FROM contact c WHERE UPPER(c.identifier) LIKE :param || '%' From 87b143ff58a9dc71752be97bf9aafe7aec436b78 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Tue, 10 Dec 2024 17:14:21 +0100 Subject: [PATCH 17/26] fix: test native query --- .../repository/QuestioningRepository.java | 53 ++++++++++++------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java index 50626a0a..e6e0d8df 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java @@ -15,25 +15,40 @@ public interface QuestioningRepository extends JpaRepository Questioning findByIdPartitioningAndSurveyUnitIdSu(String idPartitioning, String surveyUnitIdSu); - @Query(""" - SELECT q FROM Questioning q - LEFT JOIN FETCH q.questioningAccreditations acc - LEFT JOIN FETCH q.questioningEvents evt - LEFT JOIN FETCH q.questioningCommunications comm - WHERE q.surveyUnit.idSu = :searchParam - UNION ALL - SELECT q FROM Questioning q - LEFT JOIN FETCH q.questioningAccreditations acc - LEFT JOIN FETCH q.questioningEvents evt - LEFT JOIN FETCH q.questioningCommunications comm - WHERE q.surveyUnit.identificationName = :searchParam - UNION ALL - SELECT q FROM Questioning q - LEFT JOIN FETCH q.questioningAccreditations acc - LEFT JOIN FETCH q.questioningEvents evt - LEFT JOIN FETCH q.questioningCommunications comm - WHERE acc.idContact = :searchParam - """) + @Query(value = """ + (select + q1_0.* + from + questioning q1_0 + where + q1_0.survey_unit_id_su=:searchParam + union + select + q2_0.* + from + questioning q2_0 + join + survey_unit su2_0 + on su2_0.id_su=q2_0.survey_unit_id_su + where + su2_0.identification_name=:searchParam + union + select + q3_0.* + from + questioning q3_0 + left join + questioning_accreditation qa3_0 + on q3_0.id=qa3_0.questioning_id + where + exists(select + 1 + from + questioning_accreditation qa4_0 + where + qa4_0.questioning_id=q3_0.id) + and qa3_0.id_contact=:searchParam) + """, nativeQuery = true) Page findQuestioningByParam(String searchParam,Pageable pageable ); From c9daa6b3cdf35853e1c014179925ca78a4fa68bf Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 11 Dec 2024 09:00:16 +0100 Subject: [PATCH 18/26] fix: search questioning --- .../repository/QuestioningRepository.java | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java index e6e0d8df..51a16ba8 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java @@ -15,7 +15,7 @@ public interface QuestioningRepository extends JpaRepository Questioning findByIdPartitioningAndSurveyUnitIdSu(String idPartitioning, String surveyUnitIdSu); - @Query(value = """ + /*@Query(value = """ (select q1_0.* from @@ -48,9 +48,30 @@ Questioning findByIdPartitioningAndSurveyUnitIdSu(String idPartitioning, where qa4_0.questioning_id=q3_0.id) and qa3_0.id_contact=:searchParam) - """, nativeQuery = true) - - Page findQuestioningByParam(String searchParam,Pageable pageable ); + """, nativeQuery = true)*/ + @Query(""" + SELECT q FROM Questioning q + LEFT JOIN FETCH q.questioningAccreditations acc + LEFT JOIN FETCH q.questioningEvents evt + LEFT JOIN FETCH q.questioningCommunications comm + WHERE q.surveyUnit.idSu = :searchParam + UNION + SELECT q FROM Questioning q + LEFT JOIN FETCH q.questioningAccreditations acc + LEFT JOIN FETCH q.questioningEvents evt + LEFT JOIN FETCH q.questioningCommunications comm + WHERE q.surveyUnit.identificationName = :searchParam + UNION + SELECT q FROM Questioning q + LEFT JOIN FETCH q.questioningAccreditations acc + LEFT JOIN FETCH q.questioningEvents evt + LEFT JOIN FETCH q.questioningCommunications comm + WHERE EXISTS ( + SELECT 1 FROM QuestioningAccreditation qa + WHERE qa.questioning = q + ) AND acc.idContact = :searchParam +""") + Page findQuestioningByParam(String searchParam, Pageable pageable); Set findBySurveyUnitIdSu(String idSu); From d84a8f1f06e76818e062c342043d69814231f2a7 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 11 Dec 2024 10:41:18 +0100 Subject: [PATCH 19/26] fix: improve search questioning --- .../SearchQuestioningController.java | 2 +- .../repository/QuestioningRepository.java | 60 ++++++++++++------- .../service/impl/QuestioningServiceImpl.java | 19 +++--- 3 files changed, 51 insertions(+), 30 deletions(-) diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/SearchQuestioningController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/SearchQuestioningController.java index f22bfe61..639a0ac0 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/SearchQuestioningController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/SearchQuestioningController.java @@ -38,7 +38,7 @@ public Page searchQuestionings( Pageable pageable = PageRequest.of(page, pageSize); - return questioningService.searchQuestioning(searchParam.toUpperCase(), pageable); + return questioningService.searchQuestioning(searchParam, pageable); } diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java index 51a16ba8..803bb376 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java @@ -5,7 +5,9 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import java.util.List; import java.util.Set; public interface QuestioningRepository extends JpaRepository { @@ -50,31 +52,45 @@ Questioning findByIdPartitioningAndSurveyUnitIdSu(String idPartitioning, and qa3_0.id_contact=:searchParam) """, nativeQuery = true)*/ @Query(""" - SELECT q FROM Questioning q - LEFT JOIN FETCH q.questioningAccreditations acc - LEFT JOIN FETCH q.questioningEvents evt - LEFT JOIN FETCH q.questioningCommunications comm - WHERE q.surveyUnit.idSu = :searchParam - UNION - SELECT q FROM Questioning q - LEFT JOIN FETCH q.questioningAccreditations acc - LEFT JOIN FETCH q.questioningEvents evt - LEFT JOIN FETCH q.questioningCommunications comm - WHERE q.surveyUnit.identificationName = :searchParam - UNION - SELECT q FROM Questioning q - LEFT JOIN FETCH q.questioningAccreditations acc - LEFT JOIN FETCH q.questioningEvents evt - LEFT JOIN FETCH q.questioningCommunications comm - WHERE EXISTS ( - SELECT 1 FROM QuestioningAccreditation qa - WHERE qa.questioning = q - ) AND acc.idContact = :searchParam -""") - Page findQuestioningByParam(String searchParam, Pageable pageable); + SELECT q FROM Questioning q + LEFT JOIN FETCH q.questioningAccreditations acc + LEFT JOIN FETCH q.questioningEvents evt + LEFT JOIN FETCH q.questioningCommunications comm + WHERE q.surveyUnit.idSu = :searchParam + UNION + SELECT q FROM Questioning q + LEFT JOIN FETCH q.questioningAccreditations acc + LEFT JOIN FETCH q.questioningEvents evt + LEFT JOIN FETCH q.questioningCommunications comm + WHERE q.surveyUnit.identificationName = :searchParam + UNION + SELECT q FROM Questioning q + LEFT JOIN FETCH q.questioningAccreditations acc + LEFT JOIN FETCH q.questioningEvents evt + LEFT JOIN FETCH q.questioningCommunications comm + WHERE EXISTS ( + SELECT 1 FROM QuestioningAccreditation qa + WHERE qa.questioning = q + AND qa.idContact = :searchParam) + """) + List findQuestioningByParam(String searchParam); Set findBySurveyUnitIdSu(String idSu); Page findAll(Pageable pageable); + @Query(""" + SELECT q.id FROM Questioning q + """) + Page findQuestioningIds(Pageable pageable); + + @Query(""" + SELECT q FROM Questioning q + LEFT JOIN FETCH q.questioningAccreditations acc + LEFT JOIN FETCH q.questioningEvents evt + LEFT JOIN FETCH q.questioningCommunications comm + WHERE q.id IN :ids + """) + List findQuestioningsByIds(@Param("ids") List ids); + } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java index b462baa9..2cc66124 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java @@ -141,19 +141,24 @@ public String getAccessUrl(String baseUrl, String typeUrl, String role, Question @Override public Page searchQuestioning(String param, Pageable pageable) { - Page pageQuestionings; if (!StringUtils.isEmpty(param)) { - pageQuestionings = questioningRepository.findQuestioningByParam(param, pageable); + List listQuestionings = questioningRepository.findQuestioningByParam(param.toUpperCase()); + List searchDtos = listQuestionings + .stream().distinct() + .map(this::convertToSearchDto).toList(); + + return new PageImpl<>(searchDtos, pageable, searchDtos.size()); } else { - pageQuestionings = questioningRepository.findAll(pageable); + Page idsPage = questioningRepository.findQuestioningIds(pageable); + List questionings = questioningRepository.findQuestioningsByIds(idsPage.getContent()); + List searchDtos = questionings + .stream() + .map(this::convertToSearchDto).toList(); + return new PageImpl<>(searchDtos, pageable, idsPage.getTotalElements()); } - List searchDtos = pageQuestionings - .stream().distinct() - .map(this::convertToSearchDto).toList(); - return new PageImpl<>(searchDtos, pageable, pageQuestionings.getTotalElements()); } @Override From 5243c3ad4d4de816679cb9d6e7433bf273661d00 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 11 Dec 2024 11:23:41 +0100 Subject: [PATCH 20/26] feat: add search by identificationCode --- .../repository/QuestioningRepository.java | 46 ++++--------------- .../service/impl/QuestioningServiceImpl.java | 3 +- 2 files changed, 11 insertions(+), 38 deletions(-) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java index 803bb376..43b28f04 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java @@ -17,52 +17,24 @@ public interface QuestioningRepository extends JpaRepository Questioning findByIdPartitioningAndSurveyUnitIdSu(String idPartitioning, String surveyUnitIdSu); - /*@Query(value = """ - (select - q1_0.* - from - questioning q1_0 - where - q1_0.survey_unit_id_su=:searchParam - union - select - q2_0.* - from - questioning q2_0 - join - survey_unit su2_0 - on su2_0.id_su=q2_0.survey_unit_id_su - where - su2_0.identification_name=:searchParam - union - select - q3_0.* - from - questioning q3_0 - left join - questioning_accreditation qa3_0 - on q3_0.id=qa3_0.questioning_id - where - exists(select - 1 - from - questioning_accreditation qa4_0 - where - qa4_0.questioning_id=q3_0.id) - and qa3_0.id_contact=:searchParam) - """, nativeQuery = true)*/ @Query(""" SELECT q FROM Questioning q LEFT JOIN FETCH q.questioningAccreditations acc LEFT JOIN FETCH q.questioningEvents evt LEFT JOIN FETCH q.questioningCommunications comm - WHERE q.surveyUnit.idSu = :searchParam + WHERE UPPER(q.surveyUnit.idSu) = :searchParam UNION SELECT q FROM Questioning q LEFT JOIN FETCH q.questioningAccreditations acc LEFT JOIN FETCH q.questioningEvents evt LEFT JOIN FETCH q.questioningCommunications comm - WHERE q.surveyUnit.identificationName = :searchParam + WHERE UPPER(q.surveyUnit.identificationName) = :searchParam + UNION + SELECT q FROM Questioning q + LEFT JOIN FETCH q.questioningAccreditations acc + LEFT JOIN FETCH q.questioningEvents evt + LEFT JOIN FETCH q.questioningCommunications comm + WHERE UPPER(q.surveyUnit.identificationCode) = :searchParam UNION SELECT q FROM Questioning q LEFT JOIN FETCH q.questioningAccreditations acc @@ -71,7 +43,7 @@ Questioning findByIdPartitioningAndSurveyUnitIdSu(String idPartitioning, WHERE EXISTS ( SELECT 1 FROM QuestioningAccreditation qa WHERE qa.questioning = q - AND qa.idContact = :searchParam) + AND UPPER(qa.idContact) = :searchParam) """) List findQuestioningByParam(String searchParam); diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java index 2cc66124..a3c84690 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java @@ -161,6 +161,7 @@ public Page searchQuestioning(String param, Pageable pagea } + @Override public QuestioningDetailsDto getQuestioningDetails(@PathVariable("id") Long id) { Questioning questioning = findbyId(id); @@ -231,7 +232,7 @@ protected String buildV3Url(String baseUrl, String role, String modelName, Strin private SearchQuestioningDto convertToSearchDto(Questioning questioning) { - SearchQuestioningDtoImpl searchQuestioningDto = modelMapper.map(questioning, SearchQuestioningDtoImpl.class); + SearchQuestioningDtoImpl searchQuestioningDto = new SearchQuestioningDtoImpl(); searchQuestioningDto.setCampaignId(partitioningService.findById(questioning.getIdPartitioning()).getCampaign().getId()); searchQuestioningDto.setListContactIdentifiers(questioning.getQuestioningAccreditations().stream().map(QuestioningAccreditation::getIdContact).toList()); Optional lastQuestioningEvent = questioningEventService.getLastQuestioningEvent(questioning, TypeQuestioningEvent.STATE_EVENTS); From fa4b3408e243beccb0bfbe6a8d939f58ebe18564 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 11 Dec 2024 13:51:00 +0100 Subject: [PATCH 21/26] fix: remove model mapper --- .../questioning/repository/QuestioningRepository.java | 4 ++++ .../questioning/service/impl/QuestioningServiceImpl.java | 3 +++ 2 files changed, 7 insertions(+) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java index 43b28f04..5cb8b3a9 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java @@ -22,24 +22,28 @@ Questioning findByIdPartitioningAndSurveyUnitIdSu(String idPartitioning, LEFT JOIN FETCH q.questioningAccreditations acc LEFT JOIN FETCH q.questioningEvents evt LEFT JOIN FETCH q.questioningCommunications comm + JOIN FETCH q.surveyUnit su WHERE UPPER(q.surveyUnit.idSu) = :searchParam UNION SELECT q FROM Questioning q LEFT JOIN FETCH q.questioningAccreditations acc LEFT JOIN FETCH q.questioningEvents evt LEFT JOIN FETCH q.questioningCommunications comm + JOIN FETCH q.surveyUnit su WHERE UPPER(q.surveyUnit.identificationName) = :searchParam UNION SELECT q FROM Questioning q LEFT JOIN FETCH q.questioningAccreditations acc LEFT JOIN FETCH q.questioningEvents evt LEFT JOIN FETCH q.questioningCommunications comm + JOIN FETCH q.surveyUnit su WHERE UPPER(q.surveyUnit.identificationCode) = :searchParam UNION SELECT q FROM Questioning q LEFT JOIN FETCH q.questioningAccreditations acc LEFT JOIN FETCH q.questioningEvents evt LEFT JOIN FETCH q.questioningCommunications comm + JOIN FETCH q.surveyUnit su WHERE EXISTS ( SELECT 1 FROM QuestioningAccreditation qa WHERE qa.questioning = q diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java index a3c84690..ec9de64f 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/service/impl/QuestioningServiceImpl.java @@ -233,6 +233,9 @@ protected String buildV3Url(String baseUrl, String role, String modelName, Strin private SearchQuestioningDto convertToSearchDto(Questioning questioning) { SearchQuestioningDtoImpl searchQuestioningDto = new SearchQuestioningDtoImpl(); + searchQuestioningDto.setQuestioningId(questioning.getId()); + searchQuestioningDto.setSurveyUnitId(questioning.getSurveyUnit().getIdSu()); + searchQuestioningDto.setSurveyUnitIdentificationCode(questioning.getSurveyUnit().getIdentificationCode()); searchQuestioningDto.setCampaignId(partitioningService.findById(questioning.getIdPartitioning()).getCampaign().getId()); searchQuestioningDto.setListContactIdentifiers(questioning.getQuestioningAccreditations().stream().map(QuestioningAccreditation::getIdContact).toList()); Optional lastQuestioningEvent = questioningEventService.getLastQuestioningEvent(questioning, TypeQuestioningEvent.STATE_EVENTS); From 216aa4b7ee12bb4cc013acbc3ca16e4fc176e7e2 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 11 Dec 2024 14:53:56 +0100 Subject: [PATCH 22/26] feat: add cucumber tests for search questioning --- .../integration/ContextSteps.java | 213 ++++++++++++++++++ .../QuestioningInformationsSteps.java | 161 +------------ .../integration/SearchContactSteps.java | 21 +- .../integration/SearchQuestioningSteps.java | 74 ++++++ .../integration/SearchSurveyUnitSteps.java | 22 +- .../query/search_questioning.feature | 56 +++++ 6 files changed, 347 insertions(+), 200 deletions(-) create mode 100644 platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/ContextSteps.java create mode 100644 platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/SearchQuestioningSteps.java create mode 100644 platine-management-api/src/test/resources/integration/query/search_questioning.feature diff --git a/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/ContextSteps.java b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/ContextSteps.java new file mode 100644 index 00000000..217c51df --- /dev/null +++ b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/ContextSteps.java @@ -0,0 +1,213 @@ +package fr.insee.survey.datacollectionmanagement.integration; + +import fr.insee.survey.datacollectionmanagement.contact.domain.Address; +import fr.insee.survey.datacollectionmanagement.contact.domain.Contact; +import fr.insee.survey.datacollectionmanagement.contact.enums.GenderEnum; +import fr.insee.survey.datacollectionmanagement.contact.repository.AddressRepository; +import fr.insee.survey.datacollectionmanagement.contact.repository.ContactRepository; +import fr.insee.survey.datacollectionmanagement.metadata.domain.Campaign; +import fr.insee.survey.datacollectionmanagement.metadata.domain.Partitioning; +import fr.insee.survey.datacollectionmanagement.metadata.domain.Source; +import fr.insee.survey.datacollectionmanagement.metadata.domain.Survey; +import fr.insee.survey.datacollectionmanagement.metadata.repository.CampaignRepository; +import fr.insee.survey.datacollectionmanagement.metadata.repository.PartitioningRepository; +import fr.insee.survey.datacollectionmanagement.metadata.repository.SourceRepository; +import fr.insee.survey.datacollectionmanagement.metadata.repository.SurveyRepository; +import fr.insee.survey.datacollectionmanagement.questioning.domain.Questioning; +import fr.insee.survey.datacollectionmanagement.questioning.domain.QuestioningAccreditation; +import fr.insee.survey.datacollectionmanagement.questioning.domain.SurveyUnit; +import fr.insee.survey.datacollectionmanagement.questioning.repository.QuestioningAccreditationRepository; +import fr.insee.survey.datacollectionmanagement.questioning.repository.QuestioningRepository; +import fr.insee.survey.datacollectionmanagement.questioning.repository.SurveyUnitRepository; +import fr.insee.survey.datacollectionmanagement.view.domain.View; +import fr.insee.survey.datacollectionmanagement.view.repository.ViewRepository; +import io.cucumber.datatable.DataTable; +import io.cucumber.java.en.Given; +import jakarta.transaction.Transactional; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class ContextSteps { + + @Autowired + SourceRepository sourceRepository; + @Autowired + SurveyRepository surveyRepository; + @Autowired + CampaignRepository campaignRepository; + @Autowired + PartitioningRepository partitioningRepository; + @Autowired + SurveyUnitRepository surveyUnitRepository; + @Autowired + ContactRepository contactRepository; + @Autowired + AddressRepository addressRepository; + @Autowired + QuestioningRepository questioningRepository; + @Autowired + QuestioningAccreditationRepository questioningAccreditationRepository; + @Autowired + ViewRepository viewRepository; + + @Transactional + @Given("the source {string}") + public void createSource(String sourceId) { + Source source = new Source(); + source.setId(sourceId); + sourceRepository.save(source); + } + + @Transactional + @Given("the survey {string} related to source {string}") + public void createSurvey(String surveyId, String sourceId) { + Survey survey = new Survey(); + survey.setId(surveyId); + Source source = sourceRepository.findById(sourceId).orElseThrow(() -> new IllegalArgumentException("Source not found")); + survey.setSource(source); + surveyRepository.save(survey); + } + + @Transactional + @Given("the campaign {string} related to survey {string}") + public void createCampaign(String campaignId, String surveyId) { + Campaign campaign = new Campaign(); + campaign.setId(campaignId); + Survey survey = surveyRepository.findById(surveyId).orElseThrow(() -> new IllegalArgumentException("Survey not found")); + campaign.setSurvey(survey); + campaignRepository.save(campaign); + } + + @Transactional + @Given("the partitioning {string} related to campaign {string}") + public void createPartitioning(String partId, String campaignId) { + Partitioning part = new Partitioning(); + part.setId(partId); + Campaign campaign = campaignRepository.findById(campaignId).orElseThrow(() -> new IllegalArgumentException("Campaign not found")); + part.setCampaign(campaign); + partitioningRepository.save(part); + } + + @Transactional + @Given("the survey unit {string} with label {string}") + public void createSurveyUnit(String idSu, String label) { + SurveyUnit su = new SurveyUnit(); + su.setIdSu(idSu); + su.setLabel(label); + surveyUnitRepository.save(su); + } + + @Transactional + @Given("the survey unit {string} with label {string} and identificationName {string} and identificationCode {string}") + public void createSurveyUnit(String idSu, String label, String identificationName, String identificationCode) { + SurveyUnit su = new SurveyUnit(); + su.setIdSu(idSu); + su.setLabel(label); + su.setIdentificationName(identificationName); + su.setIdentificationCode(identificationCode); + surveyUnitRepository.save(su); + } + + @Given("the contact {string} with firstname {string} and lastname {string} and gender {string} and the streetnumber {string}") + public void createContact(String contactId, String firstName, String lastName, String gender, String streetNumber) { + Contact c = new Contact(); + c.setIdentifier(contactId); + c.setFirstName(firstName); + c.setLastName(lastName); + c.setGender(GenderEnum.valueOf(gender)); + Address address = new Address(); + address.setStreetNumber(streetNumber); + addressRepository.save(address); + c.setAddress(address); + contactRepository.save(c); + } + + @Transactional + @Given("the following contacts exist:") + public void createContacts(DataTable dataTable) { + List> rows = dataTable.asMaps(String.class, String.class); + for (Map row : rows) { + Contact contact = new Contact(); + contact.setIdentifier(row.get("idep")); + contact.setFirstName(row.get("firstname")); + contact.setLastName(row.get("lastname")); + contact.setEmail(row.get("email")); + contactRepository.save(contact); + } + } + + + @Transactional + @Given("the questioning for partitioning {string} survey unit id {string} and model {string} and main contact {string}") + public void createQuestioningMainContact(String partId, String idSu, String model, String mainContactId) { + createQuestioningContact(partId, idSu, model, mainContactId, true); + + } + + @Transactional + @Given("the questioning for partitioning {string} survey unit id {string} and model {string} and contact {string}") + public void createQuestioningContact(String partId, String idSu, String model, String mainContactId) { + createQuestioningContact(partId, idSu, model, mainContactId, false); + } + + private void createQuestioningContact(String partId, String idSu, String model, String contactId, boolean isMain) { + Questioning q = questioningRepository.findByIdPartitioningAndSurveyUnitIdSu(partId, idSu); + if (q == null) { + q = new Questioning(); + q.setIdPartitioning(partId); + q.setModelName(model); + q = questioningRepository.save(q); + } + final Questioning savedQ = q; + SurveyUnit su = surveyUnitRepository.findById(idSu).orElseThrow(() -> new IllegalArgumentException("Survey Unit not found")); + + List listAccreditations = questioningAccreditationRepository.findByIdContact(contactId); + if (listAccreditations.stream().filter(acc -> acc.getQuestioning().getId().equals(savedQ.getId())).toList().isEmpty()) { + QuestioningAccreditation qa = new QuestioningAccreditation(); + qa.setQuestioning(q); + qa.setIdContact(contactId); + qa.setMain(isMain); + + Set setQuestioningSu = su.getQuestionings(); + setQuestioningSu.add(q); + su.setQuestionings(setQuestioningSu); + surveyUnitRepository.save(su); + questioningRepository.save(q); + questioningAccreditationRepository.save(qa); + Set setQuestioningAcc = new HashSet<>(); + setQuestioningAcc.add(qa); + q.setQuestioningAccreditations(setQuestioningAcc); + q.setSurveyUnit(su); + questioningRepository.save(q); + initOneView(qa); + } + } + + private void initOneView(QuestioningAccreditation a) { + Partitioning p = partitioningRepository.findById(a.getQuestioning().getIdPartitioning()).orElseThrow(() -> new IllegalArgumentException("Contact not found for ID: " + a.getQuestioning().getIdPartitioning())); + View view = new View(); + view.setIdentifier(contactRepository.findById(a.getIdContact()).orElseThrow(() -> new IllegalArgumentException("Contact not found for ID: " + a.getIdContact())).getIdentifier()); + view.setCampaignId(p.getCampaign().getId()); + view.setIdSu(a.getQuestioning().getSurveyUnit().getIdSu()); + viewRepository.save(view); + } + + @Transactional + @Given("the following survey units exist") + public void createSurveyUnits(DataTable dataTable) { + List> rows = dataTable.asMaps(String.class, String.class); + for (Map row : rows) { + SurveyUnit surveyUnit = new SurveyUnit(); + surveyUnit.setIdSu(row.get("IDmetier")); + surveyUnit.setIdentificationName(row.get("Raison sociale")); + surveyUnit.setIdentificationCode(row.get("IDmetier")); + surveyUnitRepository.save(surveyUnit); + } + } + + +} diff --git a/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/QuestioningInformationsSteps.java b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/QuestioningInformationsSteps.java index fb8b12bb..d4dda376 100644 --- a/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/QuestioningInformationsSteps.java +++ b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/QuestioningInformationsSteps.java @@ -3,32 +3,10 @@ import com.fasterxml.jackson.dataformat.xml.XmlMapper; import fr.insee.survey.datacollectionmanagement.configuration.AuthenticationUserProvider; import fr.insee.survey.datacollectionmanagement.constants.AuthorityRoleEnum; -import fr.insee.survey.datacollectionmanagement.contact.domain.Address; -import fr.insee.survey.datacollectionmanagement.contact.domain.Contact; -import fr.insee.survey.datacollectionmanagement.contact.enums.GenderEnum; -import fr.insee.survey.datacollectionmanagement.contact.repository.AddressRepository; -import fr.insee.survey.datacollectionmanagement.contact.repository.ContactRepository; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Campaign; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Partitioning; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Source; -import fr.insee.survey.datacollectionmanagement.metadata.domain.Survey; -import fr.insee.survey.datacollectionmanagement.metadata.repository.CampaignRepository; -import fr.insee.survey.datacollectionmanagement.metadata.repository.PartitioningRepository; -import fr.insee.survey.datacollectionmanagement.metadata.repository.SourceRepository; -import fr.insee.survey.datacollectionmanagement.metadata.repository.SurveyRepository; import fr.insee.survey.datacollectionmanagement.query.dto.QuestioningInformationsDto; -import fr.insee.survey.datacollectionmanagement.questioning.domain.Questioning; -import fr.insee.survey.datacollectionmanagement.questioning.domain.QuestioningAccreditation; -import fr.insee.survey.datacollectionmanagement.questioning.domain.SurveyUnit; -import fr.insee.survey.datacollectionmanagement.questioning.repository.QuestioningAccreditationRepository; -import fr.insee.survey.datacollectionmanagement.questioning.repository.QuestioningRepository; -import fr.insee.survey.datacollectionmanagement.questioning.repository.SurveyUnitRepository; -import fr.insee.survey.datacollectionmanagement.view.domain.View; -import fr.insee.survey.datacollectionmanagement.view.repository.ViewRepository; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; -import jakarta.transaction.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; @@ -39,10 +17,6 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -55,144 +29,11 @@ public class QuestioningInformationsSteps { @Autowired MockMvc mockMvc; MvcResult mvcResult; - @Autowired - SourceRepository sourceRepository; - @Autowired - SurveyRepository surveyRepository; - @Autowired - CampaignRepository campaignRepository; - @Autowired - PartitioningRepository partitioningRepository; - @Autowired - SurveyUnitRepository surveyUnitRepository; - @Autowired - QuestioningRepository questioningRepository; - @Autowired - QuestioningAccreditationRepository questioningAccreditationRepository; - @Autowired - ContactRepository contactRepository; - @Autowired - AddressRepository addressRepository; - @Autowired - ViewRepository viewRepository; - private QuestioningInformationsDto questioningInformationsDto; + private QuestioningInformationsDto questioningInformationsDto; - @Transactional - @Given("the source {string}") - public void createSource(String sourceId) { - Source source = new Source(); - source.setId(sourceId); - sourceRepository.save(source); - } - - @Transactional - @Given("the survey {string} related to source {string}") - public void createSurvey(String surveyId, String sourceId) { - Survey survey = new Survey(); - survey.setId(surveyId); - Source source = sourceRepository.findById(sourceId).orElseThrow(() -> new IllegalArgumentException("Source not found")); - survey.setSource(source); - surveyRepository.save(survey); - } - - @Transactional - @Given("the campaign {string} related to survey {string}") - public void createCampaign(String campaignId, String surveyId) { - Campaign campaign = new Campaign(); - campaign.setId(campaignId); - Survey survey = surveyRepository.findById(surveyId).orElseThrow(() -> new IllegalArgumentException("Survey not found")); - campaign.setSurvey(survey); - campaignRepository.save(campaign); - } - - @Transactional - @Given("the partitioning {string} related to campaign {string}") - public void createPartitioning(String partId, String campaignId) { - Partitioning part = new Partitioning(); - part.setId(partId); - Campaign campaign = campaignRepository.findById(campaignId).orElseThrow(() -> new IllegalArgumentException("Campaign not found")); - part.setCampaign(campaign); - partitioningRepository.save(part); - } - - @Transactional - @Given("the survey unit {string} with label {string}") - public void createSurveyUnit(String idSu, String label) { - SurveyUnit su = new SurveyUnit(); - su.setIdSu(idSu); - su.setLabel(label); - surveyUnitRepository.save(su); - } - - @Given("the contact {string} with firstname {string} and lastname {string} and gender {string} and the streetnumber {string}") - public void createContact(String contactId, String firstName, String lastName, String gender, String streetNumber) { - Contact c = new Contact(); - c.setIdentifier(contactId); - c.setFirstName(firstName); - c.setLastName(lastName); - c.setGender(GenderEnum.valueOf(gender)); - Address address = new Address(); - address.setStreetNumber(streetNumber); - addressRepository.save(address); - c.setAddress(address); - contactRepository.save(c); - } - - @Transactional - @Given("the questioning for partitioning {string} survey unit id {string} and model {string} and main contact {string}") - public void createQuestioningMainContact(String partId, String idSu, String model, String mainContactId) { - createQuestioningContact(partId, idSu, model, mainContactId, true); - - } - @Transactional - @Given("the questioning for partitioning {string} survey unit id {string} and model {string} and contact {string}") - public void createQuestioningContact(String partId, String idSu, String model, String mainContactId) { - createQuestioningContact(partId, idSu, model, mainContactId, false); - } - private void createQuestioningContact(String partId, String idSu, String model, String contactId, boolean isMain) { - Questioning q = questioningRepository.findByIdPartitioningAndSurveyUnitIdSu(partId, idSu); - if (q == null) { - q = new Questioning(); - q.setIdPartitioning(partId); - q.setModelName(model); - q = questioningRepository.save(q); - } - final Questioning savedQ = q; - SurveyUnit su = surveyUnitRepository.findById(idSu).orElseThrow(() -> new IllegalArgumentException("Survey Unit not found")); - - List listAccreditations = questioningAccreditationRepository.findByIdContact(contactId); - if (listAccreditations.stream().filter(acc -> acc.getQuestioning().getId().equals(savedQ.getId())).toList().isEmpty()) { - QuestioningAccreditation qa = new QuestioningAccreditation(); - qa.setQuestioning(q); - qa.setIdContact(contactId); - qa.setMain(isMain); - - Set setQuestioningSu = su.getQuestionings(); - setQuestioningSu.add(q); - su.setQuestionings(setQuestioningSu); - surveyUnitRepository.save(su); - questioningRepository.save(q); - questioningAccreditationRepository.save(qa); - Set setQuestioningAcc = new HashSet<>(); - setQuestioningAcc.add(qa); - q.setQuestioningAccreditations(setQuestioningAcc); - q.setSurveyUnit(su); - questioningRepository.save(q); - initOneView(qa); - } - } - - private void initOneView(QuestioningAccreditation a) { - Partitioning p = partitioningRepository.findById(a.getQuestioning().getIdPartitioning()).orElseThrow(() -> new IllegalArgumentException("Contact not found for ID: " + a.getQuestioning().getIdPartitioning())); - View view = new View(); - view.setIdentifier(contactRepository.findById(a.getIdContact()).orElseThrow(() -> new IllegalArgumentException("Contact not found for ID: " + a.getIdContact())).getIdentifier()); - view.setCampaignId(p.getCampaign().getId()); - view.setIdSu(a.getQuestioning().getSurveyUnit().getIdSu()); - viewRepository.save(view); - } @Given("the user {string} is authenticated as {string}") public void theUserIsAuthenticatedAs(String contactId, String role) { diff --git a/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/SearchContactSteps.java b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/SearchContactSteps.java index 9d738ed8..d02d79a5 100644 --- a/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/SearchContactSteps.java +++ b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/SearchContactSteps.java @@ -5,15 +5,12 @@ import fr.insee.survey.datacollectionmanagement.configuration.AuthenticationUserProvider; import fr.insee.survey.datacollectionmanagement.constants.AuthorityRoleEnum; import fr.insee.survey.datacollectionmanagement.constants.Constants; -import fr.insee.survey.datacollectionmanagement.contact.domain.Contact; import fr.insee.survey.datacollectionmanagement.contact.dto.SearchContactDtoImpl; import fr.insee.survey.datacollectionmanagement.contact.enums.ContactParamEnum; -import fr.insee.survey.datacollectionmanagement.contact.repository.ContactRepository; import io.cucumber.datatable.DataTable; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; -import jakarta.transaction.Transactional; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; @@ -42,28 +39,12 @@ public class SearchContactSteps { private MockMvc mockMvc; @Autowired - private ObjectMapper objectMapper; - - @Autowired - private ContactRepository contactRepository; + ObjectMapper objectMapper; private MvcResult mvcResult; private Page pageSearchContact; private String role; - @Transactional - @Given("the following contacts exist:") - public void createContacts(DataTable dataTable) { - List> rows = dataTable.asMaps(String.class, String.class); - for (Map row : rows) { - Contact contact = new Contact(); - contact.setIdentifier(row.get("idep")); - contact.setFirstName(row.get("firstname")); - contact.setLastName(row.get("lastname")); - contact.setEmail(row.get("email")); - contactRepository.save(contact); - } - } @Given("I am a survey manager") public void setRole() { diff --git a/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/SearchQuestioningSteps.java b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/SearchQuestioningSteps.java new file mode 100644 index 00000000..d4063049 --- /dev/null +++ b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/SearchQuestioningSteps.java @@ -0,0 +1,74 @@ +package fr.insee.survey.datacollectionmanagement.integration; + +import fr.insee.survey.datacollectionmanagement.query.dto.SearchQuestioningDto; +import fr.insee.survey.datacollectionmanagement.questioning.service.impl.QuestioningServiceImpl; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; + +public class SearchQuestioningSteps { + @Autowired + QuestioningServiceImpl questioningService; + + private Page resultPage; + + + @When("I search for Questioning with {string} and page {int} with size {int}") + public void iSearchForQuestioningWithSurveyUnitId(String surveyUnitId, int page, int size) { + resultPage = questioningService.searchQuestioning( + surveyUnitId, PageRequest.of(page, size) + ); + } + + @When("I search for all Questioning with page {int} and size {int}") + public void iSearchForAllQuestioningWithPageAndSize(int page, int size) { + resultPage = questioningService.searchQuestioning( + "", PageRequest.of(page, size) + ); + } + + @Then("the result should contain the following Questioning related to surveyUnit:") + public void theResultShouldContainTheFollowingQuestioningRecords(List> expectedRecords) { + List expectedIds = expectedRecords.stream() + .map(row -> row.get("id")) //id from faeture table + .toList(); + List> expectedContacts = expectedRecords.stream() + .map(row -> Arrays.stream(row.get("listContacts").split(",")).toList()) //id from faeture table + .toList(); + List actualIds = resultPage.getContent().stream() + .map(SearchQuestioningDto::getSurveyUnitId) + .toList(); + List> actualContactsIds = resultPage.getContent().stream() + .map(SearchQuestioningDto::getListContactIdentifiers) + .toList(); + assertThat(expectedIds).containsExactlyInAnyOrderElementsOf(actualIds); + assertThat(expectedContacts).hasSameSizeAs(actualContactsIds); + + for (int i = 0; i < expectedContacts.size(); i++) { + assertThat(expectedContacts.get(i)).containsExactlyInAnyOrderElementsOf(actualContactsIds.get(i)); + + } + + + } + + @Then("the total number of results should be {int}") + public void theTotalNumberOfResultsShouldBe(int totalResults) { + Assertions.assertEquals(totalResults, resultPage.getTotalElements()); + } + + + @Then("the result size is {int}") + public void theResultSizeIs(int size) { + Assertions.assertEquals(size, resultPage.getTotalElements()); + } +} diff --git a/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/SearchSurveyUnitSteps.java b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/SearchSurveyUnitSteps.java index 972867f6..f07817fa 100644 --- a/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/SearchSurveyUnitSteps.java +++ b/platine-management-api/src/test/java/fr/insee/survey/datacollectionmanagement/integration/SearchSurveyUnitSteps.java @@ -5,15 +5,12 @@ import fr.insee.survey.datacollectionmanagement.configuration.AuthenticationUserProvider; import fr.insee.survey.datacollectionmanagement.constants.AuthorityRoleEnum; import fr.insee.survey.datacollectionmanagement.constants.Constants; -import fr.insee.survey.datacollectionmanagement.questioning.domain.SurveyUnit; import fr.insee.survey.datacollectionmanagement.questioning.dto.SearchSurveyUnitDtoImpl; import fr.insee.survey.datacollectionmanagement.questioning.enums.SurveyUnitParamEnum; -import fr.insee.survey.datacollectionmanagement.questioning.repository.SurveyUnitRepository; import io.cucumber.datatable.DataTable; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; -import jakarta.transaction.Transactional; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; @@ -39,30 +36,15 @@ public class SearchSurveyUnitSteps { @Autowired - private MockMvc mockMvc; + MockMvc mockMvc; @Autowired - private ObjectMapper objectMapper; - - @Autowired - private SurveyUnitRepository surveyUnitRepository; + ObjectMapper objectMapper; private MvcResult mvcResult; private Page pageSearchSurveyUnit; private String role; - @Transactional - @Given("the following survey units exist") - public void createSurveyUnits(DataTable dataTable) { - List> rows = dataTable.asMaps(String.class, String.class); - for (Map row : rows) { - SurveyUnit surveyUnit = new SurveyUnit(); - surveyUnit.setIdSu(row.get("IDmetier")); - surveyUnit.setIdentificationName(row.get("Raison sociale")); - surveyUnit.setIdentificationCode(row.get("IDmetier")); - surveyUnitRepository.save(surveyUnit); - } - } @Given("I am a survey manager for survey unit") public void setRole() { diff --git a/platine-management-api/src/test/resources/integration/query/search_questioning.feature b/platine-management-api/src/test/resources/integration/query/search_questioning.feature new file mode 100644 index 00000000..97aa1dc4 --- /dev/null +++ b/platine-management-api/src/test/resources/integration/query/search_questioning.feature @@ -0,0 +1,56 @@ +Feature: Search for questionings + + Background: : + Given the source "TIC" + Given the survey "TIC2023" related to source "TIC" + Given the campaign "TIC2023T01" related to survey "TIC2023" + Given the partitioning "TIC2023T0100" related to campaign "TIC2023T01" + Given the survey unit "QSU001" with label "enterprise" and identificationName "NAME001" and identificationCode "CODE001" + Given the survey unit "QSU002" with label "enterprise" and identificationName "NAME002" and identificationCode "CODE002" + Given the survey unit "QSU003" with label "enterprise" and identificationName "NAME003" and identificationCode "CODE002" + Given the survey unit "QSU004" with label "enterprise" and identificationName "NAME004" and identificationCode "CODE004" + Given the contact "QCONTACT1" with firstname "firstname1" and lastname "lastname1" and gender "Male" and the streetnumber "17" + Given the contact "QCONTACT2" with firstname "firstname2" and lastname "lastname2" and gender "Female" and the streetnumber "17" + Given the contact "QCONTACT3" with firstname "firstname3" and lastname "lastname3" and gender "Female" and the streetnumber "17" + Given the contact "QCONTACT4" with firstname "firstname4" and lastname "lastname4" and gender "Female" and the streetnumber "17" + Given the contact "QCONTACT5" with firstname "firstname5" and lastname "lastname5" and gender "Female" and the streetnumber "17" + Given the questioning for partitioning "TIC2023T0100" survey unit id "QSU001" and model "model" and main contact "QCONTACT1" + Given the questioning for partitioning "TIC2023T0100" survey unit id "QSU002" and model "model" and main contact "QCONTACT2" + Given the questioning for partitioning "TIC2023T0100" survey unit id "QSU003" and model "model" and main contact "QCONTACT3" + Given the questioning for partitioning "TIC2023T0100" survey unit id "QSU004" and model "model" and main contact "QCONTACT3" + Given the questioning for partitioning "TIC2023T0100" survey unit id "QSU004" and model "model" and contact "QCONTACT4" + Given the questioning for partitioning "TIC2023T0100" survey unit id "QSU004" and model "model" and contact "QCONTACT5" + + + Scenario: Search by surveyUnitId + When I search for Questioning with "QSU001" and page 0 with size 10 + Then the result size is 1 + Then the result should contain the following Questioning related to surveyUnit: + | id | listContacts | + | QSU001 | QCONTACT1 | + + + Scenario: Search by surveyUnitName + When I search for Questioning with "NAME002" and page 0 with size 10 + Then the result size is 1 + Then the result should contain the following Questioning related to surveyUnit: + | id | listContacts | + | QSU002 | QCONTACT2 | + + Scenario: Search by surveyUnitCode + When I search for Questioning with "CODE002" and page 0 with size 10 + Then the result size is 2 + Then the result should contain the following Questioning related to surveyUnit: + | id | listContacts | + | QSU002 | QCONTACT2 | + | QSU003 | QCONTACT3 | + + + Scenario: Search by accreditationContactId + When I search for Questioning with "QCONTACT3" and page 0 with size 10 + Then the result size is 2 + Then the result should contain the following Questioning related to surveyUnit: + | id | listContacts | + | QSU003 | QCONTACT3 | + | QSU004 | QCONTACT3,QCONTACT4,QCONTACT5| + From 03ee34feb28e78eefa5dd146c3d5b4d7181fe53a Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 18 Dec 2024 08:28:42 +0100 Subject: [PATCH 23/26] refactor: rename methods --- .../query/controller/WebclientController.java | 2 +- .../contact/service/ContactService.java | 2 +- .../contact/service/impl/ContactServiceImpl.java | 14 ++++---------- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java index 889820bc..d7e0a204 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java @@ -174,7 +174,7 @@ private void createContactAndAccreditations(String idSu, Partitioning part, Ques contact = convertToEntityNewContact(contactAccreditationDto); if (contactAccreditationDto.getAddress() != null) contact.setAddress(addressService.convertToEntity(contactAccreditationDto.getAddress())); - contactService.createContactAddressEvent(contact, node); + contactService.createAddressAndEvent(contact, node); } // Create accreditations if not exists diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java index 6e1a2625..97a4adb5 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java @@ -52,7 +52,7 @@ public interface ContactService { Page searchContactByParam(String param, Pageable pageable); - Contact createContactAddressEvent(Contact contact, JsonNode payload); + Contact createAddressAndEvent(Contact contact, JsonNode payload); Contact updateContactAddressEvent(Contact contact, JsonNode payload) throws NotFoundException; diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java index a0eb2a1d..f8271476 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java @@ -66,34 +66,28 @@ public void deleteContact(String identifier) { @Override @Transactional public Contact updateOrCreateContact(String id, ContactDto contactDto, JsonNode payload) { - // Vérifier si le contact existe Optional existingContact = contactRepository.findById(id); if (existingContact.isPresent()) { - // Mise à jour du contact existant Contact contact = convertToEntity(contactDto); - if (contactDto.getAddress() != null) { contact.setAddress(addressService.convertToEntity(contactDto.getAddress())); } - return updateContactAddressEvent(contact, payload); - } else { - // Création d'un nouveau contact + } Contact newContact = convertToEntityNewContact(contactDto); if (contactDto.getAddress() != null) { newContact.setAddress(addressService.convertToEntity(contactDto.getAddress())); } - Contact createdContact = createContactAddressEvent(newContact, payload); + Contact createdContact = createAddressAndEvent(newContact, payload); - // Créer une vue pour le nouveau contact viewService.createView(id, null, null); return createdContact; - } + } @@ -121,7 +115,7 @@ public Page searchContactByParam(String param, Pageable pageab @Override - public Contact createContactAddressEvent(Contact contact, JsonNode payload) { + public Contact createAddressAndEvent(Contact contact, JsonNode payload) { if (contact.getAddress() != null) { addressService.saveAddress(contact.getAddress()); } From 986d604d8db17dcf0677bc727ec9d3636092b7a6 Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 18 Dec 2024 08:28:55 +0100 Subject: [PATCH 24/26] fix: improve search endpoints --- .../contact/repository/ContactRepository.java | 48 +++---------------- .../repository/QuestioningRepository.java | 8 ++-- 2 files changed, 11 insertions(+), 45 deletions(-) diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java index ba6b9032..2e796ece 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java @@ -71,52 +71,18 @@ OR UPPER(first_name || ' ' || last_name) LIKE :param || '%' @Query( value = """ SELECT - * + c.identifier as identifier, + c.email as email, + c.first_name as firstName, + c.last_name as lastName FROM contact c WHERE UPPER(c.last_name) LIKE :param || '%' - UNION - SELECT - * - FROM - contact c - WHERE - UPPER(first_name || ' ' || last_name) LIKE :param || '%' - UNION - SELECT - * - FROM - contact c - WHERE - UPPER(c.email) LIKE :param || '%' - UNION - SELECT - * - FROM - contact c - WHERE - UPPER(c.identifier) LIKE :param || '%' + OR UPPER(first_name || ' ' || last_name) LIKE :param || '%' + OR UPPER(c.email) LIKE :param || '%' + OR UPPER(c.identifier) LIKE :param || '%' """, - countQuery = """ - SELECT COUNT(*) - FROM ( - SELECT 1 - FROM contact c - WHERE UPPER(c.last_name) LIKE :param || '%' - UNION - SELECT 1 - FROM contact c - WHERE UPPER(c.first_name || ' ' || c.last_name) LIKE :param || '%' - UNION - SELECT 1 - FROM contact c - WHERE UPPER(c.email) LIKE :param || '%' - UNION - SELECT 1 - FROM contact c - WHERE UPPER(c.identifier) LIKE :param || '%' - ) AS count_query""", nativeQuery = true ) Page findByParam(String param, Pageable pageable); diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java index 5cb8b3a9..f3d5ce30 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/questioning/repository/QuestioningRepository.java @@ -23,21 +23,21 @@ Questioning findByIdPartitioningAndSurveyUnitIdSu(String idPartitioning, LEFT JOIN FETCH q.questioningEvents evt LEFT JOIN FETCH q.questioningCommunications comm JOIN FETCH q.surveyUnit su - WHERE UPPER(q.surveyUnit.idSu) = :searchParam + WHERE q.surveyUnit.idSu = :searchParam UNION SELECT q FROM Questioning q LEFT JOIN FETCH q.questioningAccreditations acc LEFT JOIN FETCH q.questioningEvents evt LEFT JOIN FETCH q.questioningCommunications comm JOIN FETCH q.surveyUnit su - WHERE UPPER(q.surveyUnit.identificationName) = :searchParam + WHERE q.surveyUnit.identificationName = :searchParam UNION SELECT q FROM Questioning q LEFT JOIN FETCH q.questioningAccreditations acc LEFT JOIN FETCH q.questioningEvents evt LEFT JOIN FETCH q.questioningCommunications comm JOIN FETCH q.surveyUnit su - WHERE UPPER(q.surveyUnit.identificationCode) = :searchParam + WHERE q.surveyUnit.identificationCode = :searchParam UNION SELECT q FROM Questioning q LEFT JOIN FETCH q.questioningAccreditations acc @@ -47,7 +47,7 @@ WHERE UPPER(q.surveyUnit.identificationCode) = :searchParam WHERE EXISTS ( SELECT 1 FROM QuestioningAccreditation qa WHERE qa.questioning = q - AND UPPER(qa.idContact) = :searchParam) + AND qa.idContact = :searchParam) """) List findQuestioningByParam(String searchParam); From 3a1fd62e3a62a8cc7c11b78d18b280536b3631dd Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Mon, 13 Jan 2025 16:36:40 +0100 Subject: [PATCH 25/26] fix: remove search v2 version (too slow, even with indexes) --- .../contact/controller/ContactController.java | 22 +------------------ .../contact/repository/ContactRepository.java | 18 --------------- .../contact/service/ContactService.java | 2 -- .../service/impl/ContactServiceImpl.java | 7 ------ 4 files changed, 1 insertion(+), 48 deletions(-) diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java index 41d47265..88fc0f91 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/contact/controller/ContactController.java @@ -163,27 +163,7 @@ public Page searchContacts( return new PageImpl<>(Collections.emptyList()); } - - @GetMapping(path = Constants.API_CONTACTS_SEARCH+"/V2", produces = "application/json") - @Operation(summary = "Search contact by parameter (identifier, email, name, firstName lastName)") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = SearchContactDto.class)))), - @ApiResponse(responseCode = "400", description = "Bad Request") - }) - public Page searchContactByParam( - @RequestParam(required = true) String searchParam, - @RequestParam(defaultValue = "0") Integer page, - @RequestParam(defaultValue = "10") Integer pageSize) { - - log.info( - "Search contact with param = {} page = {} pageSize = {}", searchParam, page, pageSize); - - Pageable pageable = PageRequest.of(page, pageSize); - - return contactService.searchContactByParam(searchParam.toUpperCase(), pageable); - - } - + static class ContactPage extends PageImpl { diff --git a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java index 2e796ece..885f7901 100644 --- a/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java +++ b/platine-management-db/src/main/java/fr/insee/survey/datacollectionmanagement/contact/repository/ContactRepository.java @@ -68,23 +68,5 @@ OR UPPER(first_name || ' ' || last_name) LIKE :param || '%' ) Page findByFirstNameLastName(String param, Pageable pageable); - @Query( - value = """ - SELECT - c.identifier as identifier, - c.email as email, - c.first_name as firstName, - c.last_name as lastName - FROM - contact c - WHERE - UPPER(c.last_name) LIKE :param || '%' - OR UPPER(first_name || ' ' || last_name) LIKE :param || '%' - OR UPPER(c.email) LIKE :param || '%' - OR UPPER(c.identifier) LIKE :param || '%' - """, - nativeQuery = true - ) - Page findByParam(String param, Pageable pageable); } diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java index 97a4adb5..9a82e05a 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/ContactService.java @@ -50,8 +50,6 @@ public interface ContactService { Contact updateOrCreateContact(String id, ContactDto contactDto, JsonNode payload); - Page searchContactByParam(String param, Pageable pageable); - Contact createAddressAndEvent(Contact contact, JsonNode payload); Contact updateContactAddressEvent(Contact contact, JsonNode payload) throws NotFoundException; diff --git a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java index f8271476..7edb77eb 100644 --- a/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java +++ b/platine-management-service/src/main/java/fr/insee/survey/datacollectionmanagement/contact/service/impl/ContactServiceImpl.java @@ -106,13 +106,6 @@ public Page searchContactByName(String name, Pageable pageable return contactRepository.findByFirstNameLastName(name, pageable); } - @Override - public Page searchContactByParam(String param, Pageable pageable) { - return contactRepository.findByParam(param, pageable); - } - - - @Override public Contact createAddressAndEvent(Contact contact, JsonNode payload) { From 2d12dd17d5be63ac94415aea4875cfa0d135e3ef Mon Sep 17 00:00:00 2001 From: Betty Becuwe Date: Wed, 15 Jan 2025 15:42:18 +0100 Subject: [PATCH 26/26] fix: put quesitoning for weclients --- .../query/controller/WebclientController.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java index d7e0a204..ad0eceb4 100644 --- a/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java +++ b/platine-management-api/src/main/java/fr/insee/survey/datacollectionmanagement/query/controller/WebclientController.java @@ -103,7 +103,7 @@ public ResponseEntity putQuestioning(@RequestBody Quest log.info("Put questioning for webclients {}", questioningWebclientDto.toString()); String modelName = questioningWebclientDto.getModelName(); - String idSu = StringUtils.upperCase(questioningWebclientDto.getSurveyUnit().getIdSu()); + String idSu = questioningWebclientDto.getSurveyUnit().getIdSu(); String idPartitioning = StringUtils.upperCase(questioningWebclientDto.getIdPartitioning()); @@ -115,10 +115,10 @@ public ResponseEntity putQuestioning(@RequestBody Quest HttpStatus httpStatus = HttpStatus.OK; su = convertToEntity(questioningWebclientDto.getSurveyUnit()); - surveyUnitService.saveSurveyUnitAndAddress(su); + su = surveyUnitService.saveSurveyUnitAndAddress(su); // Create questioning if not exists - Questioning questioning = questioningService.findByIdPartitioningAndSurveyUnitIdSu(idPartitioning, idSu); + Questioning questioning= questioningService.findByIdPartitioningAndSurveyUnitIdSu(idPartitioning, idSu); if (questioning == null) { httpStatus = HttpStatus.CREATED; log.info("Create questioning for partitioning={} model={} surveyunit={} ", idPartitioning, modelName, @@ -197,7 +197,8 @@ private void createContactAndAccreditations(String idSu, Partitioning part, Ques questioningAccreditation.setMain(contactAccreditationDto.isMain()); questioningAccreditation.setQuestioning(questioning); questioningAccreditationService.saveQuestioningAccreditation(questioningAccreditation); - + setExistingAccreditations.add(questioningAccreditation); + questioning.setQuestioningAccreditations(setExistingAccreditations); // create view viewService.createView(contactAccreditationDto.getIdentifier(), questioning.getSurveyUnit().getIdSu(),