From 81cbdf116d0ad5238d27290d2508de824946c20e Mon Sep 17 00:00:00 2001 From: Mouaad Aallam Date: Wed, 23 Jun 2021 18:29:01 +0200 Subject: [PATCH 1/3] facets ordering models --- .../algolia/objects/RenderingContent.scala | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/scala/algolia/objects/RenderingContent.scala diff --git a/src/main/scala/algolia/objects/RenderingContent.scala b/src/main/scala/algolia/objects/RenderingContent.scala new file mode 100644 index 00000000..9d78b342 --- /dev/null +++ b/src/main/scala/algolia/objects/RenderingContent.scala @@ -0,0 +1,32 @@ +package algolia.objects + +/** + * Content defining how the search interface should be rendered. This is set via the settings for a default value + * and can be overridden via rules. + */ +case class RenderingContent( + facetOrdering: Option[FacetOrdering] = None +) + +/** + * Facets and facets values ordering rules container. + */ +case class FacetOrdering( + facets: FacetsOrder, + values: Map[String, FacetValuesOrder] +) + +/** + * Define or override the way facet attributes are displayed. + */ +case class FacetsOrder( + order: Seq[String] +) + +/** + * Facet values ordering rule container. + */ +case class FacetValuesOrder( + order: Seq[String], + sortRemainingBy: String +) From 4c007de2d07682e132f6f9fd95663739a3f488a3 Mon Sep 17 00:00:00 2001 From: Mouaad Aallam Date: Thu, 24 Jun 2021 11:21:10 +0200 Subject: [PATCH 2/3] add RenderingContent to search response and settings --- .../scala/algolia/objects/IndexSettings.scala | 4 +- .../algolia/objects/RenderingContent.scala | 60 ++++++++++++++++++- src/main/scala/algolia/objects/Rule.scala | 3 +- .../algolia/responses/SearchResult.scala | 6 +- 4 files changed, 67 insertions(+), 6 deletions(-) diff --git a/src/main/scala/algolia/objects/IndexSettings.scala b/src/main/scala/algolia/objects/IndexSettings.scala index a2a8e98e..7aaea85b 100644 --- a/src/main/scala/algolia/objects/IndexSettings.scala +++ b/src/main/scala/algolia/objects/IndexSettings.scala @@ -99,5 +99,7 @@ case class IndexSettings( ignorePlurals: Option[IgnorePlurals] = None, disableTypoToleranceOnAttributes: Option[Seq[String]] = None, disableTypoToleranceOnWords: Option[Seq[String]] = None, - separatorsToIndex: Option[String] = None + separatorsToIndex: Option[String] = None, + /* Facets ordering */ + renderingContent: Option[RenderingContent] = None ) diff --git a/src/main/scala/algolia/objects/RenderingContent.scala b/src/main/scala/algolia/objects/RenderingContent.scala index 9d78b342..a8ac8509 100644 --- a/src/main/scala/algolia/objects/RenderingContent.scala +++ b/src/main/scala/algolia/objects/RenderingContent.scala @@ -1,3 +1,28 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016 Algolia + * http://www.algolia.com/ + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + package algolia.objects /** @@ -27,6 +52,37 @@ case class FacetsOrder( * Facet values ordering rule container. */ case class FacetValuesOrder( - order: Seq[String], - sortRemainingBy: String + order: Seq[String] = Seq.empty, + sortRemainingBy: SortRule = SortRule.count ) + +/** + * Rule defining the sort order of facet values. + */ +sealed trait SortRule { + val value: String +} + +object SortRule { + + /** + * Alphabetical (ascending) + */ + case object alpha extends SortRule { + override val value: String = "alpha" + } + + /** + * Facet count (descending) + */ + case object count extends SortRule { + override val value: String = "count" + } + + /** + * Hidden (show only pinned values) + */ + case object hidden extends SortRule { + override val value: String = "hidden" + } +} diff --git a/src/main/scala/algolia/objects/Rule.scala b/src/main/scala/algolia/objects/Rule.scala index de3d597a..e8e28a52 100644 --- a/src/main/scala/algolia/objects/Rule.scala +++ b/src/main/scala/algolia/objects/Rule.scala @@ -48,7 +48,8 @@ case class Consequence( filterPromotes: Option[Boolean] = None, promote: Option[Iterable[ConsequencePromote]] = None, hide: Option[Iterable[ConsequenceHide]] = None, - userData: Option[Map[String, Any]] = None + userData: Option[Map[String, Any]] = None, + renderingContent: Option[RenderingContent] = None ) case class ConsequencePromote(objectID: String, position: Int) diff --git a/src/main/scala/algolia/responses/SearchResult.scala b/src/main/scala/algolia/responses/SearchResult.scala index 395717a6..154bd738 100644 --- a/src/main/scala/algolia/responses/SearchResult.scala +++ b/src/main/scala/algolia/responses/SearchResult.scala @@ -25,7 +25,7 @@ package algolia.responses -import algolia.objects.{AbstractSynonym, Rule} +import algolia.objects.{AbstractSynonym, RenderingContent, Rule} import org.json4s._ private[algolia] trait SearchHits[A] { @@ -59,7 +59,9 @@ case class SearchResult( processed: Option[Boolean], index: Option[String], // advanced - explain: Option[Explain] + explain: Option[Explain], + // Facets ordering + renderingContent: Option[RenderingContent] ) { implicit val formats: Formats = org.json4s.DefaultFormats From 72fe87605e1371eb3d2db3ca143fa4627ef1938a Mon Sep 17 00:00:00 2001 From: Mouaad Aallam Date: Mon, 12 Jul 2021 14:12:45 +0200 Subject: [PATCH 3/3] remove defaults from 'FacetValuesOrder' --- src/main/scala/algolia/objects/RenderingContent.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/algolia/objects/RenderingContent.scala b/src/main/scala/algolia/objects/RenderingContent.scala index a8ac8509..c6dbdaf4 100644 --- a/src/main/scala/algolia/objects/RenderingContent.scala +++ b/src/main/scala/algolia/objects/RenderingContent.scala @@ -52,8 +52,8 @@ case class FacetsOrder( * Facet values ordering rule container. */ case class FacetValuesOrder( - order: Seq[String] = Seq.empty, - sortRemainingBy: SortRule = SortRule.count + order: Seq[String], + sortRemainingBy: Option[SortRule] = None ) /**