Files
TheGame/packages/web/graphql/getPlayer.ts

61 lines
1.6 KiB
TypeScript

import {
GetPlayerForAddressQuery,
GetPlayerForAddressQueryVariables,
GetPlayerForUsernameQuery,
GetPlayerForUsernameQueryVariables,
Maybe,
Player,
} from './autogen/hasura-sdk';
import { client } from './client';
import { PlayerDaoMembershipFragment, PlayerFragment } from './fragments';
const usernameQuery = /* GraphQL */ `
query GetPlayerForUsername($username: String!) {
player(where: { profile: { username: { _ilike: $username } } }) {
...PlayerFragment
...PlayerDaoMembershipFragment
}
}
${PlayerFragment}
${PlayerDaoMembershipFragment}
`;
const addressQuery = /* GraphQL */ `
query GetPlayerForAddress($address: String!) {
player(where: { ethereumAddress: { _ilike: $address } }) {
...PlayerFragment
...PlayerDaoMembershipFragment
}
}
${PlayerFragment}
${PlayerDaoMembershipFragment}
`;
export const getPlayer = async (
username: string,
noCache?: boolean,
): Promise<Maybe<Player>> => {
let response;
if (/^0x[0-9a-f]{40}$/i.test(username)) {
response = await client
.query<GetPlayerForAddressQuery, GetPlayerForAddressQueryVariables>(
addressQuery,
{ address: username },
noCache ? { requestPolicy: 'network-only' } : undefined,
)
.toPromise();
} else {
response = await client
.query<GetPlayerForUsernameQuery, GetPlayerForUsernameQueryVariables>(
usernameQuery,
{ username },
)
.toPromise();
}
const { data, error } = response;
if (error) throw error;
const [player] = data?.player ?? [];
return (player as Player) ?? null;
};