TrainingPathDatabaseRepository.java
package fr.avenirsesr.portfolio.program.infrastructure.adapter.repository;
import fr.avenirsesr.portfolio.program.domain.model.TrainingPath;
import fr.avenirsesr.portfolio.program.domain.port.output.TrainingPathRepository;
import fr.avenirsesr.portfolio.program.infrastructure.adapter.mapper.TrainingPathMapper;
import fr.avenirsesr.portfolio.program.infrastructure.adapter.model.TrainingPathEntity;
import fr.avenirsesr.portfolio.shared.infrastructure.adapter.repository.GenericJpaRepositoryAdapter;
import fr.avenirsesr.portfolio.user.domain.model.Student;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.stereotype.Repository;
@Repository
public class TrainingPathDatabaseRepository
extends GenericJpaRepositoryAdapter<TrainingPath, TrainingPathEntity>
implements TrainingPathRepository {
private final TrainingPathJpaRepository jpaRepository;
public TrainingPathDatabaseRepository(TrainingPathJpaRepository jpaRepository) {
super(
jpaRepository, jpaRepository, TrainingPathMapper::fromDomain, TrainingPathMapper::toDomain);
this.jpaRepository = jpaRepository;
}
@Override
public List<TrainingPath> findAllTrainingPathsByStudents(Student student) {
return jpaRepository.findAllByStudentId(student.getId()).stream()
.map(TrainingPathMapper::toDomainWithoutRecursion)
.collect(Collectors.groupingBy(TrainingPath::getId))
.values()
.stream()
.map(List::getFirst)
.toList();
}
}