DeclaredSkillDatabaseRepository.java
package fr.avenirsesr.portfolio.declaredskill.infrastructure.adapter.repository;
import fr.avenirsesr.portfolio.common.data.infrastructure.adapter.repository.GenericJpaRepositoryAdapter;
import fr.avenirsesr.portfolio.declaredskill.domain.model.DeclaredSkill;
import fr.avenirsesr.portfolio.declaredskill.domain.port.output.repository.DeclaredSkillRepository;
import fr.avenirsesr.portfolio.declaredskill.infrastructure.adapter.mapper.DeclaredSkillMapper;
import fr.avenirsesr.portfolio.declaredskill.infrastructure.adapter.model.DeclaredSkillEntity;
import java.util.Optional;
import java.util.UUID;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Component;
@Component
public class DeclaredSkillDatabaseRepository
extends GenericJpaRepositoryAdapter<DeclaredSkill, DeclaredSkillEntity>
implements DeclaredSkillRepository {
private final DeclaredSkillJpaRepository jpaRepository;
public DeclaredSkillDatabaseRepository(DeclaredSkillJpaRepository jpaRepository) {
super(jpaRepository, jpaRepository, DeclaredSkillEntity.class, DeclaredSkillMapper.INSTANCE);
this.jpaRepository = jpaRepository;
}
@Override
public Optional<DeclaredSkill> findByExternalSkillId(UUID externalSkillId) {
return jpaRepository
.findByExternalSkillId(externalSkillId)
.map(DeclaredSkillMapper.INSTANCE::toDomain);
}
@Override
public DeclaredSkill saveOrGet(DeclaredSkill declaredSkill) {
try {
return save(declaredSkill);
} catch (DataIntegrityViolationException e) {
return findByExternalSkillId(declaredSkill.getExternalSkillId()).orElseThrow(() -> e);
}
}
}