From f6d48f518997079d9930a280f8e3940920215815 Mon Sep 17 00:00:00 2001
From: Eric Wittmann <eric.wittmann@gmail.com>
Date: Wed, 23 Oct 2024 10:27:30 -0400
Subject: [PATCH] Allow additional orderBy options when searching

---
 .../impl/sql/AbstractSqlRegistryStorage.java  | 39 +++++++------------
 .../src/main/resources/META-INF/openapi.json  |  6 ++-
 go-sdk/pkg/registryclient-v3/kiota-lock.json  |  2 +-
 .../models/artifact_sort_by.go                |  9 +++--
 .../registryclient-v3/models/group_sort_by.go |  5 ++-
 .../models/version_sort_by.go                 | 12 ++++--
 6 files changed, 39 insertions(+), 34 deletions(-)

diff --git a/app/src/main/java/io/apicurio/registry/storage/impl/sql/AbstractSqlRegistryStorage.java b/app/src/main/java/io/apicurio/registry/storage/impl/sql/AbstractSqlRegistryStorage.java
index 970740e4b9..75cd930e13 100644
--- a/app/src/main/java/io/apicurio/registry/storage/impl/sql/AbstractSqlRegistryStorage.java
+++ b/app/src/main/java/io/apicurio/registry/storage/impl/sql/AbstractSqlRegistryStorage.java
@@ -1066,17 +1066,14 @@ public ArtifactSearchResultsDto searchArtifacts(Set<SearchFilter> filters, Order
                 case name:
                     orderByQuery.append(" ORDER BY coalesce(a.name, a.artifactId)");
                     break;
-                case artifactId:
-                    orderByQuery.append(" ORDER BY a.artifactId");
+                case artifactType:
+                    orderByQuery.append(" ORDER BY a.type");
                     break;
+                case groupId:
+                case artifactId:
                 case createdOn:
-                    orderByQuery.append(" ORDER BY a.createdOn");
-                    break;
                 case modifiedOn:
-                    orderByQuery.append(" ORDER BY a.modifiedOn");
-                    break;
-                case artifactType:
-                    orderByQuery.append(" ORDER BY a.type");
+                    orderByQuery.append(" ORDER BY a." + orderBy.name());
                     break;
                 default:
                     throw new RuntimeException("Sort by " + orderBy.name() + " not supported.");
@@ -1681,28 +1678,21 @@ public VersionSearchResultsDto searchVersions(Set<SearchFilter> filters, OrderBy
                 where.append(")");
             }
 
-            // Add order by to artifact query
+            // Add order by to query
             switch (orderBy) {
-                case globalId:
-                    orderByQuery.append(" ORDER BY v.globalId");
+                case name:
+                    orderByQuery.append(" ORDER BY coalesce(v.name, v.version)");
                     break;
                 case groupId:
-                    orderByQuery.append(" ORDER BY v.groupId");
-                    break;
+                case artifactId:
                 case version:
-                    orderByQuery.append(" ORDER BY v.version");
-                    break;
-                case name:
-                    orderByQuery.append(" ORDER BY v.name");
-                    break;
+                case globalId:
                 case createdOn:
-                    orderByQuery.append(" ORDER BY v.createdOn");
-                    break;
                 case modifiedOn:
-                    orderByQuery.append(" ORDER BY v.modifiedOn");
+                    orderByQuery.append(" ORDER BY v." + orderBy.name());
                     break;
                 default:
-                    break;
+                    throw new RuntimeException("Sort by " + orderBy.name() + " not supported.");
             }
             orderByQuery.append(" ").append(orderDirection.name());
 
@@ -2869,13 +2859,12 @@ public GroupSearchResultsDto searchGroups(Set<SearchFilter> filters, OrderBy ord
             // Add order by to artifact query
             switch (orderBy) {
                 case groupId:
-                    orderByQuery.append(" ORDER BY g.groupId");
-                    break;
                 case createdOn:
+                case modifiedOn:
                     orderByQuery.append(" ORDER BY g.").append(orderBy.name());
                     break;
                 default:
-                    break;
+                    throw new RuntimeException("Sort by " + orderBy.name() + " not supported.");
             }
             orderByQuery.append(" ").append(orderDirection.name());
 
diff --git a/common/src/main/resources/META-INF/openapi.json b/common/src/main/resources/META-INF/openapi.json
index b3f39d737b..a086af219e 100644
--- a/common/src/main/resources/META-INF/openapi.json
+++ b/common/src/main/resources/META-INF/openapi.json
@@ -3676,6 +3676,7 @@
       "ArtifactSortBy": {
         "description": "",
         "enum": [
+          "groupId",
           "artifactId",
           "createdOn",
           "modifiedOn",
@@ -5092,6 +5093,8 @@
       "VersionSortBy": {
         "description": "",
         "enum": [
+          "groupId",
+          "artifactId",
           "version",
           "name",
           "createdOn",
@@ -5104,7 +5107,8 @@
         "description": "",
         "enum": [
           "groupId",
-          "createdOn"
+          "createdOn",
+          "modifiedOn"
         ],
         "type": "string"
       },
diff --git a/go-sdk/pkg/registryclient-v3/kiota-lock.json b/go-sdk/pkg/registryclient-v3/kiota-lock.json
index 3dadd4f107..6884f617f8 100644
--- a/go-sdk/pkg/registryclient-v3/kiota-lock.json
+++ b/go-sdk/pkg/registryclient-v3/kiota-lock.json
@@ -1,5 +1,5 @@
 {
-  "descriptionHash": "D346A2A9A40F1B86E55F338BFB56645B0AE0D95EF3B3E66B14920108B20F119845B8EF22305D5C70D8DFDCC4BA0E39B5A78BD1F19D81AB90587F206B2470163D",
+  "descriptionHash": "6D428EDE13C8C05F3E9350ADBED7F44A1E6FFE2930A5F0EF8AF63340F89684254673F58AD88E237A968713F30D33CF09EB59BC3D3F08969CB79C3C4444A972C8",
   "descriptionLocation": "../../v3.json",
   "lockFileVersion": "1.0.0",
   "kiotaVersion": "1.19.1",
diff --git a/go-sdk/pkg/registryclient-v3/models/artifact_sort_by.go b/go-sdk/pkg/registryclient-v3/models/artifact_sort_by.go
index 8c3058d819..fe88263617 100644
--- a/go-sdk/pkg/registryclient-v3/models/artifact_sort_by.go
+++ b/go-sdk/pkg/registryclient-v3/models/artifact_sort_by.go
@@ -3,7 +3,8 @@ package models
 type ArtifactSortBy int
 
 const (
-	ARTIFACTID_ARTIFACTSORTBY ArtifactSortBy = iota
+	GROUPID_ARTIFACTSORTBY ArtifactSortBy = iota
+	ARTIFACTID_ARTIFACTSORTBY
 	CREATEDON_ARTIFACTSORTBY
 	MODIFIEDON_ARTIFACTSORTBY
 	ARTIFACTTYPE_ARTIFACTSORTBY
@@ -11,11 +12,13 @@ const (
 )
 
 func (i ArtifactSortBy) String() string {
-	return []string{"artifactId", "createdOn", "modifiedOn", "artifactType", "name"}[i]
+	return []string{"groupId", "artifactId", "createdOn", "modifiedOn", "artifactType", "name"}[i]
 }
 func ParseArtifactSortBy(v string) (any, error) {
-	result := ARTIFACTID_ARTIFACTSORTBY
+	result := GROUPID_ARTIFACTSORTBY
 	switch v {
+	case "groupId":
+		result = GROUPID_ARTIFACTSORTBY
 	case "artifactId":
 		result = ARTIFACTID_ARTIFACTSORTBY
 	case "createdOn":
diff --git a/go-sdk/pkg/registryclient-v3/models/group_sort_by.go b/go-sdk/pkg/registryclient-v3/models/group_sort_by.go
index cd9e176e53..c771895e10 100644
--- a/go-sdk/pkg/registryclient-v3/models/group_sort_by.go
+++ b/go-sdk/pkg/registryclient-v3/models/group_sort_by.go
@@ -5,10 +5,11 @@ type GroupSortBy int
 const (
 	GROUPID_GROUPSORTBY GroupSortBy = iota
 	CREATEDON_GROUPSORTBY
+	MODIFIEDON_GROUPSORTBY
 )
 
 func (i GroupSortBy) String() string {
-	return []string{"groupId", "createdOn"}[i]
+	return []string{"groupId", "createdOn", "modifiedOn"}[i]
 }
 func ParseGroupSortBy(v string) (any, error) {
 	result := GROUPID_GROUPSORTBY
@@ -17,6 +18,8 @@ func ParseGroupSortBy(v string) (any, error) {
 		result = GROUPID_GROUPSORTBY
 	case "createdOn":
 		result = CREATEDON_GROUPSORTBY
+	case "modifiedOn":
+		result = MODIFIEDON_GROUPSORTBY
 	default:
 		return nil, nil
 	}
diff --git a/go-sdk/pkg/registryclient-v3/models/version_sort_by.go b/go-sdk/pkg/registryclient-v3/models/version_sort_by.go
index 878075083c..2d8a3290a4 100644
--- a/go-sdk/pkg/registryclient-v3/models/version_sort_by.go
+++ b/go-sdk/pkg/registryclient-v3/models/version_sort_by.go
@@ -3,7 +3,9 @@ package models
 type VersionSortBy int
 
 const (
-	VERSION_VERSIONSORTBY VersionSortBy = iota
+	GROUPID_VERSIONSORTBY VersionSortBy = iota
+	ARTIFACTID_VERSIONSORTBY
+	VERSION_VERSIONSORTBY
 	NAME_VERSIONSORTBY
 	CREATEDON_VERSIONSORTBY
 	MODIFIEDON_VERSIONSORTBY
@@ -11,11 +13,15 @@ const (
 )
 
 func (i VersionSortBy) String() string {
-	return []string{"version", "name", "createdOn", "modifiedOn", "globalId"}[i]
+	return []string{"groupId", "artifactId", "version", "name", "createdOn", "modifiedOn", "globalId"}[i]
 }
 func ParseVersionSortBy(v string) (any, error) {
-	result := VERSION_VERSIONSORTBY
+	result := GROUPID_VERSIONSORTBY
 	switch v {
+	case "groupId":
+		result = GROUPID_VERSIONSORTBY
+	case "artifactId":
+		result = ARTIFACTID_VERSIONSORTBY
 	case "version":
 		result = VERSION_VERSIONSORTBY
 	case "name":