From 340234759e23cc5146d1bf682f385803c2943fd2 Mon Sep 17 00:00:00 2001 From: Xoai Date: Tue, 1 Oct 2024 11:18:54 +0700 Subject: [PATCH] fixed top user donate --- .../punkga-pg/tables/public_albums.yaml | 43 --- .../punkga-pg/tables/public_artworks.yaml | 20 +- .../tables/public_authorizer_users.yaml | 2 - hasura/metadata/query_collections.yaml | 261 ++++++++---------- hasura/metadata/rest_endpoints.yaml | 18 -- .../1727687947812_top_user_donate/down.sql | 10 + .../1727687947812_top_user_donate/up.sql | 8 + .../1727687976203_top_creator_donate/down.sql | 11 + .../1727687976203_top_creator_donate/up.sql | 9 + src/modules/telegram/telegram.graphql.ts | 23 ++ src/modules/telegram/telegram.service.ts | 10 +- 11 files changed, 182 insertions(+), 233 deletions(-) create mode 100644 hasura/migrations/punkga-pg/1727687947812_top_user_donate/down.sql create mode 100644 hasura/migrations/punkga-pg/1727687947812_top_user_donate/up.sql create mode 100644 hasura/migrations/punkga-pg/1727687976203_top_creator_donate/down.sql create mode 100644 hasura/migrations/punkga-pg/1727687976203_top_creator_donate/up.sql diff --git a/hasura/metadata/databases/punkga-pg/tables/public_albums.yaml b/hasura/metadata/databases/punkga-pg/tables/public_albums.yaml index b05f680..c130778 100644 --- a/hasura/metadata/databases/punkga-pg/tables/public_albums.yaml +++ b/hasura/metadata/databases/punkga-pg/tables/public_albums.yaml @@ -9,46 +9,3 @@ array_relationships: table: name: artworks schema: public -select_permissions: - - role: anonymous - permission: - columns: - - created_at - - creator_id - - description - - disable - - id - - name - - show - - thumbnail_url - - updated_at - filter: {} - allow_aggregations: true - - role: creator - permission: - columns: - - created_at - - creator_id - - description - - disable - - id - - name - - show - - thumbnail_url - - updated_at - filter: {} - allow_aggregations: true - - role: user - permission: - columns: - - created_at - - creator_id - - description - - disable - - id - - name - - show - - thumbnail_url - - updated_at - filter: {} - allow_aggregations: true diff --git a/hasura/metadata/databases/punkga-pg/tables/public_artworks.yaml b/hasura/metadata/databases/punkga-pg/tables/public_artworks.yaml index 565bc2a..7fd975a 100644 --- a/hasura/metadata/databases/punkga-pg/tables/public_artworks.yaml +++ b/hasura/metadata/databases/punkga-pg/tables/public_artworks.yaml @@ -9,41 +9,23 @@ select_permissions: - role: anonymous permission: columns: - - album_id - contest_id - contest_round - - created_at - creator_id - id - - name - - source_url - - updated_at - - url - filter: {} - allow_aggregations: true - - role: creator - permission: - columns: - - album_id - - contest_id - - contest_round - - creator_id - - id - - name - source_url - url - created_at - updated_at filter: {} + allow_aggregations: true - role: user permission: columns: - - album_id - contest_id - contest_round - creator_id - id - - name - source_url - url - created_at diff --git a/hasura/metadata/databases/punkga-pg/tables/public_authorizer_users.yaml b/hasura/metadata/databases/punkga-pg/tables/public_authorizer_users.yaml index 507cdc3..4a6a134 100644 --- a/hasura/metadata/databases/punkga-pg/tables/public_authorizer_users.yaml +++ b/hasura/metadata/databases/punkga-pg/tables/public_authorizer_users.yaml @@ -91,7 +91,6 @@ select_permissions: - revoked_timestamp - roles - signup_methods - - ton_wallet_address - updated_at - wallet_address computed_fields: @@ -110,7 +109,6 @@ update_permissions: - gender - nickname - picture - - ton_wallet_address - wallet_address filter: id: diff --git a/hasura/metadata/query_collections.yaml b/hasura/metadata/query_collections.yaml index 27f5b73..3560254 100644 --- a/hasura/metadata/query_collections.yaml +++ b/hasura/metadata/query_collections.yaml @@ -1077,6 +1077,117 @@ } } } + - name: User - Get Profile + query: | + query GetUserProfile { + authorizer_users(limit: 1) { + id + email + email_verified_at + bio + birthdate + gender + active_wallet_address: active_evm_address + wallet_address + nickname + picture + signup_methods + levels { + xp + level + user_level_chain { + id + name + punkga_config + } + } + authorizer_users_user_wallet { + address + } + user_quests_aggregate { + aggregate { + count + } + } + user_quests(order_by: {created_at:desc}, limit: 20) { + created_at + status + user_quest_rewards { + tx_hash + } + quest { + id + name + quests_campaign { + campaign_chain { + punkga_config + } + } + quests_i18n { + id + quest_id + language_id + data + i18n_language { + id + description + icon + is_main + symbol + } + } + reward + } + } + } + } + - name: Public - Get manga by creator + query: | + query manga ($id: Int!, $limit: Int = 10, $offset: Int = 0) { + manga(limit: $limit, offset: $offset, where: {manga_creators:{creator_id:{_eq:$id}},status:{_neq:"Removed"}}) { + id + slug + status + poster + banner + manga_creators { + creator { + name + pen_name + id + slug + } + } + manga_total_likes { + likes + } + manga_total_views { + views + } + manga_tags { + tag { + tag_languages { + language_id + value + } + id + } + } + chapters(limit: 1, order_by: {chapter_number:desc}, where: {status:{_eq:"Published"}}) { + id + chapter_number + chapter_name + } + contract_addresses + manga_languages { + id + is_main_language + title + description + language_id + } + } + } - name: Public - query artwork by creator query: | query artworks ($creator_id: Int!, $limit: Int = 10, $offset: Int = 0) { @@ -1320,153 +1431,3 @@ } } } - - name: Public - Query albums by creator id - query: | - query albums ($creator_id: Int!, $limit: Int = 100, $offset: Int = 0) { - albums(where: {_or:[{_and:{id:{_eq:1},show:{_eq:true}}},{_and:{creator_id:{_eq:$creator_id},show:{_eq:true}}}]}, limit: $limit, offset: $offset) { - id - show - thumbnail_url - name - disable - } - albums_aggregate(where: {_or:[{_and:{id:{_eq:1},show:{_eq:true}}},{_and:{creator_id:{_eq:$creator_id},show:{_eq:true}}}]}) { - aggregate { - count - } - } - } - - name: Public - Query album detail - query: | - query albums ($id: Int!, $limit: Int = 10, $offset: Int = 0, $creator_id: Int!) { - albums(where: {id:{_eq:$id},show:{_eq:true},disable:{_eq:false}}) { - id - name - thumbnail_url - show - disable - artworks(limit: $limit, offset: $offset, where: {creator_id:{_eq:$creator_id}}) { - id - name - url - } - artworks_aggregate(where: {creator_id:{_eq:$creator_id}}) { - aggregate { - count - } - } - } - } - - name: Public - Get manga by creator - query: | - query manga ($id: Int!, $limit: Int = 10, $offset: Int = 0) { - manga(limit: $limit, offset: $offset, where: {manga_creators:{creator_id:{_eq:$id}},status:{_neq:"Removed"}}) { - id - slug - status - poster - banner - manga_creators { - creator { - name - pen_name - id - slug - isActive - } - } - manga_total_likes { - likes - } - manga_total_views { - views - } - manga_tags { - tag { - tag_languages { - language_id - value - } - id - } - } - chapters(limit: 1, order_by: {chapter_number:desc}, where: {status:{_eq:"Published"}}) { - id - chapter_number - chapter_name - } - contract_addresses - manga_languages { - id - is_main_language - title - description - language_id - } - } - } - - name: User - Get Profile - query: | - query GetUserProfile { - authorizer_users(limit: 1) { - id - email - email_verified_at - bio - birthdate - gender - active_wallet_address: active_evm_address - wallet_address - ton_wallet_address - nickname - picture - signup_methods - levels { - xp - level - user_level_chain { - id - name - punkga_config - } - } - authorizer_users_user_wallet { - address - } - user_quests_aggregate { - aggregate { - count - } - } - user_quests(order_by: {created_at:desc}, limit: 20) { - created_at - status - user_quest_rewards { - tx_hash - } - quest { - id - name - quests_campaign { - campaign_chain { - punkga_config - } - } - quests_i18n { - id - quest_id - language_id - data - i18n_language { - id - description - icon - is_main - symbol - } - } - reward - } - } - } - } diff --git a/hasura/metadata/rest_endpoints.yaml b/hasura/metadata/rest_endpoints.yaml index be05c24..7d5a886 100644 --- a/hasura/metadata/rest_endpoints.yaml +++ b/hasura/metadata/rest_endpoints.yaml @@ -259,15 +259,6 @@ - GET name: Public - Get leaderboard url: pubic/leaderboard -- comment: "" - definition: - query: - collection_name: allowed-queries - query_name: Public - Query album detail - methods: - - GET - name: Public - Query album detail - url: public/albums/:id - comment: "" definition: query: @@ -295,15 +286,6 @@ - GET name: Public - Get Chapter Comments url: public/chapters/:chapter_id/comments -- comment: "" - definition: - query: - collection_name: allowed-queries - query_name: Public - Query albums by creator id - methods: - - GET - name: Public - Query albums by creator id - url: public/creators/:creator_id/albums - comment: "" definition: query: diff --git a/hasura/migrations/punkga-pg/1727687947812_top_user_donate/down.sql b/hasura/migrations/punkga-pg/1727687947812_top_user_donate/down.sql new file mode 100644 index 0000000..aa2bfff --- /dev/null +++ b/hasura/migrations/punkga-pg/1727687947812_top_user_donate/down.sql @@ -0,0 +1,10 @@ +-- Could not auto-generate a down migration. +-- Please write an appropriate down migration for the SQL below: +-- CREATE OR REPLACE VIEW "public"."top_user_donate" AS +-- SELECT telegram_users.username, +-- telegram_users.user_id, +-- donate_history.telegram_id, +-- sum(donate_history.value) AS value +-- FROM (donate_history +-- JOIN telegram_users ON ((telegram_users.telegram_id = donate_history.telegram_id))) +-- GROUP BY telegram_users.username, telegram_users.user_id, donate_history.telegram_id; diff --git a/hasura/migrations/punkga-pg/1727687947812_top_user_donate/up.sql b/hasura/migrations/punkga-pg/1727687947812_top_user_donate/up.sql new file mode 100644 index 0000000..aea1365 --- /dev/null +++ b/hasura/migrations/punkga-pg/1727687947812_top_user_donate/up.sql @@ -0,0 +1,8 @@ +CREATE OR REPLACE VIEW "public"."top_user_donate" AS + SELECT telegram_users.username, + telegram_users.user_id, + donate_history.telegram_id, + sum(donate_history.value) AS value + FROM (donate_history + JOIN telegram_users ON ((telegram_users.telegram_id = donate_history.telegram_id))) + GROUP BY telegram_users.username, telegram_users.user_id, donate_history.telegram_id; diff --git a/hasura/migrations/punkga-pg/1727687976203_top_creator_donate/down.sql b/hasura/migrations/punkga-pg/1727687976203_top_creator_donate/down.sql new file mode 100644 index 0000000..125be11 --- /dev/null +++ b/hasura/migrations/punkga-pg/1727687976203_top_creator_donate/down.sql @@ -0,0 +1,11 @@ +-- Could not auto-generate a down migration. +-- Please write an appropriate down migration for the SQL below: +-- CREATE OR REPLACE VIEW "public"."top_creator_donate" AS +-- SELECT creators.id, +-- creators.email, +-- creators.name, +-- creators.avatar_url, +-- sum(donate_history.value) AS value +-- FROM (donate_history +-- JOIN creators ON ((creators.id = donate_history.creator_id))) +-- GROUP BY creators.id, creators.email, creators.name, creators.avatar_url; diff --git a/hasura/migrations/punkga-pg/1727687976203_top_creator_donate/up.sql b/hasura/migrations/punkga-pg/1727687976203_top_creator_donate/up.sql new file mode 100644 index 0000000..bac4a29 --- /dev/null +++ b/hasura/migrations/punkga-pg/1727687976203_top_creator_donate/up.sql @@ -0,0 +1,9 @@ +CREATE OR REPLACE VIEW "public"."top_creator_donate" AS + SELECT creators.id, + creators.email, + creators.name, + creators.avatar_url, + sum(donate_history.value) AS value + FROM (donate_history + JOIN creators ON ((creators.id = donate_history.creator_id))) + GROUP BY creators.id, creators.email, creators.name, creators.avatar_url; diff --git a/src/modules/telegram/telegram.graphql.ts b/src/modules/telegram/telegram.graphql.ts index d56ab58..97a161c 100644 --- a/src/modules/telegram/telegram.graphql.ts +++ b/src/modules/telegram/telegram.graphql.ts @@ -366,6 +366,29 @@ export class TelegramGraphql { headers ); } + getTopDonateByUser(variables: any) { + const headers = { + 'x-hasura-admin-secret': this.configSvc.get( + 'graphql.adminSecret' + ), + }; + + return this.graphqlSvc.query( + this.configSvc.get('graphql.endpoint'), + '', + `query top_user_donate($telegram_id: String! = "") { + top_user_donate(where: {telegram_id: {_eq: $telegram_id}}) { + user_id + telegram_id + username + value + } + }`, + 'top_user_donate', + variables, + headers + ); + } getTopCreatorDonate() { const headers = { 'x-hasura-admin-secret': this.configSvc.get( diff --git a/src/modules/telegram/telegram.service.ts b/src/modules/telegram/telegram.service.ts index 49cab9e..328b832 100644 --- a/src/modules/telegram/telegram.service.ts +++ b/src/modules/telegram/telegram.service.ts @@ -374,8 +374,16 @@ export class TelegramService { async getTopDonate() { try { + const { telegramId } = ContextProvider.getAuthUser(); const topDonate = await this.telegramGraphql.getTopDonate(); - + if (topDonate && topDonate.data) { + if (!topDonate.data.top_user_donate.find(x => x.telegram_id == telegramId) || topDonate.data.top_user_donate.length <= 0) { + const userDonate = await this.telegramGraphql.getTopDonateByUser({telegram_id: telegramId}); + if (userDonate && userDonate.data.top_user_donate) { + topDonate.data.top_user_donate.concat(userDonate.data.top_user_donate); + } + } + } return topDonate; } catch (errors) { return {