62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
|
|
import { request } from './client';
|
||
|
|
import type { GuildSummary, User, UserSummary } from './types';
|
||
|
|
|
||
|
|
export interface UpdateProfileInput {
|
||
|
|
display_name?: string;
|
||
|
|
bio?: string;
|
||
|
|
status?: string;
|
||
|
|
custom_status?: string;
|
||
|
|
custom_status_emoji?: string;
|
||
|
|
locale?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface OnboardingInput {
|
||
|
|
display_name?: string;
|
||
|
|
bio?: string;
|
||
|
|
locale?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export const currentUserQueryKey = ['users', '@me'] as const;
|
||
|
|
export const myGuildsQueryKey = ['users', '@me', 'guilds'] as const;
|
||
|
|
|
||
|
|
export function userQueryKey(userId: string) {
|
||
|
|
return ['users', userId] as const;
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function fetchCurrentUser(signal?: AbortSignal): Promise<User> {
|
||
|
|
const payload = await request<{ user: User }>(
|
||
|
|
'/users/@me',
|
||
|
|
signal === undefined ? {} : { signal },
|
||
|
|
);
|
||
|
|
return payload.user;
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function updateProfile(input: UpdateProfileInput): Promise<User> {
|
||
|
|
const payload = await request<{ user: User }>('/users/@me', { method: 'PATCH', body: input });
|
||
|
|
return payload.user;
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function completeOnboarding(input: OnboardingInput): Promise<User> {
|
||
|
|
const payload = await request<{ user: User }>('/users/@me/onboarding/complete', {
|
||
|
|
method: 'POST',
|
||
|
|
body: input,
|
||
|
|
});
|
||
|
|
return payload.user;
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function fetchMyGuilds(signal?: AbortSignal): Promise<GuildSummary[]> {
|
||
|
|
const payload = await request<{ guilds: GuildSummary[] }>(
|
||
|
|
'/users/@me/guilds',
|
||
|
|
signal === undefined ? {} : { signal },
|
||
|
|
);
|
||
|
|
return payload.guilds;
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function fetchUser(userId: string, signal?: AbortSignal): Promise<UserSummary> {
|
||
|
|
const payload = await request<{ user: UserSummary }>(
|
||
|
|
`/users/${encodeURIComponent(userId)}`,
|
||
|
|
signal === undefined ? {} : { signal },
|
||
|
|
);
|
||
|
|
return payload.user;
|
||
|
|
}
|