InstitutionServiceImpl.java
package fr.avenirsesr.portfolio.program.domain.service;
import fr.avenirsesr.portfolio.common.configuration.domain.model.InstitutionConfigurationElements;
import fr.avenirsesr.portfolio.program.domain.model.Institution;
import fr.avenirsesr.portfolio.program.domain.port.input.InstitutionService;
import fr.avenirsesr.portfolio.program.domain.port.output.client.InstitutionConfigClient;
import fr.avenirsesr.portfolio.program.domain.port.output.repository.InstitutionRepository;
import fr.avenirsesr.portfolio.shared.domain.port.input.LoggedInUserService;
import fr.avenirsesr.portfolio.student.progress.imported.domain.model.StudentProgress;
import fr.avenirsesr.portfolio.student.progress.imported.domain.port.output.repository.StudentProgressRepository;
import fr.avenirsesr.portfolio.user.domain.model.Student;
import java.util.List;
import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@AllArgsConstructor
public class InstitutionServiceImpl implements InstitutionService {
private final StudentProgressRepository studentProgressRepository;
private final LoggedInUserService loggedInUserService;
private final InstitutionConfigClient institutionConfigClient;
private final InstitutionRepository institutionRepository;
@Override
public InstitutionConfigurationElements getInstitutionConfiguration() {
Student student = loggedInUserService.getLoggedInStudent();
List<StudentProgress> studentProgresses = studentProgressRepository.findAllByStudent(student);
List<InstitutionConfigurationElements> configs =
studentProgresses.stream()
.map(sp -> sp.getTrainingPath().getProgram().getInstitution().getId())
.distinct()
.map(institutionConfigClient::getInstitutionConfigElementsById)
.toList();
boolean apcEnabled = configs.stream().anyMatch(InstitutionConfigurationElements::apcEnabled);
boolean lifeProjectEnabled =
configs.stream().anyMatch(InstitutionConfigurationElements::lifeProjectEnabled);
return new InstitutionConfigurationElements(apcEnabled, lifeProjectEnabled);
}
@Override
public Institution createInstitution(UUID institutionId, String name) {
return institutionRepository.save(Institution.create(institutionId, name));
}
@Override
public Institution updateInstitution(UUID institutionId, String name) {
var institution = institutionRepository.findById(institutionId).orElseThrow();
institution.setName(name);
return institutionRepository.save(institution);
}
}