This is an automated email from the ASF dual-hosted git repository.

rnewson pushed a commit to branch nouveau-update-bundle
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 196ec15472b643d01bfd633e35dd56890d2fbb57
Author: Robert Newson <[email protected]>
AuthorDate: Sat Mar 21 10:19:55 2026 +0000

    convert Document api classes to records
---
 .../couchdb/nouveau/api/DocumentDeleteRequest.java | 49 ++-------------
 .../couchdb/nouveau/api/DocumentRequest.java       |  2 +-
 .../apache/couchdb/nouveau/api/DocumentUpdate.java |  6 +-
 .../couchdb/nouveau/api/DocumentUpdateRequest.java | 69 ++++++----------------
 .../org/apache/couchdb/nouveau/core/Index.java     | 14 ++---
 .../apache/couchdb/nouveau/lucene/LuceneIndex.java | 10 ++--
 .../couchdb/nouveau/resources/IndexResource.java   |  8 +--
 7 files changed, 43 insertions(+), 115 deletions(-)

diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentDeleteRequest.java
 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentDeleteRequest.java
index 36f70bf78..f306b376b 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentDeleteRequest.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentDeleteRequest.java
@@ -13,50 +13,11 @@
 
 package org.apache.couchdb.nouveau.api;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.PropertyNamingStrategies;
+import com.fasterxml.jackson.databind.annotation.JsonNaming;
 import jakarta.validation.constraints.Positive;
 import jakarta.validation.constraints.PositiveOrZero;
 
-public final class DocumentDeleteRequest extends DocumentRequest {
-
-    @PositiveOrZero
-    private final long matchSeq;
-
-    @Positive
-    private final long seq;
-
-    private final boolean purge;
-
-    public DocumentDeleteRequest(
-            @JsonProperty("match_seq") final long matchSeq,
-            @JsonProperty("seq") final long seq,
-            @JsonProperty("purge") final boolean purge) {
-        if (matchSeq < 0) {
-            throw new IllegalArgumentException("matchSeq must be 0 or 
greater");
-        }
-
-        if (seq < 1) {
-            throw new IllegalArgumentException("seq must be 1 or greater");
-        }
-        this.matchSeq = matchSeq;
-        this.seq = seq;
-        this.purge = purge;
-    }
-
-    public long getMatchSeq() {
-        return matchSeq;
-    }
-
-    public long getSeq() {
-        return seq;
-    }
-
-    public boolean isPurge() {
-        return purge;
-    }
-
-    @Override
-    public String toString() {
-        return "DocumentDeleteRequest [matchSeq=" + matchSeq + ", seq=" + seq 
+ ", purge=" + purge + "]";
-    }
-}
+@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
+public record DocumentDeleteRequest(@PositiveOrZero long matchSeq, @Positive 
long seq, boolean purge)
+        implements DocumentRequest {}
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentRequest.java
 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentRequest.java
index 7dc8aa269..0cf87d136 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentRequest.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentRequest.java
@@ -21,4 +21,4 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
     @JsonSubTypes.Type(value = DocumentDeleteRequest.class, name = "delete"),
     @JsonSubTypes.Type(value = DocumentUpdateRequest.class, name = "update"),
 })
-public abstract class DocumentRequest {}
+public interface DocumentRequest {}
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdate.java
 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdate.java
index 141860f3a..b078e00b1 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdate.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdate.java
@@ -13,6 +13,8 @@
 
 package org.apache.couchdb.nouveau.api;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.PropertyNamingStrategies;
+import com.fasterxml.jackson.databind.annotation.JsonNaming;
 
-public record DocumentUpdate(@JsonProperty("doc_id") String docId, 
@JsonProperty("update") DocumentRequest request) {}
+@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
+public record DocumentUpdate(String docId, DocumentRequest update) {}
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdateRequest.java
 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdateRequest.java
index 9cbed3ac0..205968d3a 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdateRequest.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdateRequest.java
@@ -13,61 +13,26 @@
 
 package org.apache.couchdb.nouveau.api;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-import jakarta.validation.Valid;
+import com.fasterxml.jackson.databind.PropertyNamingStrategies;
+import com.fasterxml.jackson.databind.annotation.JsonNaming;
 import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Positive;
 import jakarta.validation.constraints.PositiveOrZero;
 import java.util.Collection;
