DeclaredSkillProgressDatabaseRepository.java
package fr.avenirsesr.portfolio.student.progress.declared.skill.infrastructure.adapter.repository;
import fr.avenirsesr.portfolio.common.data.domain.FetchGraph;
import fr.avenirsesr.portfolio.common.data.domain.model.PageCriteria;
import fr.avenirsesr.portfolio.common.data.domain.model.PagedResult;
import fr.avenirsesr.portfolio.student.progress.declared.skill.domain.model.DeclaredSkillProgress;
import fr.avenirsesr.portfolio.student.progress.declared.skill.domain.port.output.repository.DeclaredSkillProgressRepository;
import fr.avenirsesr.portfolio.student.progress.declared.skill.infrastructure.adapter.mapper.DeclaredSkillProgressMapper;
import fr.avenirsesr.portfolio.student.progress.declared.skill.infrastructure.adapter.model.DeclaredSkillProgressEntity;
import fr.avenirsesr.portfolio.student.progress.declared.skill.infrastructure.adapter.specification.DeclaredSkillProgressSpecification;
import fr.avenirsesr.portfolio.user.domain.model.Student;
import fr.avenirsesr.portfolio.user.infrastructure.adapter.repository.GenericUserJpaRepositoryAdapter;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import java.util.List;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Repository;
@Repository
public class DeclaredSkillProgressDatabaseRepository
extends GenericUserJpaRepositoryAdapter<DeclaredSkillProgress, DeclaredSkillProgressEntity>
implements DeclaredSkillProgressRepository {
private final DeclaredSkillProgressJpaRepository jpaRepository;
@PersistenceContext private EntityManager em;
public DeclaredSkillProgressDatabaseRepository(DeclaredSkillProgressJpaRepository jpaRepository) {
super(
jpaRepository,
jpaRepository,
DeclaredSkillProgressEntity.class,
DeclaredSkillProgressMapper.INSTANCE);
this.jpaRepository = jpaRepository;
}
@Override
public boolean declaredSkillProgressAlreadyExists(DeclaredSkillProgress declaredSkillProgress) {
return jpaRepository.exists(
DeclaredSkillProgressSpecification.declaredSkillProgressAlreadyExists(
declaredSkillProgress.getSkill(), declaredSkillProgress.getStudent().getId()));
}
@Override
public List<DeclaredSkillProgress> findAllByStudent(Student student) {
return findAll(hasStudent(student));
}
@Override
public PagedResult<DeclaredSkillProgress> findAllByStudent(
Student student, PageCriteria pageCriteria) {
var specification = hasStudent(student);
return findAll(
specification,
PageRequest.of(pageCriteria.page(), pageCriteria.pageSize()),
FetchGraph.init().fetch("student").fetch("declaredSkill"));
}
@Override
public PagedResult<DeclaredSkillProgress> findAllByStudent(
Student student, PageCriteria pageCriteria, String keyword) {
var specification = hasStudent(student).and(DeclaredSkillProgressSpecification.search(keyword));
return findAllByStudent(specification, pageCriteria);
}
private PagedResult<DeclaredSkillProgress> findAllByStudent(
Specification<DeclaredSkillProgressEntity> specification, PageCriteria pageCriteria) {
return findAll(specification, PageRequest.of(pageCriteria.page(), pageCriteria.pageSize()));
}
}