defmodule Alpa.Models.Activity do @moduledoc """ Account activity model for trades, dividends, fees, etc. """ use TypedStruct import Alpa.Helpers, only: [parse_decimal: 1, parse_datetime: 1, parse_date: 1] typedstruct do field(:id, String.t()) field(:activity_type, String.t()) field(:date, Date.t()) field(:net_amount, Decimal.t()) field(:symbol, String.t()) field(:qty, Decimal.t()) field(:per_share_amount, Decimal.t()) field(:price, Decimal.t()) field(:cum_qty, Decimal.t()) field(:leaves_qty, Decimal.t()) field(:side, String.t()) field(:type, String.t()) field(:order_id, String.t()) field(:transaction_time, DateTime.t()) field(:description, String.t()) field(:status, String.t()) end @spec from_map(map()) :: t() def from_map(data) when is_map(data) do %__MODULE__{ id: data["id"], activity_type: data["activity_type"], date: parse_date(data["date"]), net_amount: parse_decimal(data["net_amount"]), symbol: data["symbol"], qty: parse_decimal(data["qty"]), per_share_amount: parse_decimal(data["per_share_amount"]), price: parse_decimal(data["price"]), cum_qty: parse_decimal(data["cum_qty"]), leaves_qty: parse_decimal(data["leaves_qty"]), side: data["side"], type: data["type"], order_id: data["order_id"], transaction_time: parse_datetime(data["transaction_time"]), description: data["description"], status: data["status"] } end end