public static IEnumerable <HistoryResponseModel> ToResponseModel(this BaseHistoryModel baseModel)
        {
            switch (baseModel)
            {
            case CashinModel cashin:
                yield return(cashin.ToResponseModel());

                break;

            case CashoutModel cashout:
                yield return(cashout.ToResponseModel());

                break;

            case TradeModel trade:
                foreach (var item in trade.ToResponseModel())
                {
                    yield return(item);
                }
                break;

            case OrderEventModel orderEvent:
                yield return(orderEvent.ToResponseModel());

                break;
            }
        }
        /// <summary>
        /// Converts history models to API response
        /// </summary>
        /// <param name="historyModel">Should be only of type CashinModel or CashoutModel</param>
        /// <param name="assetsHelper"></param>
        /// <returns></returns>
        public static async Task <FundsResponseModel> ToFundsResponseModel(this BaseHistoryModel historyModel, IAssetsHelper assetsHelper)
        {
            switch (historyModel)
            {
            case CashinModel cashin:
            {
                var asset = await assetsHelper.GetAssetAsync(cashin.AssetId);

                return(new FundsResponseModel
                    {
                        Id = cashin.Id,
                        Volume = Math.Abs(cashin.Volume),
                        AssetId = cashin.AssetId,
                        AssetName = asset?.DisplayId ?? cashin.AssetId,
                        Operation = FundsOperation.Deposit,
                        Status = FundsStatus.Completed,
                        Type = FundsType.Undefined,
                        Timestamp = cashin.Timestamp,
                        BlockchainHash = cashin.BlockchainHash
                    });
            }

            case CashoutModel cashout:
            {
                var asset = await assetsHelper.GetAssetAsync(cashout.AssetId);

                return(new FundsResponseModel
                    {
                        Id = cashout.Id,
                        Volume = Math.Abs(cashout.Volume),
                        AssetId = cashout.AssetId,
                        AssetName = asset?.DisplayId ?? cashout.AssetId,
                        Operation = FundsOperation.Withdraw,
                        Status = FundsStatus.Completed,
                        Type = FundsType.Undefined,
                        Timestamp = cashout.Timestamp,
                        BlockchainHash = cashout.BlockchainHash
                    });
            }

            default:
                return(null);
            }
        }
        public static HistoryModel ToHistoryModel(this BaseHistoryModel baseModel)
        {
            switch (baseModel)
            {
            case CashinModel cashin:
                return(cashin.ToHistoryModel());

            case CashoutModel cashout:
                return(cashout.ToHistoryModel());

            case TradeModel trade:
                return(trade.ToHistoryModel());

            case OrderEventModel orderEvent:
                return(orderEvent.ToHistoryModel());
            }

            throw new ArgumentException($"{baseModel.Id} has unrecognized type");
        }