From 0afe5f9a200e6988df91b4a8f2083b5ef3c25436 Mon Sep 17 00:00:00 2001 From: Jonathon Herbert Date: Tue, 5 Nov 2024 18:08:11 +0000 Subject: [PATCH] Permit sorting by externalId (camel -> snake case for col name) --- apps/rule-manager/app/db/DbRuleDraft.scala | 5 ++++- apps/rule-manager/app/utils/StringHelpers.scala | 10 ++++++++++ apps/rule-manager/test/db/DbRuleDraftSpec.scala | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 apps/rule-manager/app/utils/StringHelpers.scala diff --git a/apps/rule-manager/app/db/DbRuleDraft.scala b/apps/rule-manager/app/db/DbRuleDraft.scala index 07fe0c035..0686b5864 100644 --- a/apps/rule-manager/app/db/DbRuleDraft.scala +++ b/apps/rule-manager/app/db/DbRuleDraft.scala @@ -10,6 +10,8 @@ import scalikejdbc._ import java.time.OffsetDateTime import scala.util.{Failure, Success, Try} +import utils.StringHelpers +import service.RuleManager.RuleType case class DbRuleDraft( id: Option[Int], @@ -280,7 +282,8 @@ object DbRuleDraft extends SQLSyntaxSupport[DbRuleDraft] { val orderByClause = { val maybeSimilarityCol = maybeWord.map { _ => SQLSyntax.createUnsafely(similarityCol) } val orderStmts = maybeSimilarityCol.toList ++ sortBy.map { sortByStr => - val col = rd.column(sortByStr.slice(1, sortByStr.length)) + val colName = StringHelpers.camelToSnakeCase(sortByStr.slice(1, sortByStr.length)) + val col = rd.column(colName) sortByStr.slice(0, 1) match { case "+" => sqls"$col ASC" case "-" => sqls"$col DESC" diff --git a/apps/rule-manager/app/utils/StringHelpers.scala b/apps/rule-manager/app/utils/StringHelpers.scala new file mode 100644 index 000000000..de076178b --- /dev/null +++ b/apps/rule-manager/app/utils/StringHelpers.scala @@ -0,0 +1,10 @@ +package utils + +object StringHelpers { + def camelToSnakeCase(name: String) = "[A-Z\\d]".r.replaceAllIn( + name, + { m => + "_" + m.group(0).toLowerCase() + } + ) +} diff --git a/apps/rule-manager/test/db/DbRuleDraftSpec.scala b/apps/rule-manager/test/db/DbRuleDraftSpec.scala index 0544f80c8..b2d9fd349 100644 --- a/apps/rule-manager/test/db/DbRuleDraftSpec.scala +++ b/apps/rule-manager/test/db/DbRuleDraftSpec.scala @@ -8,6 +8,7 @@ import scalikejdbc._ import play.api.mvc.Results.NotFound import java.time.OffsetDateTime +import service.RuleManager.RuleType class DbRuleDraftSpec extends RuleFixture with Matchers with DBTest {