import type { ApiResponse } from '~/shared/types/api'; import type { AdminWarrenData, UserWarren } from '~/shared/types/warrens'; import { getApiHeaders } from '..'; import type { AdminResources, AuthUserWithWarrens } from '~/shared/types/admin'; import type { AuthUser } from '~/shared/types/auth'; export async function fetchAllAdminResources(): Promise< | { success: true; data: AdminResources; } | { success: false } > { const { data } = await useFetch< ApiResponse<{ users: AuthUser[]; userWarrens: UserWarren[]; warrens: AdminWarrenData[]; }> >(getApiUrl('admin/all'), { method: 'GET', headers: getApiHeaders(), responseType: 'json', deep: false, }); if (data.value == null) { return { success: false, }; } const users: Record = data.value.data.users .map((u) => ({ ...u, warrens: [], })) .reduce((acc, u) => ({ ...acc, [u.id]: u }), {}); const warrens: Record = {}; for (const warren of data.value.data.warrens) { warrens[warren.id] = warren; } for (const userWarren of data.value.data.userWarrens) { users[userWarren.userId].warrens.push(userWarren); } return { success: true, data: { users: Object.values(users), warrens, }, }; }