![JAR search and dependency download from the Maven repository](/logo.png)
net.ozwolf.mongo.migrations.internal.service.MigrationsService Maven / Gradle / Ivy
package net.ozwolf.mongo.migrations.internal.service;
import net.ozwolf.mongo.migrations.MongoTrekState;
import net.ozwolf.mongo.migrations.exception.DuplicateVersionException;
import net.ozwolf.mongo.migrations.internal.dao.SchemaVersionDAO;
import net.ozwolf.mongo.migrations.internal.domain.Migration;
import net.ozwolf.mongo.migrations.internal.domain.MigrationCommands;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import static java.util.stream.Collectors.toList;
public class MigrationsService {
private final SchemaVersionDAO schemaVersionDAO;
public MigrationsService(SchemaVersionDAO schemaVersionDAO) {
this.schemaVersionDAO = schemaVersionDAO;
}
public MongoTrekState getState(MigrationCommands commands) {
return new MongoTrekState(getFullState(commands));
}
private List getFullState(MigrationCommands commands) throws DuplicateVersionException {
List alreadyRun = schemaVersionDAO.findAll();
List commandMigrations = commands.getMigrations()
.stream()
.map(Migration::new)
.collect(toList());
checkForDuplicateVersions(commandMigrations);
return commandMigrations
.stream()
.map(joinWith(alreadyRun))
.collect(toList());
}
private void checkForDuplicateVersions(List migrations) throws DuplicateVersionException {
List duplicateVersions = migrations.stream()
.filter(m -> migrations.stream().filter(cm -> cm.getVersion().equals(m.getVersion())).count() > 1)
.collect(toList());
if (!duplicateVersions.isEmpty())
throw new DuplicateVersionException(duplicateVersions.get(0));
}
private static Function joinWith(final List alreadyRun) {
return migration -> {
Optional found = alreadyRun.stream().filter(o -> o.getVersion().equals(migration.getVersion())).findFirst();
return found
.orElse(migration)
.assign(migration.getCommand());
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy