From 44f15dd4a271597c90fe5d9727454d935adc789c Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 9 Jun 2026 22:02:58 +0200 Subject: [PATCH] =?UTF-8?q?fix(geschichte):=20persist=20GeschichteType=20o?= =?UTF-8?q?n=20create=20=E2=80=94=20JOURNEY=20was=20silently=20dropped?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GeschichteUpdateDTO lacked a `type` field, so the `type: 'JOURNEY'` sent by JourneyCreate was discarded by Jackson and every new Geschichte was saved as STORY. The edit page branched on type, so journeys always showed the STORY editor with no document-adding capability. Co-Authored-By: Claude Sonnet 4.6 --- .../geschichte/GeschichteService.java | 1 + .../geschichte/GeschichteUpdateDTO.java | 1 + .../geschichte/GeschichteServiceTest.java | 31 +++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/geschichte/GeschichteService.java b/backend/src/main/java/org/raddatz/familienarchiv/geschichte/GeschichteService.java index 571564e6..9cb957a2 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/geschichte/GeschichteService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/geschichte/GeschichteService.java @@ -134,6 +134,7 @@ public class GeschichteService { .title(dto.getTitle().trim()) .body(sanitize(dto.getBody())) .status(GeschichteStatus.DRAFT) + .type(dto.getType() != null ? dto.getType() : GeschichteType.STORY) .author(currentUser()) .persons(resolvePersons(dto.getPersonIds())) .build(); diff --git a/backend/src/main/java/org/raddatz/familienarchiv/geschichte/GeschichteUpdateDTO.java b/backend/src/main/java/org/raddatz/familienarchiv/geschichte/GeschichteUpdateDTO.java index 969ca6dd..c2b78597 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/geschichte/GeschichteUpdateDTO.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/geschichte/GeschichteUpdateDTO.java @@ -15,5 +15,6 @@ public class GeschichteUpdateDTO { private String title; private String body; private GeschichteStatus status; + private GeschichteType type; private List personIds; } diff --git a/backend/src/test/java/org/raddatz/familienarchiv/geschichte/GeschichteServiceTest.java b/backend/src/test/java/org/raddatz/familienarchiv/geschichte/GeschichteServiceTest.java index 06b00490..20c65e1b 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/geschichte/GeschichteServiceTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/geschichte/GeschichteServiceTest.java @@ -389,6 +389,37 @@ class GeschichteServiceTest { .isEqualTo(ErrorCode.VALIDATION_ERROR); } + @Test + void create_preserves_JOURNEY_type_from_dto() { + authenticateAs(writer, Permission.BLOG_WRITE); + when(userService.findByEmail(writer.getEmail())).thenReturn(writer); + when(geschichteRepository.save(any(Geschichte.class))) + .thenAnswer(inv -> inv.getArgument(0)); + + GeschichteUpdateDTO dto = new GeschichteUpdateDTO(); + dto.setTitle("My Journey"); + dto.setType(GeschichteType.JOURNEY); + + Geschichte saved = geschichteService.create(dto); + + assertThat(saved.getType()).isEqualTo(GeschichteType.JOURNEY); + } + + @Test + void create_defaults_to_STORY_when_type_is_null() { + authenticateAs(writer, Permission.BLOG_WRITE); + when(userService.findByEmail(writer.getEmail())).thenReturn(writer); + when(geschichteRepository.save(any(Geschichte.class))) + .thenAnswer(inv -> inv.getArgument(0)); + + GeschichteUpdateDTO dto = new GeschichteUpdateDTO(); + dto.setTitle("My Story"); + + Geschichte saved = geschichteService.create(dto); + + assertThat(saved.getType()).isEqualTo(GeschichteType.STORY); + } + // ─── update ────────────────────────────────────────────────────────────── @Test