FakeTrace.java

package fr.avenirsesr.portfolio.api.infrastructure.adapter.seeder.fake;

import fr.avenirsesr.portfolio.api.domain.model.AMS;
import fr.avenirsesr.portfolio.api.domain.model.SkillLevel;
import fr.avenirsesr.portfolio.api.domain.model.Trace;
import fr.avenirsesr.portfolio.api.domain.model.User;
import fr.avenirsesr.portfolio.api.domain.model.enums.ELanguage;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.UUID;
import java.util.stream.Stream;

public class FakeTrace {
  private static final FakerProvider faker = new FakerProvider();
  private final Trace trace;

  private FakeTrace(Trace trace) {
    this.trace = trace;
  }

  public static FakeTrace of(User user) {
    return new FakeTrace(
        Trace.create(
            UUID.fromString(faker.call().internet().uuid()),
            user,
            faker.call().lorem().sentence(),
            Instant.now().plus(90, ChronoUnit.DAYS),
            ELanguage.FALLBACK));
  }

  public FakeTrace withSkillLevel(List<SkillLevel> skillLevels) {
    trace.setSkillLevels(skillLevels);
    skillLevels.forEach(
        skillLevel ->
            skillLevel.setTraces(
                Stream.concat(skillLevel.getTraces().stream(), Stream.of(trace)).toList()));
    return this;
  }

  public FakeTrace withAMS(List<AMS> amses) {
    trace.setAmses(amses);
    return this;
  }

  public Trace toModel() {
    return trace;
  }
}