From 2ebb7556a4fda6764c90b0d93f2c73754c3b505a Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Thu, 6 Feb 2025 11:37:43 +0100 Subject: [PATCH] use only persistViaSql --- .../hsadminng/hs/migration/CsvDataImport.java | 99 +++++++++++++------ .../hs/migration/ImportHostingAssets.java | 12 +-- 2 files changed, 77 insertions(+), 34 deletions(-) diff --git a/src/test/java/net/hostsharing/hsadminng/hs/migration/CsvDataImport.java b/src/test/java/net/hostsharing/hsadminng/hs/migration/CsvDataImport.java index 69a1127f..66450e69 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/migration/CsvDataImport.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/migration/CsvDataImport.java @@ -4,6 +4,8 @@ import com.opencsv.CSVParserBuilder; import com.opencsv.CSVReader; import com.opencsv.CSVReaderBuilder; import lombok.SneakyThrows; +import net.hostsharing.hsadminng.hs.booking.item.HsBookingItem; +import net.hostsharing.hsadminng.hs.booking.project.HsBookingProject; import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAsset; import net.hostsharing.hsadminng.rbac.context.ContextBasedTest; import net.hostsharing.hsadminng.persistence.BaseEntity; @@ -155,37 +157,78 @@ public class CsvDataImport extends ContextBasedTest { return record; } - public T persist(final Integer id, final T entity) { - try { - if (entity instanceof HsHostingAsset ha) { - //noinspection unchecked - return (T) persistViaSql(id, ha); - } - return persistViaEM(id, entity); - } catch (Exception exc) { - errors.add("failed to persist #" + entity.hashCode() + ": " + entity); - errors.add(exc.toString()); - } - return entity; - } + @SneakyThrows + public void persistViaSql(final Integer id, final HsBookingProject entity) { + entity.setUuid(UUID.randomUUID()); - public T persistViaEM(final Integer id, final T entity) { - if (em.contains(entity)) { - return entity; - } - try { - em.persist(entity); - em.flush(); // makes it a bit slower, but produces better error messages - System.out.println("persisted #" + id + " as " + entity.getUuid()); - return entity; - } catch (final Exception exc) { - System.err.println("persist failed for #" + id + " as " + entity); - throw exc; // for breakpoints - } + final var query = em.createNativeQuery(""" + insert into hs_booking.project( + uuid, + version, + debitorUuid, + caption) + values ( + :uuid, + :version, + :debitorUuid, + :caption) + """) + .setParameter("uuid", entity.getUuid()) + .setParameter("version", entity.getVersion()) + .setParameter("debitorUuid", entity.getDebitor().getUuid()) + .setParameter("caption", entity.getCaption()); + + final var count = query.executeUpdate(); + logError(() -> { + assertThat(count).describedAs("persisting BookingProject #" + id + " failed: " + entity).isEqualTo(1); + }); } @SneakyThrows - public BaseEntity persistViaSql(final Integer id, final HsHostingAsset entity) { + public void persistViaSql(final Integer id, final HsBookingItem entity) { + if (entity.getUuid() != null) { + return; + } + + entity.setUuid(UUID.randomUUID()); + + final var query = em.createNativeQuery(""" + insert into hs_booking.item( + uuid, + version, + type, + projectUuid, + parentItemUuid, + validity, + caption, + resources) + values ( + :uuid, + :version, + :type, + :projectUuid, + :parentItemUuid, + :validity, + :caption, + cast(:resources as jsonb)) + """) + .setParameter("uuid", entity.getUuid()) + .setParameter("version", entity.getVersion()) + .setParameter("projectUuid", ofNullable(entity.getProject()).map(BaseEntity::getUuid).orElse(null)) + .setParameter("type", entity.getType().name()) + .setParameter("parentItemUuid", ofNullable(entity.getParentItem()).map(BaseEntity::getUuid).orElse(null)) + .setParameter("validity", entity.getValidity()) + .setParameter("caption", entity.getCaption()) + .setParameter("resources", entity.getResources().toString().replace("\t", "\\t")); + + final var count = query.executeUpdate(); + logError(() -> { + assertThat(count).describedAs("persisting BookingItem #" + id + " failed: " + entity).isEqualTo(1); + }); + } + + @SneakyThrows + public HsHostingAsset persistViaSql(final Integer id, final HsHostingAsset entity) { if (entity.getUuid() == null) { entity.setUuid(UUID.randomUUID()); } @@ -229,7 +272,7 @@ public class CsvDataImport extends ContextBasedTest { final var count = query.executeUpdate(); logError(() -> { - assertThat(count).isEqualTo(1); + assertThat(count).describedAs("persisting HostingAsset #" + id + " failed: " + entity).isEqualTo(1); }); return entity; } diff --git a/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportHostingAssets.java b/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportHostingAssets.java index dbadf08f..bb795815 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportHostingAssets.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/migration/ImportHostingAssets.java @@ -142,13 +142,13 @@ public class ImportHostingAssets extends CsvDataImport { liquibase.assertThatCurrentMigrationsGotApplied(331, "hs-booking-SCHEMA"); } - record PartnerLegacyIdMapping(UUID uuid, Integer bp_id){} - record DebitorRecord(UUID uuid, Integer version, String defaultPrefix){} - @Test @Order(11010) void createBookingProjects() { + record PartnerLegacyIdMapping(UUID uuid, Integer bp_id){} + record DebitorRecord(UUID uuid, Integer version, String defaultPrefix){} + final var partnerLegacyIdMappings = em.createNativeQuery( """ select debitor.uuid, pid.bp_id @@ -755,7 +755,7 @@ public class ImportHostingAssets extends CsvDataImport { jpaAttempt.transacted(() -> { context(rbacSuperuser); - bookingProjects.forEach(this::persist); + bookingProjects.forEach(this::persistViaSql); }).assertSuccessful(); } @@ -1115,7 +1115,7 @@ public class ImportHostingAssets extends CsvDataImport { if (bi.getParentItem() != null) { persistRecursively(key, HsBookingItemEntityValidatorRegistry.validated(em, bi.getParentItem())); } - persist(key, HsBookingItemEntityValidatorRegistry.validated(em, bi)); + persistViaSql(key, HsBookingItemEntityValidatorRegistry.validated(em, bi)); } private void persistHostingAssets(final Map assets) { @@ -1139,7 +1139,7 @@ public class ImportHostingAssets extends CsvDataImport { "'EMAIL_ADDRESS:.*\\.config\\.target' .*" ) .prepareForSave() - .saveUsing(entity -> persist(entry.getKey(), entity)) + .saveUsing(entity -> persistViaSql(entry.getKey(), entity)) .validateContext() )); } -- 2.39.5