FakeSkillLevel.java
package fr.avenirsesr.portfolio.api.infrastructure.adapter.seeder.fake;
import fr.avenirsesr.portfolio.api.domain.model.SkillLevel;
import fr.avenirsesr.portfolio.api.domain.model.enums.ELanguage;
import fr.avenirsesr.portfolio.api.domain.model.enums.ESkillLevelStatus;
import java.time.LocalDate;
import java.time.Period;
import java.util.UUID;
public class FakeSkillLevel {
private static final FakerProvider faker = new FakerProvider();
private final SkillLevel skillLevel;
private FakeSkillLevel(SkillLevel skillLevel) {
this.skillLevel = skillLevel;
}
public static FakeSkillLevel create() {
return new FakeSkillLevel(
SkillLevel.create(
UUID.fromString(faker.call().internet().uuid()),
"Niv. %s".formatted(faker.call().lorem().character()),
faker.call().lorem().sentence()))
.withStatus(ESkillLevelStatus.NOT_STARTED);
}
public static FakeSkillLevel of(SkillLevel skillLevel, ELanguage language) {
return new FakeSkillLevel(
SkillLevel.create(
skillLevel.getId(),
String.format("%s %s", skillLevel.getName(), language.getCode()),
String.format("%s %s", skillLevel.getDescription(), language.getCode())));
}
public FakeSkillLevel withStatus(ESkillLevelStatus status) {
LocalDate pastStartDate = LocalDate.now().minus(Period.ofYears(2));
LocalDate pastEndDate = LocalDate.now().minus(Period.ofYears(1));
LocalDate futureStartDate = LocalDate.now().plus(Period.ofYears(1));
LocalDate futureEndDate = LocalDate.now().plus(Period.ofYears(2));
skillLevel.setStatus(status);
switch (status) {
case VALIDATED, FAILED -> {
skillLevel.setStartDate(pastStartDate);
skillLevel.setEndDate(pastEndDate);
}
case UNDER_ACQUISITION, UNDER_REVIEW -> {
skillLevel.setStartDate(pastStartDate);
skillLevel.setEndDate(futureEndDate);
}
case TO_BE_EVALUATED, NOT_STARTED -> {
skillLevel.setStartDate(futureStartDate);
skillLevel.setEndDate(futureEndDate);
}
}
return this;
}
public SkillLevel toModel() {
return skillLevel;
}
}