Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ENG-5747 feat(launchpad,graphql): get relic/protocol points on launchpad rewards page #1092

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
2 changes: 1 addition & 1 deletion apps/launchpad/app/lib/hooks/usePoints.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useQuery } from '@tanstack/react-query'

export function usePoints(accountId?: string) {
return useQuery({
queryKey: ['account-points', accountId?.toLowerCase()],
queryKey: ['get-points', accountId?.toLowerCase()],
queryFn: async () => {
if (!accountId) {
return null
Expand Down
20 changes: 20 additions & 0 deletions apps/launchpad/app/lib/hooks/useRelicPoints.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { useQuery } from '@tanstack/react-query'

export function useRelicPoints(address?: string) {
return useQuery({
queryKey: ['get-relic-points', address?.toLowerCase()],
queryFn: async () => {
if (!address) {
return null
}
const response = await fetch(
`/resources/get-relic-points?address=${address.toLowerCase()}`,
)
const data = await response.json()
return data.relic_points
},
enabled: !!address,
// This ensures we don't refetch on mount if we already have the data
staleTime: 30000, // Consider data fresh for 30 seconds
})
}
129 changes: 129 additions & 0 deletions apps/launchpad/app/lib/services/points.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
import { pointsClient } from '@lib/graphql/client'

export const GetRelicPointsDocument = `
query GetRelicPoints($address: String!) {
relic_points(where: {address: {_eq: $address}}) {
address
genesis_minter_points
snapshot_1_holder_points
snapshot_2_holder_points
total_relic_points
}
}
`

export interface GetRelicPointsQuery {
relic_points: Array<{
address: string
genesis_minter_points: number
snapshot_1_holder_points: number
snapshot_2_holder_points: number
total_relic_points: number
}>
}

export interface GetRelicPointsQueryVariables {
address: string
}

export interface RelicPoints {
totalPoints: number
genesisPoints: number
snapshot1Points: number
snapshot2Points: number
}

export async function fetchRelicPoints(address: string): Promise<RelicPoints> {
const data = await pointsClient.request<
GetRelicPointsQuery,
GetRelicPointsQueryVariables
>(GetRelicPointsDocument, {
address,
})

const points = data?.relic_points[0] ?? {
genesis_minter_points: 0,
snapshot_1_holder_points: 0,
snapshot_2_holder_points: 0,
total_relic_points: 0,
}

const result = {
totalPoints: points.total_relic_points,
genesisPoints: points.genesis_minter_points,
snapshot1Points: points.snapshot_1_holder_points,
snapshot2Points: points.snapshot_2_holder_points,
}

return result
}

export const GetPointsDocument = `
query GetPoints($address: String!) {
points(where: {account_id: {_eq: $address}}) {
account_id
social
portal_quests
referral
community
minigame1
}
}
`

export interface GetPointsQuery {
points: Array<{
account_id: string
social: number
portal_quests: number
referral: number
community: number
minigame1: number
}>
}

export interface GetPointsQueryVariables {
address: string
}

export interface Points {
social: number
portalQuests: number
referral: number
community: number
minigame: number
totalPoints: number
}

export async function fetchPoints(address: string): Promise<Points> {
const data = await pointsClient.request<
GetPointsQuery,
GetPointsQueryVariables
>(GetPointsDocument, {
address,
})

const points = data?.points[0] ?? {
social: 0,
portal_quests: 0,
referral: 0,
community: 0,
minigame1: 0,
}

const result = {
social: points.social,
portalQuests: points.portal_quests,
referral: points.referral,
community: points.community,
minigame: points.minigame1,
totalPoints:
points.social +
points.portal_quests +
points.referral +
points.community +
points.minigame1,
}

return result
}
115 changes: 0 additions & 115 deletions apps/launchpad/app/lib/services/relics.ts

This file was deleted.

Loading
Loading