RED-9958:Several problems after technical_name refactoring

changed it so name and technical name are unique, rest is optional
This commit is contained in:
yhampe 2024-09-04 10:28:14 +02:00
parent dd0096a04c
commit e5271c928e

View File

@ -5,6 +5,7 @@ import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicC
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import org.springframework.stereotype.Service;
@ -58,7 +59,6 @@ public class LegalBasisMappingPersistenceService {
return legalBasisMappingRepository.findById(dossierTemplateId)
.orElseGet(() -> {
// create on get if not present
var lbm = new LegalBasisMappingEntity();
lbm.setDossierTemplateId(dossierTemplateId);
lbm.setLegalBasis(new ArrayList<>());
@ -72,27 +72,42 @@ public class LegalBasisMappingPersistenceService {
@Transactional
public void addOrUpdateLegalBasis(String dossierTemplateId, LegalBasis legalBasis) {
validateLegalBasis(legalBasis);
var mapping = getLegalBasisMappingOrCreate(dossierTemplateId);
mapping.getLegalBasis()
Optional<LegalBasisEntity> existingBasisByTechnicalName = mapping.getLegalBasis()
.stream()
.filter(l -> l.getTechnicalName().equals(legalBasis.getTechnicalName()))
.findAny().ifPresentOrElse(existingBasis -> {
existingBasis.setReason(legalBasis.getReason());
existingBasis.setDescription(legalBasis.getDescription());
existingBasis.setName(legalBasis.getName());
},
() -> mapping.getLegalBasis()
.add(LegalBasisEntity.builder()
.name(legalBasis.getName())
.description(legalBasis.getDescription())
.reason(legalBasis.getReason())
.technicalName(legalBasis.getTechnicalName())
.build()));
.findAny();
Optional<LegalBasisEntity> existingBasisByName = mapping.getLegalBasis()
.stream()
.filter(l -> l.getName().equals(legalBasis.getName()))
.findAny();
if (existingBasisByTechnicalName.isPresent() && existingBasisByName.isPresent()) {
LegalBasisEntity existingBasis = existingBasisByTechnicalName.get();
existingBasis.setDescription(legalBasis.getDescription());
existingBasis.setReason(legalBasis.getReason());
} else if (existingBasisByTechnicalName.isPresent()) {
LegalBasisEntity existingBasis = existingBasisByTechnicalName.get();
existingBasis.setName(legalBasis.getName());
existingBasis.setDescription(legalBasis.getDescription());
existingBasis.setReason(legalBasis.getReason());
} else if (existingBasisByName.isPresent()) {
LegalBasisEntity existingBasis = existingBasisByName.get();
existingBasis.setTechnicalName(legalBasis.getTechnicalName());
existingBasis.setDescription(legalBasis.getDescription());
existingBasis.setReason(legalBasis.getReason());
} else {
mapping.getLegalBasis()
.add(LegalBasisEntity.builder()
.name(legalBasis.getName())
.description(legalBasis.getDescription())
.reason(legalBasis.getReason())
.technicalName(legalBasis.getTechnicalName())
.build());
}
mapping.setVersion(mapping.getVersion() + 1);
legalBasisMappingRepository.save(mapping);
}
@ -103,6 +118,10 @@ public class LegalBasisMappingPersistenceService {
throw new BadRequestException("The technical name cannot be empty!");
}
if (legalBasis.getName() == null || legalBasis.getName().isEmpty()) {
throw new BadRequestException("The name cannot be empty!");
}
if (legalBasis.getName().length() > MAX_NAME_LENGTH) {
throw new BadRequestException(String.format("The name is too long (%s), max length %s", legalBasis.getName().length(), MAX_NAME_LENGTH));
}