-
-public final class DocumentUpdateRequest extends DocumentRequest {
-
-    @PositiveOrZero
-    private final long matchSeq;
-
-    @Positive
-    private final long seq;
-
-    private final String partition;
-
-    @NotEmpty
-    @Valid
-    private final Collection<Field> fields;
-
-    public DocumentUpdateRequest(
-            @JsonProperty("match_seq") final long matchSeq,
-            @JsonProperty("seq") final long seq,
-            @JsonProperty("partition") final String partition,
-            @JsonProperty("fields") final Collection<Field> fields) {
-        this.matchSeq = matchSeq;
-        this.seq = seq;
-        this.partition = partition;
-        this.fields = fields;
-    }
-
-    public long getMatchSeq() {
-        return matchSeq;
-    }
-
-    public long getSeq() {
-        return seq;
-    }
-
-    public String getPartition() {
-        return partition;
-    }
-
-    public boolean hasPartition() {
-        return partition != null;
-    }
-
-    public Collection<Field> getFields() {
-        return fields;
-    }
-
-    @Override
-    public String toString() {
-        return "DocumentUpdateRequest [matchSeq=" + matchSeq + ", seq=" + seq 
+ ", partition=" + partition + ", fields="
-                + fields + "]";
+import java.util.Optional;
+
+@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
+public record DocumentUpdateRequest(
+        @PositiveOrZero long matchSeq,
+        @Positive long seq,
+        @NotNull Optional<String> partition,
+        @NotEmpty Collection<Field> fields)
+        implements DocumentRequest {
+
+    public DocumentUpdateRequest {
+        if (partition == null) {
+            partition = Optional.empty();
+        }
     }
 }
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java
index 528a885b6..e7693702c 100644
--- a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java
+++ b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java
@@ -55,22 +55,22 @@ public abstract class Index implements Closeable {
     protected abstract long doDiskSize() throws IOException;
 
     public final synchronized void update(final String docId, final 
DocumentUpdateRequest request) throws IOException {
-        assertUpdateSeqProgress(request.getMatchSeq(), request.getSeq());
+        assertUpdateSeqProgress(request.matchSeq(), request.seq());
         doUpdate(docId, request);
-        incrementUpdateSeq(request.getMatchSeq(), request.getSeq());
+        incrementUpdateSeq(request.matchSeq(), request.seq());
     }
 
     protected abstract void doUpdate(final String docId, final 
DocumentUpdateRequest request) throws IOException;
 
     public final synchronized void delete(final String docId, final 
DocumentDeleteRequest request) throws IOException {
-        if (request.isPurge()) {
-            assertPurgeSeqProgress(request.getMatchSeq(), request.getSeq());
+        if (request.purge()) {
+            assertPurgeSeqProgress(request.matchSeq(), request.seq());
             doDelete(docId, request);
-            incrementPurgeSeq(request.getMatchSeq(), request.getSeq());
+            incrementPurgeSeq(request.matchSeq(), request.seq());
         } else {
-            assertUpdateSeqProgress(request.getMatchSeq(), request.getSeq());
+            assertUpdateSeqProgress(request.matchSeq(), request.seq());
             doDelete(docId, request);
-            incrementUpdateSeq(request.getMatchSeq(), request.getSeq());
+            incrementUpdateSeq(request.matchSeq(), request.seq());
         }
     }
 
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java
 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java
index 9d28072df..e8eb46ccc 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java
@@ -144,7 +144,7 @@ public class LuceneIndex extends Index {
     public void doUpdate(final String docId, final DocumentUpdateRequest 
request) throws IOException {
         final Term docIdTerm = docIdTerm(docId);
         final Document doc = toDocument(docId, request);
-        schema.update(request.getFields());
+        schema.update(request.fields());
         writer.updateDocument(docIdTerm, doc);
     }
 
@@ -410,13 +410,13 @@ public class LuceneIndex extends Index {
         result.add(new SortedDocValuesField("_id", new BytesRef(docId)));
 
         // partition (optional)
-        if (request.hasPartition()) {
-            result.add(new 
org.apache.lucene.document.StringField("_partition", request.getPartition(), 
Store.NO));
-        }
+        request.partition()
+                .ifPresent(partition ->
+                        result.add(new 
org.apache.lucene.document.StringField("_partition", partition, Store.NO)));
 
         final CharsetDecoder utf8Decoder = StandardCharsets.UTF_8.newDecoder();
 
-        for (Field field : request.getFields()) {
+        for (Field field : request.fields()) {
             // Underscore-prefix is reserved.
             if (field.getName().startsWith("_")) {
                 continue;
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java
 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java
index ecddb6a34..756230590 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java
@@ -139,11 +139,11 @@ public final class IndexResource {
     public Ok update(@PathParam("name") String name, @NotNull @Valid 
BulkUpdateRequest request) throws Exception {
         return indexManager.with(name, (index) -> {
             for (var update : request.updates()) {
-                if (update.request() instanceof DocumentUpdateRequest) {
-                    index.update(update.docId(), (DocumentUpdateRequest) 
update.request());
+                if (update.update() instanceof DocumentUpdateRequest) {
+                    index.update(update.docId(), (DocumentUpdateRequest) 
update.update());
                 }
-                if (update.request() instanceof DocumentDeleteRequest) {
-                    index.delete(update.docId(), (DocumentDeleteRequest) 
update.request());
+                if (update.update() instanceof DocumentDeleteRequest) {
+                    index.delete(update.docId(), (DocumentDeleteRequest) 
update.update());
                 }
             }
             return Ok.INSTANCE;

Reply via email to