From 37286841a9cc2ba48d62ed3bb3c0f660cd42d3e1 Mon Sep 17 00:00:00 2001 From: Marco Hamann Date: Fri, 21 Nov 2025 10:32:05 +0100 Subject: [PATCH 1/5] add additionalCallNumber to item and holding-record --- .../external/additionalCallNumber.json | 20 +++++++++++++++++++ ramls/schemas/external/holdingsRecord.json | 8 ++++++++ ramls/schemas/external/item.json | 11 +++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 ramls/schemas/external/additionalCallNumber.json diff --git a/ramls/schemas/external/additionalCallNumber.json b/ramls/schemas/external/additionalCallNumber.json new file mode 100644 index 00000000..3d81d551 --- /dev/null +++ b/ramls/schemas/external/additionalCallNumber.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "description": "An additional call number", + "type": "object", + "properties": { + "typeId": { + "type": "string" + }, + "prefix": { + "type": "string" + }, + "callNumber": { + "type": "string" + }, + "suffix": { + "type": "string" + } + }, + "required": ["callNumber"] +} diff --git a/ramls/schemas/external/holdingsRecord.json b/ramls/schemas/external/holdingsRecord.json index 04f72041..c63a03ff 100644 --- a/ramls/schemas/external/holdingsRecord.json +++ b/ramls/schemas/external/holdingsRecord.json @@ -25,6 +25,14 @@ "callNumberTypeId": { "type": "string" }, + "additionalCallNumbers": { + "type": "array", + "items": { + "type": "object", + "$ref": "additionalCallNumber.json", + "uniqueItems": true + } + }, "copyNumber": { "type": "string" }, diff --git a/ramls/schemas/external/item.json b/ramls/schemas/external/item.json index 457e883d..267a50fb 100644 --- a/ramls/schemas/external/item.json +++ b/ramls/schemas/external/item.json @@ -85,7 +85,8 @@ "type": "string" } }, - "type": "object" + "type": "object", + "diffIgnore": true }, "effectiveLocationId": { "type": "string" @@ -155,6 +156,14 @@ "itemLevelCallNumberTypeId": { "type": "string" }, + "additionalCallNumbers": { + "type": "array", + "items": { + "type": "object", + "$ref": "additionalCallNumber.json", + "uniqueItems": true + } + }, "lastCheckIn": { "properties": { "dateTime": { From b8717aec9cc44d535bf552d1f0355d05e7165120 Mon Sep 17 00:00:00 2001 From: Marco Hamann Date: Mon, 24 Nov 2025 12:30:56 +0100 Subject: [PATCH 2/5] remove unused property --- ramls/schemas/external/item.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ramls/schemas/external/item.json b/ramls/schemas/external/item.json index 267a50fb..541c2bce 100644 --- a/ramls/schemas/external/item.json +++ b/ramls/schemas/external/item.json @@ -85,8 +85,7 @@ "type": "string" } }, - "type": "object", - "diffIgnore": true + "type": "object" }, "effectiveLocationId": { "type": "string" From 2f3d507a2965ff7841c33732f1a9f69394b7d2ed Mon Sep 17 00:00:00 2001 From: Marco Hamann Date: Wed, 3 Dec 2025 15:17:45 +0100 Subject: [PATCH 3/5] rename additionalCallNumber components to differentiate from effectiveCN --- ramls/schemas/external/additionalCallNumber.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ramls/schemas/external/additionalCallNumber.json b/ramls/schemas/external/additionalCallNumber.json index 3d81d551..6cab3905 100644 --- a/ramls/schemas/external/additionalCallNumber.json +++ b/ramls/schemas/external/additionalCallNumber.json @@ -3,18 +3,18 @@ "description": "An additional call number", "type": "object", "properties": { - "typeId": { + "additionalCallNumberTypeId": { "type": "string" }, - "prefix": { + "additionalCallNumberPrefix": { "type": "string" }, - "callNumber": { + "additionalCallNumber": { "type": "string" }, - "suffix": { + "additionalCallNumberSuffix": { "type": "string" } }, - "required": ["callNumber"] + "required": ["additionalCallNumber"] } From 306eb6f197b19e180cfe38673eefcdea4b887e2b Mon Sep 17 00:00:00 2001 From: Marco Hamann Date: Wed, 3 Dec 2025 15:38:09 +0100 Subject: [PATCH 4/5] add tests for additionalCallNumber diff calculation --- .../services/diff/DiffCalculatorTest.java | 2 +- .../diff/HoldingsDiffCalculatorTest.java | 32 ++++++++++++++++++- .../services/diff/ItemDiffCalculatorTest.java | 31 +++++++++++++++++- 3 files changed, 62 insertions(+), 3 deletions(-) diff --git a/mod-audit-server/src/test/java/org/folio/services/diff/DiffCalculatorTest.java b/mod-audit-server/src/test/java/org/folio/services/diff/DiffCalculatorTest.java index 4b2352d1..f897dde9 100644 --- a/mod-audit-server/src/test/java/org/folio/services/diff/DiffCalculatorTest.java +++ b/mod-audit-server/src/test/java/org/folio/services/diff/DiffCalculatorTest.java @@ -293,4 +293,4 @@ void shouldDetectFieldChangesInInnerObjectCollectionAndInnerObject() { private static Map getMap(Instance obj) { return new JsonObject(Json.encode(obj)).getMap(); } -} \ No newline at end of file +} diff --git a/mod-audit-server/src/test/java/org/folio/services/diff/HoldingsDiffCalculatorTest.java b/mod-audit-server/src/test/java/org/folio/services/diff/HoldingsDiffCalculatorTest.java index 50aa4996..fe5e9bfa 100644 --- a/mod-audit-server/src/test/java/org/folio/services/diff/HoldingsDiffCalculatorTest.java +++ b/mod-audit-server/src/test/java/org/folio/services/diff/HoldingsDiffCalculatorTest.java @@ -4,10 +4,15 @@ import io.vertx.core.json.Json; import io.vertx.core.json.JsonObject; + +import java.util.ArrayList; +import java.util.List; import java.util.Map; import org.folio.CopilotGenerated; import org.folio.domain.diff.FieldChangeDto; +import org.folio.rest.external.AdditionalCallNumber; import org.folio.rest.external.HoldingsRecord; +import org.folio.rest.external.Item; import org.folio.util.inventory.InventoryResourceType; import org.folio.utils.UnitTest; import org.junit.jupiter.api.Test; @@ -52,7 +57,32 @@ void shouldDetectFieldModifiedChange() { .containsExactlyInAnyOrder(FieldChangeDto.modified("callNumber", "callNumber", "Call Number 1", "Call Number 2")); } + @Test + void shouldDetectNewAdditionalCallNumber() { + List additionalCallNumberList = new ArrayList<>(); + AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withAdditionalCallNumber("123").withAdditionalCallNumberPrefix("A").withAdditionalCallNumberSuffix("Z"); + additionalCallNumberList.add(additionalCallNumber); + var oldItem = getMap(new HoldingsRecord().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + AdditionalCallNumber additionalCallNumberNew = new AdditionalCallNumber().withAdditionalCallNumber("456").withAdditionalCallNumberPrefix("A").withAdditionalCallNumberSuffix("Z"); + additionalCallNumberList.add(additionalCallNumberNew); + var newItem = getMap(new HoldingsRecord().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + var changeRecordDTO = holdingsDiffCalculator.calculateDiff(oldItem, newItem); + assertThat(changeRecordDTO.getCollectionChanges()).hasSize(1); + } + + @Test + void shouldDetectAdditionalCallNumberChange() { + List additionalCallNumberList = new ArrayList<>(); + AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withAdditionalCallNumber("123").withAdditionalCallNumberPrefix("A").withAdditionalCallNumberSuffix("Z"); + additionalCallNumberList.add(additionalCallNumber); + var oldItem = getMap(new HoldingsRecord().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + additionalCallNumberList.getFirst().setAdditionalCallNumber("456"); + var newItem = getMap(new HoldingsRecord().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + var changeRecordDTO = holdingsDiffCalculator.calculateDiff(oldItem, newItem); + assertThat(changeRecordDTO.getCollectionChanges()).hasSize(1); + } + private static Map getMap(HoldingsRecord obj) { return new JsonObject(Json.encode(obj)).getMap(); } -} \ No newline at end of file +} diff --git a/mod-audit-server/src/test/java/org/folio/services/diff/ItemDiffCalculatorTest.java b/mod-audit-server/src/test/java/org/folio/services/diff/ItemDiffCalculatorTest.java index cfdecc65..2c450b88 100644 --- a/mod-audit-server/src/test/java/org/folio/services/diff/ItemDiffCalculatorTest.java +++ b/mod-audit-server/src/test/java/org/folio/services/diff/ItemDiffCalculatorTest.java @@ -4,9 +4,13 @@ import io.vertx.core.json.Json; import io.vertx.core.json.JsonObject; + +import java.util.ArrayList; +import java.util.List; import java.util.Map; import org.folio.CopilotGenerated; import org.folio.domain.diff.FieldChangeDto; +import org.folio.rest.external.AdditionalCallNumber; import org.folio.rest.external.Item; import org.folio.util.inventory.InventoryResourceType; import org.folio.utils.UnitTest; @@ -54,7 +58,32 @@ void shouldDetectFieldModifiedChange() { .containsExactlyInAnyOrder(FieldChangeDto.modified("barcode", "barcode", "Barcode 1", "Barcode 2")); } + @Test + void shouldDetectNewAdditionalCallNumber() { + List additionalCallNumberList = new ArrayList<>(); + AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withAdditionalCallNumber("123").withAdditionalCallNumberPrefix("A").withAdditionalCallNumberSuffix("Z"); + additionalCallNumberList.add(additionalCallNumber); + var oldItem = getMap(new Item().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + AdditionalCallNumber additionalCallNumberNew = new AdditionalCallNumber().withAdditionalCallNumber("456").withAdditionalCallNumberPrefix("A").withAdditionalCallNumberSuffix("Z"); + additionalCallNumberList.add(additionalCallNumberNew); + var newItem = getMap(new Item().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + var changeRecordDTO = itemDiffCalculator.calculateDiff(oldItem, newItem); + assertThat(changeRecordDTO.getCollectionChanges()).hasSize(1); + } + + @Test + void shouldDetectAdditionalCallNumberChange() { + List additionalCallNumberList = new ArrayList<>(); + AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withAdditionalCallNumber("123").withAdditionalCallNumberPrefix("A").withAdditionalCallNumberSuffix("Z"); + additionalCallNumberList.add(additionalCallNumber); + var oldItem = getMap(new Item().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + additionalCallNumberList.getFirst().setAdditionalCallNumber("456"); + var newItem = getMap(new Item().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + var changeRecordDTO = itemDiffCalculator.calculateDiff(oldItem, newItem); + assertThat(changeRecordDTO.getCollectionChanges()).hasSize(1); + } + private static Map getMap(Item obj) { return new JsonObject(Json.encode(obj)).getMap(); } -} \ No newline at end of file +} From 6fb2e536ad6a93c3fbf6ba61c58b30747bbb5e26 Mon Sep 17 00:00:00 2001 From: Marco Hamann Date: Thu, 11 Dec 2025 15:35:20 +0100 Subject: [PATCH 5/5] remove prefix to additionalCallNumber properties --- .../services/diff/HoldingsDiffCalculatorTest.java | 9 ++++----- .../folio/services/diff/ItemDiffCalculatorTest.java | 8 ++++---- ramls/schemas/external/additionalCallNumber.json | 10 +++++----- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/mod-audit-server/src/test/java/org/folio/services/diff/HoldingsDiffCalculatorTest.java b/mod-audit-server/src/test/java/org/folio/services/diff/HoldingsDiffCalculatorTest.java index fe5e9bfa..25fc8da2 100644 --- a/mod-audit-server/src/test/java/org/folio/services/diff/HoldingsDiffCalculatorTest.java +++ b/mod-audit-server/src/test/java/org/folio/services/diff/HoldingsDiffCalculatorTest.java @@ -12,7 +12,6 @@ import org.folio.domain.diff.FieldChangeDto; import org.folio.rest.external.AdditionalCallNumber; import org.folio.rest.external.HoldingsRecord; -import org.folio.rest.external.Item; import org.folio.util.inventory.InventoryResourceType; import org.folio.utils.UnitTest; import org.junit.jupiter.api.Test; @@ -60,10 +59,10 @@ void shouldDetectFieldModifiedChange() { @Test void shouldDetectNewAdditionalCallNumber() { List additionalCallNumberList = new ArrayList<>(); - AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withAdditionalCallNumber("123").withAdditionalCallNumberPrefix("A").withAdditionalCallNumberSuffix("Z"); + AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withCallNumber("123").withPrefix("A").withSuffix("Z"); additionalCallNumberList.add(additionalCallNumber); var oldItem = getMap(new HoldingsRecord().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); - AdditionalCallNumber additionalCallNumberNew = new AdditionalCallNumber().withAdditionalCallNumber("456").withAdditionalCallNumberPrefix("A").withAdditionalCallNumberSuffix("Z"); + AdditionalCallNumber additionalCallNumberNew = new AdditionalCallNumber().withCallNumber("456").withPrefix("A").withSuffix("Z"); additionalCallNumberList.add(additionalCallNumberNew); var newItem = getMap(new HoldingsRecord().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); var changeRecordDTO = holdingsDiffCalculator.calculateDiff(oldItem, newItem); @@ -73,10 +72,10 @@ void shouldDetectNewAdditionalCallNumber() { @Test void shouldDetectAdditionalCallNumberChange() { List additionalCallNumberList = new ArrayList<>(); - AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withAdditionalCallNumber("123").withAdditionalCallNumberPrefix("A").withAdditionalCallNumberSuffix("Z"); + AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withCallNumber("123").withPrefix("A").withSuffix("Z"); additionalCallNumberList.add(additionalCallNumber); var oldItem = getMap(new HoldingsRecord().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); - additionalCallNumberList.getFirst().setAdditionalCallNumber("456"); + additionalCallNumberList.getFirst().setCallNumber("456"); var newItem = getMap(new HoldingsRecord().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); var changeRecordDTO = holdingsDiffCalculator.calculateDiff(oldItem, newItem); assertThat(changeRecordDTO.getCollectionChanges()).hasSize(1); diff --git a/mod-audit-server/src/test/java/org/folio/services/diff/ItemDiffCalculatorTest.java b/mod-audit-server/src/test/java/org/folio/services/diff/ItemDiffCalculatorTest.java index 2c450b88..9dc35b34 100644 --- a/mod-audit-server/src/test/java/org/folio/services/diff/ItemDiffCalculatorTest.java +++ b/mod-audit-server/src/test/java/org/folio/services/diff/ItemDiffCalculatorTest.java @@ -61,10 +61,10 @@ void shouldDetectFieldModifiedChange() { @Test void shouldDetectNewAdditionalCallNumber() { List additionalCallNumberList = new ArrayList<>(); - AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withAdditionalCallNumber("123").withAdditionalCallNumberPrefix("A").withAdditionalCallNumberSuffix("Z"); + AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withCallNumber("123").withPrefix("A").withSuffix("Z"); additionalCallNumberList.add(additionalCallNumber); var oldItem = getMap(new Item().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); - AdditionalCallNumber additionalCallNumberNew = new AdditionalCallNumber().withAdditionalCallNumber("456").withAdditionalCallNumberPrefix("A").withAdditionalCallNumberSuffix("Z"); + AdditionalCallNumber additionalCallNumberNew = new AdditionalCallNumber().withCallNumber("456").withPrefix("A").withSuffix("Z"); additionalCallNumberList.add(additionalCallNumberNew); var newItem = getMap(new Item().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); var changeRecordDTO = itemDiffCalculator.calculateDiff(oldItem, newItem); @@ -74,10 +74,10 @@ void shouldDetectNewAdditionalCallNumber() { @Test void shouldDetectAdditionalCallNumberChange() { List additionalCallNumberList = new ArrayList<>(); - AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withAdditionalCallNumber("123").withAdditionalCallNumberPrefix("A").withAdditionalCallNumberSuffix("Z"); + AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withCallNumber("123").withPrefix("A").withSuffix("Z"); additionalCallNumberList.add(additionalCallNumber); var oldItem = getMap(new Item().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); - additionalCallNumberList.getFirst().setAdditionalCallNumber("456"); + additionalCallNumberList.getFirst().setCallNumber("456"); var newItem = getMap(new Item().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); var changeRecordDTO = itemDiffCalculator.calculateDiff(oldItem, newItem); assertThat(changeRecordDTO.getCollectionChanges()).hasSize(1); diff --git a/ramls/schemas/external/additionalCallNumber.json b/ramls/schemas/external/additionalCallNumber.json index 6cab3905..3d81d551 100644 --- a/ramls/schemas/external/additionalCallNumber.json +++ b/ramls/schemas/external/additionalCallNumber.json @@ -3,18 +3,18 @@ "description": "An additional call number", "type": "object", "properties": { - "additionalCallNumberTypeId": { + "typeId": { "type": "string" }, - "additionalCallNumberPrefix": { + "prefix": { "type": "string" }, - "additionalCallNumber": { + "callNumber": { "type": "string" }, - "additionalCallNumberSuffix": { + "suffix": { "type": "string" } }, - "required": ["additionalCallNumber"] + "required": ["callNumber"] }