44 lines
1.4 KiB
Elixir
44 lines
1.4 KiB
Elixir
|
|
defmodule ShootingEventPhx.Domain.StateService do
|
||
|
|
@moduledoc false
|
||
|
|
alias ShootingEventPhx.Domain.{Derived, EventData, Settings}
|
||
|
|
|
||
|
|
def read_state(include_all_proofs \\ false) do
|
||
|
|
players = EventData.list_players()
|
||
|
|
_ = EventData.ensure_score_rows(players)
|
||
|
|
|
||
|
|
settings = Settings.read_settings()
|
||
|
|
scores = EventData.read_scores(players)
|
||
|
|
include_score_proofs = include_all_proofs or settings["viewProofInView"]
|
||
|
|
score_proofs = if include_score_proofs, do: EventData.read_score_proofs(players), else: %{}
|
||
|
|
derived = Derived.compute(players, scores)
|
||
|
|
|
||
|
|
response = %{
|
||
|
|
"competition" => %{
|
||
|
|
"titleAr" => "بطولة دويتوايلر للرماية",
|
||
|
|
"titleEn" => "Datwyler Shooting Event"
|
||
|
|
},
|
||
|
|
"players" => Enum.map(players, &player_to_json/1),
|
||
|
|
"scores" => EventData.score_map_to_json(scores),
|
||
|
|
"settings" => settings,
|
||
|
|
"derived" => derived,
|
||
|
|
"serverTime" => DateTime.utc_now() |> DateTime.truncate(:second) |> DateTime.to_iso8601()
|
||
|
|
}
|
||
|
|
|
||
|
|
if include_score_proofs do
|
||
|
|
Map.put(response, "scoreProofs", EventData.proof_map_to_json(score_proofs))
|
||
|
|
else
|
||
|
|
response
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
defp player_to_json(player) do
|
||
|
|
%{
|
||
|
|
"id" => player.id,
|
||
|
|
"nameAr" => player.name_ar,
|
||
|
|
"nameEn" => player.name_en,
|
||
|
|
"groupCode" => player.group_code,
|
||
|
|
"imageData" => player.image_data
|
||
|
|
}
|
||
|
|
end
|
||
|
|
end
|