defmodule Requests.Payments.Payment.AirlineData do
@moduledoc false
alias Requests.Payments.Payment.FlightLegDetail
@type passenger :: %{
name: %{full_name: String.t()},
date_of_birth: String.t(),
country_code: <<_::2>>
}
@type ticket :: %{
number: String.t(),
issue_date: String.t(),
issuing_carrier_code: String.t(),
travel_agency_name: String.t(),
travel_agency_code: String.t()
}
@type t() :: %{
ticket: ticket(),
passenger: passenger(),
flight_leg_details: FlightLegDetail.t()
}
@enforce_keys [:ticket, :passenger, :flight_leg_details]
defstruct [
:ticket,
:passenger,
:flight_leg_details
]
def build(params) when is_map(params) do
%{
ticket: build_ticket(params[:ticket]),
passenger: build_passenger(params[:passenger]),
flight_leg_details: FlightLegDetail.build(params[:flight_leg_details])
}
end
def build(_), do: nil
defp build_passenger(params) when is_map(params) do
%{
name: %{full_name: params[:name][:full_name]},
date_of_birth: params[:date_of_birth],
country_code: params[:country_code]
}
end
defp build_passenger(_), do: nil
defp build_ticket(params) when is_map(params) do
%{
number: params[:number],
issue_date: params[:issue_date],
issuing_carrier_code: params[:issuing_carrier_code],
travel_agency_name: params[:travel_agency_name],
travel_agency_code: params[:travel_agency_code]
}
end
defp build_ticket(_), do: nil
end