AMSServiceImpl.java
package fr.avenirsesr.portfolio.ams.domain.service;
import fr.avenirsesr.portfolio.ams.domain.dto.AmsView;
import fr.avenirsesr.portfolio.ams.domain.model.AMS;
import fr.avenirsesr.portfolio.ams.domain.port.input.AMSService;
import fr.avenirsesr.portfolio.ams.domain.port.output.repository.AMSRepository;
import fr.avenirsesr.portfolio.common.data.domain.model.PageCriteria;
import fr.avenirsesr.portfolio.common.data.domain.model.PagedResult;
import fr.avenirsesr.portfolio.student.progress.domain.exception.StudentProgressNotFoundException;
import fr.avenirsesr.portfolio.student.progress.domain.model.StudentProgress;
import fr.avenirsesr.portfolio.student.progress.domain.port.output.repository.SkillLevelProgressRepository;
import fr.avenirsesr.portfolio.student.progress.domain.port.output.repository.StudentProgressRepository;
import fr.avenirsesr.portfolio.trace.domain.port.output.repository.TraceRepository;
import fr.avenirsesr.portfolio.user.domain.model.Student;
import java.util.UUID;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class AMSServiceImpl implements AMSService {
private final AMSRepository amsRepository;
private final StudentProgressRepository studentProgressRepository;
private final TraceRepository traceRepository;
private final SkillLevelProgressRepository skillLevelProgressRepository;
public AMSServiceImpl(
AMSRepository amsRepository,
StudentProgressRepository studentProgressRepository,
TraceRepository traceRepository,
SkillLevelProgressRepository skillLevelProgressRepository) {
this.amsRepository = amsRepository;
this.studentProgressRepository = studentProgressRepository;
this.traceRepository = traceRepository;
this.skillLevelProgressRepository = skillLevelProgressRepository;
}
@Override
public PagedResult<AmsView> findUserAmsByStudentProgress(
Student student, UUID studentProgressId, PageCriteria pageCriteria) {
log.debug(
"Fetching AMS for user with id [{}] with pagination (page={}, pageSize={})",
student.getId(),
pageCriteria.page(),
pageCriteria.pageSize());
StudentProgress studentProgress =
studentProgressRepository
.findById(studentProgressId)
.orElseThrow(StudentProgressNotFoundException::new);
var amses = amsRepository.findByStudent(student, pageCriteria);
return new PagedResult<>(
amses.content().stream()
.map(
ams ->
new AmsView(
ams,
skillLevelProgressRepository.linkedWith(ams).size(),
traceRepository.linkedWith(ams).size()))
.toList(),
amses.pageInfo());
}
@Override
public PagedResult<AMS> search(Student student, String keyword, PageCriteria pageCriteria) {
return amsRepository.findByStudent(student, pageCriteria, keyword);
}
}