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