Skip to content
Snippets Groups Projects
Commit ed61053e authored by Nicolas.Rod's avatar Nicolas.Rod
Browse files

fix(ContributorService): search a contributor by ORCID in two steps to prevent...

fix(ContributorService): search a contributor by ORCID in two steps to prevent an exception when the same ORCID exists twice in database
parent 8a0a58fb
No related branches found
No related tags found
1 merge request!216fix(MetadataExtractor): [AoU-507] simplify contributors list synchronization...
......@@ -5,6 +5,8 @@ import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
......@@ -14,6 +16,9 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import ch.unige.aou.model.AouResourceNormalized;
@Entity
@Table(uniqueConstraints = {
@UniqueConstraint(columnNames = { "cnIndividu", "orcid" })
})
public class Contributor extends AouResourceNormalized<Contributor> {
@NotNull
......
......@@ -42,9 +42,15 @@ public class ContributorService extends AouResourceService<Contributor> {
if (!StringTool.isNullOrEmpty(contributorDTO.getCnIndividu())) {
existingContributor = this.contributorRepository.findByCnIndividu(contributorDTO.getCnIndividu());
}
// if contributor with same cnIndividu was not found, then search on ORCID
if (existingContributor == null && !StringTool.isNullOrEmpty(contributorDTO.getOrcid())) {
existingContributor = this.contributorRepository.findByOrcid(contributorDTO.getOrcid());
// first try to find a contributor with same ORCID and a cnIndividu (it is better to use the most identified contributor)
existingContributor = this.contributorRepository.findByOrcidAndCnIndividuIsNotNull(contributorDTO.getOrcid());
if (existingContributor == null) {
// then if no contributor with same ORCID and cnIndividu has been found, try to find one with ORCID only
existingContributor = this.contributorRepository.findByOrcidAndCnIndividuIsNull(contributorDTO.getOrcid());
}
}
}
......
......@@ -13,7 +13,7 @@ public interface ContributorRepository extends SolidifyRepository<Contributor> {
Contributor findByCnIndividu(String cnIndividu);
Contributor findByOrcid(String orcid);
Contributor findByOrcidAndCnIndividuIsNull(String orcid);
Contributor findByOrcidAndCnIndividuIsNotNull(String orcid);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment