From 5cac1bc435c21884e2a9c8d98a2afe647b1db1b0 Mon Sep 17 00:00:00 2001 From: Enrique Fernandez Date: Sat, 27 Apr 2024 13:34:12 +0200 Subject: [PATCH] feat: add UOF.API.variants/{0, 1} --- lib/uof/api/mappings/outcome.ex | 2 +- lib/uof/api/mappings/outcome_mapping.ex | 9 + lib/uof/api/mappings/outcome_mappings.ex | 14 + lib/uof/api/mappings/variant.ex | 11 + lib/uof/api/mappings/variant_descriptions.ex | 9 + lib/uof_api.ex | 9 + test/data/variants.xml | 7538 ++++++++++++++++++ test/uof_api_test.exs | 29 +- 8 files changed, 7619 insertions(+), 2 deletions(-) create mode 100644 lib/uof/api/mappings/outcome_mapping.ex create mode 100644 lib/uof/api/mappings/outcome_mappings.ex create mode 100644 lib/uof/api/mappings/variant.ex create mode 100644 lib/uof/api/mappings/variant_descriptions.ex create mode 100644 test/data/variants.xml diff --git a/lib/uof/api/mappings/outcome.ex b/lib/uof/api/mappings/outcome.ex index cb6b36e..7365bc6 100644 --- a/lib/uof/api/mappings/outcome.ex +++ b/lib/uof/api/mappings/outcome.ex @@ -2,7 +2,7 @@ defmodule UOF.API.Mappings.Outcome do use Saxaboom.Mapper document do - attribute(:id, cast: :integer) + attribute(:id) attribute(:name) end end diff --git a/lib/uof/api/mappings/outcome_mapping.ex b/lib/uof/api/mappings/outcome_mapping.ex new file mode 100644 index 0000000..99a6c3d --- /dev/null +++ b/lib/uof/api/mappings/outcome_mapping.ex @@ -0,0 +1,9 @@ +defmodule UOF.API.Mappings.OutcomeMapping do + use Saxaboom.Mapper + + document do + attribute(:outcome_id) + attribute(:product_outcome_id) + attribute(:product_outcome_name) + end +end diff --git a/lib/uof/api/mappings/outcome_mappings.ex b/lib/uof/api/mappings/outcome_mappings.ex new file mode 100644 index 0000000..5c52980 --- /dev/null +++ b/lib/uof/api/mappings/outcome_mappings.ex @@ -0,0 +1,14 @@ +defmodule UOF.API.Mappings.OutcomeMappings do + use Saxaboom.Mapper + + alias UOF.API.Mappings.OutcomeMapping + + document do + attribute(:product_id, cast: :integer) + attribute(:product_ids) + attribute(:sport_id) + attribute(:market_id, cast: :integer) + attribute(:product_market_id) + elements(:mapping_outcome, as: :outcome_mappings, into: %OutcomeMapping{}) + end +end diff --git a/lib/uof/api/mappings/variant.ex b/lib/uof/api/mappings/variant.ex new file mode 100644 index 0000000..7856988 --- /dev/null +++ b/lib/uof/api/mappings/variant.ex @@ -0,0 +1,11 @@ +defmodule UOF.API.Mappings.Variant do + use Saxaboom.Mapper + + alias UOF.API.Mappings.{OutcomeMappings, Outcome} + + document do + attribute(:id) + elements(:outcome, as: :outcomes, into: %Outcome{}) + elements(:mapping, as: :mappings, into: %OutcomeMappings{}) + end +end diff --git a/lib/uof/api/mappings/variant_descriptions.ex b/lib/uof/api/mappings/variant_descriptions.ex new file mode 100644 index 0000000..d350574 --- /dev/null +++ b/lib/uof/api/mappings/variant_descriptions.ex @@ -0,0 +1,9 @@ +defmodule UOF.API.Mappings.VariantDescriptions do + use Saxaboom.Mapper + + alias UOF.API.Mappings.Variant + + document do + elements(:variant, as: :variants, into: %Variant{}) + end +end diff --git a/lib/uof_api.ex b/lib/uof_api.ex index 1a6d5eb..3a36e07 100644 --- a/lib/uof_api.ex +++ b/lib/uof_api.ex @@ -44,6 +44,15 @@ defmodule UOF.API do HTTP.get(endpoint, %UOF.API.Mappings.BettingStatusDescriptions{}) end + @doc """ + Get a list of all variants and which markets they are used for. + """ + def variants(lang \\ "en") do + endpoint = ["descriptions", lang, "variants.xml"] + + HTTP.get(endpoint, %UOF.API.Mappings.VariantDescriptions{}) + end + @doc """ Describe all currently avbailable producers and their ids. """ diff --git a/test/data/variants.xml b/test/data/variants.xml new file mode 100644 index 0000000..e02b844 --- /dev/null +++ b/test/data/variants.xml @@ -0,0 +1,7538 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/uof_api_test.exs b/test/uof_api_test.exs index a9ba45c..7cccd6c 100644 --- a/test/uof_api_test.exs +++ b/test/uof_api_test.exs @@ -18,7 +18,7 @@ defmodule UOF.API.Test do assert market.id == 282 assert market.name == "Innings 1 to 5th top - {$competitor1} total" assert market.groups == "all|score|4.5_innings" - assert Enum.map(market.outcomes, & &1.id) == [13, 12] + assert Enum.map(market.outcomes, & &1.id) == ["13", "12"] end test "can parse 'descriptions/:lang/match_status.xml' response" do @@ -99,6 +99,33 @@ defmodule UOF.API.Test do assert reason.description == "OTHER" end + test "can parse 'descriptions/:lang/variants.xml' response" do + data = File.read!("test/data/variants.xml") + + {:ok, %UOF.API.Mappings.VariantDescriptions{variants: variants}} = + Saxaboom.parse(data, %UOF.API.Mappings.VariantDescriptions{}) + + assert Enum.count(variants) == 144 + variant = hd(variants) + assert variant.id == "sr:correct_score:after:4" + assert Enum.count(variant.outcomes) == 5 + outcome = hd(variant.outcomes) + assert outcome.id == "sr:correct_score:after:4:1530" + assert outcome.name == "4:0" + assert Enum.count(variant.mappings) == 1 + mapping = hd(variant.mappings) + assert mapping.product_id == 3 + assert mapping.product_ids == "3" + assert mapping.sport_id == "sr:sport:22" + assert mapping.market_id == 1262 + assert mapping.product_market_id == "960" + assert Enum.count(mapping.outcome_mappings) == 5 + outcome_mapping = hd(mapping.outcome_mappings) + assert outcome_mapping.outcome_id == "sr:correct_score:after:4:1530" + assert outcome_mapping.product_outcome_id == "26" + assert outcome_mapping.product_outcome_name == "4:0" + end + test "can parse 'descriptions/producers.xml' response" do data = File.read!("test/data/producers.xml")