AdditionalSkillServiceImpl.java
package fr.avenirsesr.portfolio.additionalskill.domain.service;
import fr.avenirsesr.portfolio.additionalskill.domain.exception.AdditionalSkillNotFoundException;
import fr.avenirsesr.portfolio.additionalskill.domain.exception.DuplicateAdditionalSkillException;
import fr.avenirsesr.portfolio.additionalskill.domain.model.AdditionalSkill;
import fr.avenirsesr.portfolio.additionalskill.domain.model.AdditionalSkillProgress;
import fr.avenirsesr.portfolio.additionalskill.domain.model.enums.EAdditionalSkillLevel;
import fr.avenirsesr.portfolio.additionalskill.domain.model.enums.EAdditionalSkillType;
import fr.avenirsesr.portfolio.additionalskill.domain.port.input.AdditionalSkillService;
import fr.avenirsesr.portfolio.additionalskill.domain.port.output.AdditionalSkillCache;
import fr.avenirsesr.portfolio.additionalskill.domain.port.output.repository.AdditionalSkillProgressRepository;
import fr.avenirsesr.portfolio.shared.domain.model.PageCriteria;
import fr.avenirsesr.portfolio.shared.domain.model.PagedResult;
import fr.avenirsesr.portfolio.user.domain.model.Student;
import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@AllArgsConstructor
public class AdditionalSkillServiceImpl implements AdditionalSkillService {
private final AdditionalSkillCache additionalSkillCache;
private final AdditionalSkillProgressRepository additionalSkillProgressRepository;
@Override
public PagedResult<AdditionalSkillProgress> getAdditionalSkillsProgresses(
Student student, PageCriteria pageCriteria) {
return additionalSkillProgressRepository.findAllByStudent(student, pageCriteria);
}
@Override
public PagedResult<AdditionalSkill> searchAdditionalSkills(
String keyword, PageCriteria pageCriteria) {
return additionalSkillCache.findBySkillTitle(keyword, pageCriteria);
}
@Override
public void createAdditionalSkillProgress(
Student student,
UUID additionalSkillId,
EAdditionalSkillType type,
EAdditionalSkillLevel level) {
try {
AdditionalSkill additionalSkill = additionalSkillCache.findById(additionalSkillId);
AdditionalSkillProgress additionalSkillProgress =
AdditionalSkillProgress.create(student, additionalSkill, level);
if (additionalSkillProgressRepository.additionalSkillProgressAlreadyExists(
additionalSkillProgress)) {
log.error(
"Failed to add additional skill [{}] for student [{}] because it already exists",
additionalSkillId,
student);
throw new DuplicateAdditionalSkillException();
}
additionalSkillProgressRepository.save(additionalSkillProgress);
} catch (AdditionalSkillNotFoundException e) {
log.error("Failed to add additional skill for student [{}]: {}", student, e.getMessage());
throw e;
}
}
}