UserPhotoDatabaseRepository.java
package fr.avenirsesr.portfolio.file.infrastructure.adapter.repository;
import fr.avenirsesr.portfolio.common.data.domain.model.User;
import fr.avenirsesr.portfolio.common.data.domain.model.enums.EUserCategory;
import fr.avenirsesr.portfolio.common.data.infrastructure.adapter.repository.GenericJpaRepositoryAdapter;
import fr.avenirsesr.portfolio.file.domain.model.EUserPhotoType;
import fr.avenirsesr.portfolio.file.domain.model.UserPhoto;
import fr.avenirsesr.portfolio.file.domain.port.output.repository.UserPhotoRepository;
import fr.avenirsesr.portfolio.file.infrastructure.adapter.mapper.UserPhotoMapper;
import fr.avenirsesr.portfolio.file.infrastructure.adapter.model.UserPhotoEntity;
import fr.avenirsesr.portfolio.file.infrastructure.adapter.specification.UserResourceSpecification;
import java.util.List;
import java.util.Optional;
import org.springframework.stereotype.Repository;
@Repository
public class UserPhotoDatabaseRepository
extends GenericJpaRepositoryAdapter<UserPhoto, UserPhotoEntity> implements UserPhotoRepository {
public UserPhotoDatabaseRepository(UserPhotoJpaRepository jpaRepository) {
super(jpaRepository, jpaRepository, UserPhotoEntity.class, UserPhotoMapper.INSTANCE);
}
@Override
public List<UserPhoto> findAllByUser(User user, EUserCategory userCategory, EUserPhotoType type) {
return findAll(UserResourceSpecification.ofUser(user, userCategory, type));
}
@Override
public Optional<UserPhoto> findActiveByUser(
User user, EUserCategory userCategory, EUserPhotoType type) {
return jpaSpecificationExecutor
.findOne(
UserResourceSpecification.ofUser(user, userCategory, type)
.and(UserResourceSpecification.onlyActiveVersion()))
.stream()
.map(UserPhotoMapper.INSTANCE::toDomain)
.findAny();
}
}