diff --git a/packages/backend/src/handlers/remote-schemas/resolvers/seedGraph/queries.ts b/packages/backend/src/handlers/remote-schemas/resolvers/seedGraph/queries.ts index 32bca85b..9fd47c58 100644 --- a/packages/backend/src/handlers/remote-schemas/resolvers/seedGraph/queries.ts +++ b/packages/backend/src/handlers/remote-schemas/resolvers/seedGraph/queries.ts @@ -9,3 +9,18 @@ export const GetTokenBalances = gql` } } `; + +export const GetTopPSeedHoldersQuery = gql` + query GetTopPSeedHolders($limit: Int) { + userTokens( + orderBy: pSeedBalance + orderDirection: desc + where: { pSeedBalance_gt: "0" } + first: $limit + ) { + id + seedBalance + pSeedBalance + } + } +`; diff --git a/packages/backend/src/handlers/remote-schemas/resolvers/seedGraph/resolver.ts b/packages/backend/src/handlers/remote-schemas/resolvers/seedGraph/resolver.ts index 2e09dda9..48643179 100644 --- a/packages/backend/src/handlers/remote-schemas/resolvers/seedGraph/resolver.ts +++ b/packages/backend/src/handlers/remote-schemas/resolvers/seedGraph/resolver.ts @@ -1,5 +1,5 @@ import { seedGraphClient } from '../../../../lib/seedGraphClient'; -import { QueryResolvers } from '../../autogen/types'; +import { QueryResolvers, TokenBalances } from '../../autogen/types'; export const getTokenBalances: QueryResolvers['getTokenBalances'] = async ( _, @@ -10,5 +10,16 @@ export const getTokenBalances: QueryResolvers['getTokenBalances'] = async ( address: address.toLowerCase(), }); - return res.userToken; + return res.userToken as TokenBalances; +}; + +export const getTopPSeedHolders: QueryResolvers['getTopPSeedHolders'] = async ( + _, + { limit }, +) => { + const res = await seedGraphClient.GetTopPSeedHolders({ + limit: limit || 50, + }); + + return res.userTokens as Array; }; diff --git a/packages/backend/src/handlers/remote-schemas/schema.ts b/packages/backend/src/handlers/remote-schemas/schema.ts index f63ef772..13ef7e48 100644 --- a/packages/backend/src/handlers/remote-schemas/schema.ts +++ b/packages/backend/src/handlers/remote-schemas/schema.ts @@ -3,7 +3,10 @@ import { makeExecutableSchema } from 'graphql-tools'; import { getBrightIdStatus } from './resolvers/brightId/resolver'; import { getDaoHausMemberships } from './resolvers/daohaus/resolver'; import { getBoxProfile } from './resolvers/getBoxProfile/resolver'; -import { getTokenBalances } from './resolvers/seedGraph/resolver'; +import { + getTokenBalances, + getTopPSeedHolders, +} from './resolvers/seedGraph/resolver'; import { typeDefs } from './typeDefs'; import { uuid } from './types/uuid'; @@ -13,6 +16,7 @@ const resolvers = { getDaoHausMemberships, getBrightIdStatus, getTokenBalances, + getTopPSeedHolders, }, uuid, }; diff --git a/packages/backend/src/handlers/remote-schemas/typeDefs.ts b/packages/backend/src/handlers/remote-schemas/typeDefs.ts index 5c44a0e0..6aa3d38b 100644 --- a/packages/backend/src/handlers/remote-schemas/typeDefs.ts +++ b/packages/backend/src/handlers/remote-schemas/typeDefs.ts @@ -7,7 +7,8 @@ export const typeDefs = gql` getBoxProfile(address: String): BoxProfile getDaoHausMemberships(memberAddress: String): [Member!]! getBrightIdStatus(contextId: uuid): BrightIdStatus - getTokenBalances(address: String): UserToken + getTokenBalances(address: String): TokenBalances + getTopPSeedHolders(limit: Int): [TokenBalances!] } type BrightIdStatus { @@ -57,7 +58,7 @@ export const typeDefs = gql` kicked: Boolean } - type UserToken { + type TokenBalances { id: ID! seedBalance: String! pSeedBalance: String! diff --git a/schema.graphql b/schema.graphql index 6ee9baf2..4886cca7 100644 --- a/schema.graphql +++ b/schema.graphql @@ -3005,7 +3005,7 @@ type player { timezone: String """Remote relationship field""" - token_balances: UserToken + token_balances: TokenBalances total_xp: numeric updated_at: timestamptz username: String! @@ -4357,7 +4357,8 @@ type Query { getBoxProfile(address: String): BoxProfile getBrightIdStatus(contextId: uuid): BrightIdStatus getDaoHausMemberships(memberAddress: String): [Member!]! - getTokenBalances(address: String): UserToken + getTokenBalances(address: String): TokenBalances + getTopPSeedHolders(limit: Int): [TokenBalances!] } """query root""" @@ -4710,7 +4711,8 @@ type query_root { getBoxProfile(address: String): BoxProfile getBrightIdStatus(contextId: uuid): BrightIdStatus getDaoHausMemberships(memberAddress: String): [Member!]! - getTokenBalances(address: String): UserToken + getTokenBalances(address: String): TokenBalances + getTopPSeedHolders(limit: Int): [TokenBalances!] """ fetch data from the table: "guild" @@ -8139,6 +8141,12 @@ input timestamptz_comparison_exp { _nin: [timestamptz!] } +type TokenBalances { + id: ID! + pSeedBalance: String! + seedBalance: String! +} + type UpdateBoxProfileResponse { success: Boolean! updatedProfiles: [String!]! @@ -8154,12 +8162,6 @@ type UpdateQuestCompletionOutput { success: Boolean! } -type UserToken { - id: ID! - pSeedBalance: String! - seedBalance: String! -} - scalar uuid """