Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 35 additions & 6 deletions api/dbv1/models.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions api/v1_users_coin.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,21 +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(acp.price, 0)) / POWER(10, artist_coins.decimals), 0) AS balance_usd,
COALESCE((balances_by_mint.balance * COALESCE(coin_prices.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(acp.price, 0)) / POWER(10, artist_coins.decimals),
'balance_usd', (balances.balance * COALESCE(coin_prices.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_prices acp ON acp.mint = artist_coins.mint
LEFT JOIN artist_coin_prices coin_prices ON coin_prices.mint = artist_coins.mint
LEFT JOIN balances_by_mint ON artist_coins.mint = balances_by_mint.mint
LEFT JOIN (
SELECT *
Expand All @@ -113,7 +113,7 @@ func (app *ApiServer) v1UsersCoin(c *fiber.Ctx) error {
artist_coins.logo_uri,
artist_coins.banner_image_url,
balances_by_mint.balance,
acp.price
coin_prices.price
;`

rows, err := app.pool.Query(c.Context(), sql, pgx.NamedArgs{
Expand Down
4 changes: 2 additions & 2 deletions api/v1_users_coins.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +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(acp.price, 0)) / POWER(10, artist_coins.decimals) AS balance_usd
(COALESCE(balances_by_mint.balance, 0) * COALESCE(coin_prices.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_prices acp ON acp.mint = artist_coins.mint
LEFT JOIN artist_coin_prices coin_prices ON coin_prices.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
Expand Down
4 changes: 2 additions & 2 deletions api/v1_wallet_coins.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +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(acp.price, 0)) / POWER(10, artist_coins.decimals) AS balance_usd
(COALESCE(balances_by_mint.balance, 0) * COALESCE(coin_prices.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_prices acp ON acp.mint = artist_coins.mint
LEFT JOIN artist_coin_prices coin_prices ON coin_prices.mint = artist_coins.mint
WHERE balance > 0 -- Show coins with positive balance
ORDER BY
-- Prioritize AUDIO
Expand Down
6 changes: 1 addition & 5 deletions ddl/views/artist_coin_prices.sql
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,16 @@ CREATE VIEW artist_coin_prices AS
artist_coins.mint,
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,
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
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, 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.';
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 artist_coin_pools.price_usd as final fallback. Makes use of the price of the quote token (AUDIO) from Birdeye if using a pool.';
10 changes: 6 additions & 4 deletions sql/01_schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -6233,18 +6233,20 @@ CREATE VIEW public.artist_coin_prices AS
damm_v2.price AS damm_v2_price,
dbc.price AS dbc_price,
stats.price AS stats_price,
COALESCE(damm_v2.price, dbc.price, stats.price) AS price
FROM (((public.artist_coins
pools.price_usd AS pools_price_usd,
COALESCE(damm_v2.price, dbc.price, stats.price, pools.price_usd) AS price
FROM ((((public.artist_coins
LEFT JOIN dbc ON (((artist_coins.mint)::text = (dbc.mint)::text)))
LEFT JOIN damm_v2 ON (((artist_coins.mint)::text = (damm_v2.mint)::text)))
JOIN public.artist_coin_stats stats ON ((stats.mint = (artist_coins.mint)::text)));
LEFT JOIN public.artist_coin_stats stats ON ((stats.mint = (artist_coins.mint)::text)))
LEFT JOIN public.artist_coin_pools pools ON ((pools.base_mint = (artist_coins.mint)::text)));


--
-- Name: VIEW artist_coin_prices; Type: COMMENT; Schema: public; Owner: -
--

COMMENT ON VIEW public.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.';
COMMENT ON VIEW public.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.';


--
Expand Down
Loading