FakeExternalUser.java
package fr.avenirsesr.portfolio.api.infrastructure.adapter.seeder.fake;
import fr.avenirsesr.portfolio.api.domain.model.ExternalUser;
import fr.avenirsesr.portfolio.api.domain.model.User;
import fr.avenirsesr.portfolio.api.domain.model.enums.EExternalSource;
import fr.avenirsesr.portfolio.api.domain.model.enums.EUserCategory;
import java.util.Arrays;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class FakeExternalUser {
private static final FakerProvider faker = new FakerProvider();
private final ExternalUser externalUser;
private FakeExternalUser(ExternalUser externalUser) {
this.externalUser = externalUser;
}
public static FakeExternalUser of(User user, EUserCategory category) {
if (category == EUserCategory.STUDENT && !user.isStudent()) {
throw new IllegalArgumentException("Student cannot be null");
}
if (category == EUserCategory.TEACHER && !user.isTeacher()) {
throw new IllegalArgumentException("Student cannot be null");
}
int externalIdType = faker.call().number().numberBetween(0, 3);
return new FakeExternalUser(
ExternalUser.create(
user,
switch (externalIdType) {
case 0 -> faker.call().internet().uuid();
case 1 -> String.valueOf(faker.call().number().numberBetween(1, 999_999));
case 2 -> faker.call().regexify("[A-Z]{3}[0-9]{3}");
default -> throw new IllegalStateException("Unexpected value: " + externalIdType);
},
Arrays.stream(EExternalSource.values())
.toList()
.get(faker.call().random().nextInt(EExternalSource.values().length)),
category,
faker.call().internet().emailAddress(),
user.getFirstName(),
user.getLastName()));
}
public ExternalUser toModel() {
return externalUser;
}
}