From 25b05aa2899d2e795a438ed472ef54812b5ea261 Mon Sep 17 00:00:00 2001 From: Evgeniy Alekseev Date: Thu, 26 Nov 2020 23:43:14 +0300 Subject: [PATCH] identify url in runtime --- src/main/resources/reference.conf | 2 -- .../me/arcanis/ffxivbis/Application.scala | 4 +--- .../ffxivbis/service/bis/Ariyala.scala | 2 +- .../ffxivbis/service/bis/BisProvider.scala | 19 ++++++++++--------- .../arcanis/ffxivbis/service/bis/Etro.scala | 2 +- .../http/api/v1/BiSEndpointTest.scala | 2 +- .../http/api/v1/PartyEndpointTest.scala | 2 +- .../http/api/v1/PlayerEndpointTest.scala | 2 +- .../ffxivbis/service/LootSelectorTest.scala | 2 +- .../service/bis/BisProviderTest.scala | 4 ++-- 10 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/main/resources/reference.conf b/src/main/resources/reference.conf index 0007b0e..29e36fc 100644 --- a/src/main/resources/reference.conf +++ b/src/main/resources/reference.conf @@ -1,7 +1,5 @@ me.arcanis.ffxivbis { bis-provider { - # either use ariyala or etro - use-etro = no # xivapi base url, string, required xivapi-url = "https://xivapi.com" # xivapi developer key, string, optional diff --git a/src/main/scala/me/arcanis/ffxivbis/Application.scala b/src/main/scala/me/arcanis/ffxivbis/Application.scala index ef937ff..dbbb7d1 100644 --- a/src/main/scala/me/arcanis/ffxivbis/Application.scala +++ b/src/main/scala/me/arcanis/ffxivbis/Application.scala @@ -34,9 +34,7 @@ class Application extends Actor with StrictLogging { Migration(config).onComplete { case Success(_) => - val useEtro = config.getBoolean("me.arcanis.ffxivbis.bis-provider.use-etro") - - val bisProvider = context.system.actorOf(BisProvider.props(useEtro), "bis-provider") + val bisProvider = context.system.actorOf(BisProvider.props, "bis-provider") val storage = context.system.actorOf(DatabaseImpl.props, "storage") val party = context.system.actorOf(PartyService.props(storage), "party") val http = new RootEndpoint(context.system, party, bisProvider) diff --git a/src/main/scala/me/arcanis/ffxivbis/service/bis/Ariyala.scala b/src/main/scala/me/arcanis/ffxivbis/service/bis/Ariyala.scala index cbb67c4..4e3a724 100644 --- a/src/main/scala/me/arcanis/ffxivbis/service/bis/Ariyala.scala +++ b/src/main/scala/me/arcanis/ffxivbis/service/bis/Ariyala.scala @@ -14,7 +14,7 @@ import spray.json.{JsNumber, JsObject, JsString, deserializationError} import scala.concurrent.{ExecutionContext, Future} -trait Ariyala { +object Ariyala { def idParser(job: Job.Job, js: JsObject) (implicit executionContext: ExecutionContext): Future[Map[String, Long]] = diff --git a/src/main/scala/me/arcanis/ffxivbis/service/bis/BisProvider.scala b/src/main/scala/me/arcanis/ffxivbis/service/bis/BisProvider.scala index 0b8df51..4d23319 100644 --- a/src/main/scala/me/arcanis/ffxivbis/service/bis/BisProvider.scala +++ b/src/main/scala/me/arcanis/ffxivbis/service/bis/BisProvider.scala @@ -19,11 +19,7 @@ import spray.json._ import scala.concurrent.{ExecutionContext, Future} -abstract class BisProvider extends Actor with XivApi with StrictLogging { - - def idParser(job: Job.Job, js: JsObject) - (implicit executionContext: ExecutionContext): Future[Map[String, Long]] - def uri(root: Uri, id: String): Uri +class BisProvider extends Actor with XivApi with StrictLogging { override def receive: Receive = { case BisProvider.GetBiS(link, job) => @@ -40,15 +36,20 @@ abstract class BisProvider extends Actor with XivApi with StrictLogging { val url = Uri(link) val id = Paths.get(link).normalize.getFileName.toString - sendRequest(uri(url, id), BisProvider.parseBisJsonToPieces(job, idParser, getPieceType)) + val (idParser, uri) = + if (url.authority.host.address().contains("etro")) { + (Etro.idParser(_, _), Etro.uri(url, id)) + } else { + (Ariyala.idParser(_, _), Ariyala.uri(url, id)) + } + + sendRequest(uri, BisProvider.parseBisJsonToPieces(job, idParser, getPieceType)) } } object BisProvider { - def props(useEtro: Boolean): Props = - if (useEtro) Props(new BisProvider with Etro) - else Props(new BisProvider with Ariyala) + def props: Props = Props(new BisProvider) case class GetBiS(link: String, job: Job.Job) diff --git a/src/main/scala/me/arcanis/ffxivbis/service/bis/Etro.scala b/src/main/scala/me/arcanis/ffxivbis/service/bis/Etro.scala index 19acdae..a7b644b 100644 --- a/src/main/scala/me/arcanis/ffxivbis/service/bis/Etro.scala +++ b/src/main/scala/me/arcanis/ffxivbis/service/bis/Etro.scala @@ -14,7 +14,7 @@ import spray.json.{JsNumber, JsObject} import scala.concurrent.{ExecutionContext, Future} -trait Etro { +object Etro { def idParser(job: Job.Job, js: JsObject) (implicit executionContext: ExecutionContext): Future[Map[String, Long]] = diff --git a/src/test/scala/me/arcanis/ffxivbis/http/api/v1/BiSEndpointTest.scala b/src/test/scala/me/arcanis/ffxivbis/http/api/v1/BiSEndpointTest.scala index 7a36a8b..27c7fe7 100644 --- a/src/test/scala/me/arcanis/ffxivbis/http/api/v1/BiSEndpointTest.scala +++ b/src/test/scala/me/arcanis/ffxivbis/http/api/v1/BiSEndpointTest.scala @@ -31,7 +31,7 @@ class BiSEndpointTest extends WordSpec implicit private val routeTimeout: RouteTestTimeout = RouteTestTimeout(timeout) private val storage: ActorRef = system.actorOf(impl.DatabaseImpl.props) - private val provider: ActorRef = system.actorOf(BisProvider.props(false)) + private val provider: ActorRef = system.actorOf(BisProvider.props) private val party: ActorRef = system.actorOf(PartyService.props(storage)) private val route: Route = new BiSEndpoint(party, provider)(timeout).route diff --git a/src/test/scala/me/arcanis/ffxivbis/http/api/v1/PartyEndpointTest.scala b/src/test/scala/me/arcanis/ffxivbis/http/api/v1/PartyEndpointTest.scala index 1443592..74b5e17 100644 --- a/src/test/scala/me/arcanis/ffxivbis/http/api/v1/PartyEndpointTest.scala +++ b/src/test/scala/me/arcanis/ffxivbis/http/api/v1/PartyEndpointTest.scala @@ -30,7 +30,7 @@ class PartyEndpointTest extends WordSpec implicit private val routeTimeout: RouteTestTimeout = RouteTestTimeout(timeout) private val storage: ActorRef = system.actorOf(impl.DatabaseImpl.props) - private val provider: ActorRef = system.actorOf(BisProvider.props(false)) + private val provider: ActorRef = system.actorOf(BisProvider.props) private val route: Route = new PartyEndpoint(storage, provider)(timeout).route override def testConfig: Config = Settings.withRandomDatabase diff --git a/src/test/scala/me/arcanis/ffxivbis/http/api/v1/PlayerEndpointTest.scala b/src/test/scala/me/arcanis/ffxivbis/http/api/v1/PlayerEndpointTest.scala index e649bce..6d61339 100644 --- a/src/test/scala/me/arcanis/ffxivbis/http/api/v1/PlayerEndpointTest.scala +++ b/src/test/scala/me/arcanis/ffxivbis/http/api/v1/PlayerEndpointTest.scala @@ -30,7 +30,7 @@ class PlayerEndpointTest extends WordSpec implicit private val routeTimeout: RouteTestTimeout = RouteTestTimeout(timeout) private val storage: ActorRef = system.actorOf(impl.DatabaseImpl.props) - private val provider: ActorRef = system.actorOf(BisProvider.props(false)) + private val provider: ActorRef = system.actorOf(BisProvider.props) private val party: ActorRef = system.actorOf(PartyService.props(storage)) private val route: Route = new PlayerEndpoint(party, provider)(timeout).route diff --git a/src/test/scala/me/arcanis/ffxivbis/service/LootSelectorTest.scala b/src/test/scala/me/arcanis/ffxivbis/service/LootSelectorTest.scala index 28bee7a..01cc5e2 100644 --- a/src/test/scala/me/arcanis/ffxivbis/service/LootSelectorTest.scala +++ b/src/test/scala/me/arcanis/ffxivbis/service/LootSelectorTest.scala @@ -23,7 +23,7 @@ class LootSelectorTest extends TestKit(ActorSystem("lootselector")) private val timeout: FiniteDuration = 60 seconds override def beforeAll(): Unit = { - val provider = system.actorOf(BisProvider.props(false)) + val provider = system.actorOf(BisProvider.props) val dncSet = Await.result((provider ? BisProvider.GetBiS(Fixtures.link, Job.DNC) )(timeout).mapTo[BiS], timeout) dnc = dnc.withBiS(Some(dncSet)) diff --git a/src/test/scala/me/arcanis/ffxivbis/service/bis/BisProviderTest.scala b/src/test/scala/me/arcanis/ffxivbis/service/bis/BisProviderTest.scala index 556039e..5c70a28 100644 --- a/src/test/scala/me/arcanis/ffxivbis/service/bis/BisProviderTest.scala +++ b/src/test/scala/me/arcanis/ffxivbis/service/bis/BisProviderTest.scala @@ -19,13 +19,13 @@ class BisProviderTest extends TestKit(ActorSystem("bis-provider")) "ariyala actor" must { "get best in slot set (ariyala)" in { - val provider = system.actorOf(BisProvider.props(false)) + val provider = system.actorOf(BisProvider.props) provider ! BisProvider.GetBiS(Fixtures.link, Job.DNC) expectMsg(timeout, Fixtures.bis) } "get best in slot set (etro)" in { - val provider = system.actorOf(BisProvider.props(true)) + val provider = system.actorOf(BisProvider.props) provider ! BisProvider.GetBiS(Fixtures.link3, Job.DNC) expectMsg(timeout, Fixtures.bis) }