diff --git a/modules/api/src/main/smithy/search.smithy b/modules/api/src/main/smithy/search.smithy index b548fd1c..f40c28cf 100644 --- a/modules/api/src/main/smithy/search.smithy +++ b/modules/api/src/main/smithy/search.smithy @@ -9,7 +9,7 @@ use smithy.api#default @simpleRestJson service SearchService { version: "3.0.0" - operations: [Search, Count, DeleteById, DeleteByIds, Mapping] + operations: [Search, Count, DeleteById, DeleteByIds, Mapping, Refresh] } @readonly @@ -46,6 +46,12 @@ operation Mapping { errors: [InternalServerError] } +@http(method: "POST", uri: "/refresh/{index}", code: 200) +operation Refresh { + input: RefreshInput + errors: [InternalServerError] +} + structure SearchInput { @required @@ -90,6 +96,12 @@ structure MappingInput { index: Index } +structure RefreshInput { + @required + @httpLabel + index: Index +} + structure Forum { @required text: String diff --git a/modules/app/src/main/scala/service.search.scala b/modules/app/src/main/scala/service.search.scala index d5d1f4d4..a1c1ea1a 100644 --- a/modules/app/src/main/scala/service.search.scala +++ b/modules/app/src/main/scala/service.search.scala @@ -14,6 +14,13 @@ class SearchServiceImpl(esClient: ESClient[IO])(using Logger[IO]) extends Search import SearchServiceImpl.{ given, * } + override def refresh(index: Index): IO[Unit] = + esClient + .refreshIndex(index.transform) + .handleErrorWith: e => + error"Error in refresh: index=$index" *> + IO.raiseError(InternalServerError("Internal server error")) + override def mapping(index: Index): IO[Unit] = esClient .putMapping(index.transform, index.mapping) diff --git a/modules/client/src/main/scala/PlayClient.scala b/modules/client/src/main/scala/PlayClient.scala index e2799967..f5dfc3d3 100644 --- a/modules/client/src/main/scala/PlayClient.scala +++ b/modules/client/src/main/scala/PlayClient.scala @@ -18,6 +18,12 @@ class PlayClient(client: StandaloneWSClient, baseUrl: String)(using ExecutionCon import implicits.given + override def refresh(index: Index): Future[Unit] = + client + .url(s"$baseUrl/refresh/${index.name}") + .execute("POST") + .map(_ => ()) + override def mapping(index: Index): Future[Unit] = client .url(s"$baseUrl/mapping/${index.name}") diff --git a/modules/e2e/src/test/scala/CompatSuite.scala b/modules/e2e/src/test/scala/CompatSuite.scala index 7c35077a..cef0fe01 100644 --- a/modules/e2e/src/test/scala/CompatSuite.scala +++ b/modules/e2e/src/test/scala/CompatSuite.scala @@ -46,6 +46,9 @@ object CompatSuite extends weaver.IOSuite: test("mapping endpoint"): client => IO.fromFuture(IO(client.mapping(SpecIndex.Study))).map(expect.same(_, ())) + test("refresh endpoint"): client => + IO.fromFuture(IO(client.refresh(SpecIndex.Forum))).map(expect.same(_, ())) + def testAppConfig = AppConfig( server = HttpServerConfig(ip"0.0.0.0", port"9999", shutdownTimeout = 1), elastic = ElasticConfig("http://0.0.0.0:9200")