package eu.old.eudat.migration; import eu.eudat.commons.enums.DmpUserRole; import eu.eudat.commons.enums.IsActive; import eu.eudat.data.DmpUserEntity; import eu.old.eudat.data.dao.entities.UserDmpDao; import eu.old.eudat.data.entities.UserDMP; import eu.old.eudat.logic.services.operations.DatabaseRepository; import gr.cite.tools.logging.LoggerService; import jakarta.persistence.EntityManager; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import java.time.Instant; import java.util.List; @Service public class DmpUserMigrationService { private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(DmpUserMigrationService.class)); private final DatabaseRepository databaseRepository; private final EntityManager entityManager; private static final int PageSize = 500; private static final boolean TestMode = false; public DmpUserMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager) { this.databaseRepository = databaseRepository; this.entityManager = entityManager; } public void migrate() { UserDmpDao userDmpDao = databaseRepository.getUserDmpDao(); long total = userDmpDao.asQueryable().count(); logger.debug("Migrate UserDMP Total : " + total); int page = 0; List items; do { items = userDmpDao.asQueryable().orderBy((builder, root) -> builder.asc(root.get("ID"))).skip(page * PageSize).take(PageSize).toList(); if (items != null && !items.isEmpty()) { logger.debug("Migrate UserDMP " + page * PageSize + " of " + total); for (UserDMP item : items) { //entityManager.detach(item); DmpUserEntity data = new DmpUserEntity(); data.setId(item.getId()); data.setDmpId(item.getDmp().getId()); data.setUserId(item.getUser().getId()); data.setRole(DmpUserRole.of(item.getRole().shortValue())); data.setCreatedAt(item.getDmp().getCreated() != null ? item.getDmp().getCreated().toInstant() : Instant.now()); data.setUpdatedAt(item.getDmp().getModified() != null ? item.getDmp().getModified().toInstant() : Instant.now()); data.setIsActive(IsActive.Active); this.entityManager.persist(data); } this.entityManager.flush(); page++; } } while (items != null && !items.isEmpty() && !TestMode); } }