diff --git a/api/v1_users_coin.go b/api/v1_users_coin.go index 980f27df..2e3b5803 100644 --- a/api/v1_users_coin.go +++ b/api/v1_users_coin.go @@ -83,22 +83,21 @@ func (app *ApiServer) v1UsersCoin(c *fiber.Ctx) error { artist_coins.logo_uri, artist_coins.banner_image_url, COALESCE(balances_by_mint.balance, 0) AS balance, - COALESCE((balances_by_mint.balance * COALESCE(stats.price, pools.price_usd)) / POWER(10, artist_coins.decimals), 0) AS balance_usd, + COALESCE((balances_by_mint.balance * COALESCE(acp.price, 0)) / POWER(10, artist_coins.decimals), 0) AS balance_usd, COALESCE( JSON_AGG( JSON_BUILD_OBJECT( 'account', balances.account, 'owner', balances.owner, 'balance', balances.balance, - 'balance_usd', (balances.balance * COALESCE(stats.price, pools.price_usd)) / POWER(10, artist_coins.decimals), + 'balance_usd', (balances.balance * COALESCE(acp.price, 0)) / POWER(10, artist_coins.decimals), 'is_in_app_wallet', balances.is_in_app_wallet ) ) FILTER (WHERE balances.account IS NOT NULL), '[]'::json ) AS accounts FROM artist_coins - LEFT JOIN artist_coin_stats stats ON artist_coins.mint = stats.mint - LEFT JOIN artist_coin_pools pools ON artist_coins.mint = pools.base_mint + LEFT JOIN artist_coin_prices acp ON acp.mint = artist_coins.mint LEFT JOIN balances_by_mint ON artist_coins.mint = balances_by_mint.mint LEFT JOIN ( SELECT * @@ -114,8 +113,7 @@ func (app *ApiServer) v1UsersCoin(c *fiber.Ctx) error { artist_coins.logo_uri, artist_coins.banner_image_url, balances_by_mint.balance, - stats.price, - pools.price_usd + acp.price ;` rows, err := app.pool.Query(c.Context(), sql, pgx.NamedArgs{ diff --git a/api/v1_users_coins.go b/api/v1_users_coins.go index ec297844..03631ca7 100644 --- a/api/v1_users_coins.go +++ b/api/v1_users_coins.go @@ -73,11 +73,10 @@ func (app *ApiServer) v1UsersCoins(c *fiber.Ctx) error { artist_coins.logo_uri, artist_coins.banner_image_url, COALESCE(balances_by_mint.balance, 0) AS balance, - (COALESCE(balances_by_mint.balance, 0) * COALESCE(stats.price, pools.price_usd)) / POWER(10, artist_coins.decimals) AS balance_usd + (COALESCE(balances_by_mint.balance, 0) * COALESCE(acp.price, 0)) / POWER(10, artist_coins.decimals) AS balance_usd FROM artist_coins LEFT JOIN balances_by_mint ON balances_by_mint.mint = artist_coins.mint - LEFT JOIN artist_coin_stats stats ON stats.mint = artist_coins.mint - LEFT JOIN artist_coin_pools pools ON pools.base_mint = artist_coins.mint + LEFT JOIN artist_coin_prices acp ON acp.mint = artist_coins.mint WHERE artist_coins.user_id = @user_id -- Show owned coins OR balance > 0 -- Show coins with positive balance OR ticker = 'AUDIO' -- Always show AUDIO diff --git a/api/v1_wallet_coins.go b/api/v1_wallet_coins.go index 898c51d0..f556a87b 100644 --- a/api/v1_wallet_coins.go +++ b/api/v1_wallet_coins.go @@ -43,11 +43,10 @@ func (app *ApiServer) v1WalletCoins(c *fiber.Ctx) error { artist_coins.logo_uri, artist_coins.banner_image_url, COALESCE(balances_by_mint.balance, 0) AS balance, - (COALESCE(balances_by_mint.balance, 0) * COALESCE(stats.price, pools.price_usd)) / POWER(10, artist_coins.decimals) AS balance_usd + (COALESCE(balances_by_mint.balance, 0) * COALESCE(acp.price, 0)) / POWER(10, artist_coins.decimals) AS balance_usd FROM artist_coins LEFT JOIN balances_by_mint ON balances_by_mint.mint = artist_coins.mint - LEFT JOIN artist_coin_stats stats ON stats.mint = artist_coins.mint - LEFT JOIN artist_coin_pools pools ON pools.base_mint = artist_coins.mint + LEFT JOIN artist_coin_prices acp ON acp.mint = artist_coins.mint WHERE balance > 0 -- Show coins with positive balance ORDER BY -- Prioritize AUDIO diff --git a/ddl/views/artist_coin_prices.sql b/ddl/views/artist_coin_prices.sql index 97941b47..9648a195 100644 --- a/ddl/views/artist_coin_prices.sql +++ b/ddl/views/artist_coin_prices.sql @@ -30,15 +30,19 @@ CREATE VIEW artist_coin_prices AS damm_v2.price AS damm_v2_price, dbc.price AS dbc_price, stats.price AS stats_price, + pools.price_usd AS pools_price_usd, COALESCE( damm_v2.price, dbc.price, - stats.price + stats.price, + pools.price_usd ) AS price FROM artist_coins LEFT JOIN dbc ON artist_coins.mint = dbc.mint LEFT JOIN damm_v2 ON artist_coins.mint = damm_v2.mint - JOIN artist_coin_stats AS stats - ON stats.mint = artist_coins.mint; + LEFT JOIN artist_coin_stats AS stats + ON stats.mint = artist_coins.mint + LEFT JOIN artist_coin_pools AS pools + ON pools.base_mint = artist_coins.mint; -COMMENT ON VIEW artist_coin_prices IS 'View that provides artist coin prices using DAMM V2 pool if available, DBC pools if not and still applicable, and stats table if nothing else. Makes use of the price of the quote token (AUDIO) from Birdeye if using a pool.'; \ No newline at end of file +COMMENT ON VIEW artist_coin_prices IS 'View that provides artist coin prices using DAMM V2 pool if available, DBC pools if not and still applicable, stats table if available, and artist_coin_pools.price_usd as final fallback. Makes use of the price of the quote token (AUDIO) from Birdeye if using a pool.'; \ No newline at end of file