mirror of
https://github.com/appwrite/console.git
synced 2026-06-06 19:27:48 +00:00
Merge pull request #1729 from appwrite/fix-backup-calls
Reduce calls to Backups endpoints
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
import { derived, writable } from 'svelte/store';
|
||||
import { derived, get, writable } from 'svelte/store';
|
||||
import { page } from '$app/stores';
|
||||
import { type Models, Query } from '@appwrite.io/console';
|
||||
import { sdk } from '$lib/stores/sdk';
|
||||
import { headerAlert } from '$lib/stores/headerAlert';
|
||||
import BackupDatabase from '$lib/components/backupDatabaseAlert.svelte';
|
||||
import { shouldShowNotification } from '$lib/helpers/notifications';
|
||||
import { isCloud } from '$lib/system';
|
||||
import { currentPlan } from '$lib/stores/organization';
|
||||
|
||||
export const database = derived(page, ($page) => $page.data?.database as Models.Database);
|
||||
|
||||
@@ -17,16 +19,19 @@ export async function checkForDatabaseBackupPolicies(database: Models.Database)
|
||||
if (!shouldShowNotification(backupsBannerId)) return;
|
||||
|
||||
let total = 0;
|
||||
const backupsEnabled = get(currentPlan)?.backupsEnabled ?? true;
|
||||
|
||||
try {
|
||||
const policies = await sdk.forProject.backups.listPolicies([
|
||||
Query.limit(1),
|
||||
Query.equal('resourceId', database.$id)
|
||||
]);
|
||||
if (isCloud && backupsEnabled) {
|
||||
try {
|
||||
const policies = await sdk.forProject.backups.listPolicies([
|
||||
Query.limit(1),
|
||||
Query.equal('resourceId', database.$id)
|
||||
]);
|
||||
|
||||
total = policies.total;
|
||||
} catch (e) {
|
||||
// ignore, backups not allowed on free plan error.
|
||||
total = policies.total;
|
||||
} catch (e) {
|
||||
// ignore, backups not allowed on free plan error.
|
||||
}
|
||||
}
|
||||
|
||||
showPolicyAlert.set(total <= 0);
|
||||
|
||||
@@ -5,8 +5,10 @@ import { type Models, Query } from '@appwrite.io/console';
|
||||
import { timeFromNow } from '$lib/helpers/date';
|
||||
import type { PageLoad } from './$types';
|
||||
import type { BackupPolicy } from '$lib/sdk/backups';
|
||||
import { isCloud } from '$lib/system';
|
||||
import type { Plan } from '$lib/sdk/billing';
|
||||
|
||||
export const load: PageLoad = async ({ url, route, depends }) => {
|
||||
export const load: PageLoad = async ({ url, route, depends, parent }) => {
|
||||
depends(Dependencies.DATABASES);
|
||||
|
||||
const page = getPage(url);
|
||||
@@ -14,7 +16,14 @@ export const load: PageLoad = async ({ url, route, depends }) => {
|
||||
const view = getView(url, route, View.Grid);
|
||||
const offset = pageToOffset(page, limit);
|
||||
|
||||
const { databases, policies, lastBackups } = await fetchDatabasesAndBackups(limit, offset);
|
||||
// already loaded by parent.
|
||||
const { currentPlan } = await parent();
|
||||
|
||||
const { databases, policies, lastBackups } = await fetchDatabasesAndBackups(
|
||||
limit,
|
||||
offset,
|
||||
currentPlan
|
||||
);
|
||||
|
||||
return {
|
||||
offset,
|
||||
@@ -27,17 +36,23 @@ export const load: PageLoad = async ({ url, route, depends }) => {
|
||||
};
|
||||
|
||||
// TODO: @itznotabug we should improve this!
|
||||
async function fetchDatabasesAndBackups(limit: number, offset: number) {
|
||||
async function fetchDatabasesAndBackups(limit: number, offset: number, currentPlan?: Plan) {
|
||||
const backupsEnabled = currentPlan?.backupsEnabled ?? true;
|
||||
|
||||
const databases = await sdk.forProject.databases.list([
|
||||
Query.limit(limit),
|
||||
Query.offset(offset),
|
||||
Query.orderDesc('$createdAt')
|
||||
]);
|
||||
|
||||
const [policies, lastBackups] = await Promise.all([
|
||||
await fetchPolicies(databases),
|
||||
await fetchLastBackups(databases)
|
||||
]);
|
||||
let lastBackups: Record<string, string>, policies: Record<string, BackupPolicy[]>;
|
||||
|
||||
if (isCloud && backupsEnabled) {
|
||||
[policies, lastBackups] = await Promise.all([
|
||||
fetchPolicies(databases),
|
||||
fetchLastBackups(databases)
|
||||
]);
|
||||
}
|
||||
|
||||
return { databases, policies, lastBackups };
|
||||
}
|
||||
|
||||
+25
-18
@@ -3,8 +3,9 @@ import { CARD_LIMIT, Dependencies } from '$lib/constants';
|
||||
import { sdk } from '$lib/stores/sdk';
|
||||
import { Query } from '@appwrite.io/console';
|
||||
import type { BackupArchive, BackupArchiveList, BackupPolicyList } from '$lib/sdk/backups';
|
||||
import { isCloud } from '$lib/system';
|
||||
|
||||
export const load = async ({ params, url, route, depends }) => {
|
||||
export const load = async ({ params, url, route, depends, parent }) => {
|
||||
depends(Dependencies.BACKUPS);
|
||||
const page = getPage(url);
|
||||
const limit = getLimit(url, route, CARD_LIMIT);
|
||||
@@ -14,24 +15,30 @@ export const load = async ({ params, url, route, depends }) => {
|
||||
let backups: BackupArchiveList = { total: 0, archives: [] };
|
||||
let policies: BackupPolicyList = { total: 0, policies: [] };
|
||||
|
||||
try {
|
||||
[backups, policies] = await Promise.all([
|
||||
sdk.forProject.backups.listArchives([
|
||||
Query.limit(limit),
|
||||
Query.offset(offset),
|
||||
Query.orderDesc('$createdAt'),
|
||||
Query.equal('resourceType', 'database'),
|
||||
Query.equal('resourceId', params.database)
|
||||
]),
|
||||
// already loaded by parent.
|
||||
const { currentPlan } = await parent();
|
||||
const backupsEnabled = currentPlan?.backupsEnabled ?? true;
|
||||
|
||||
sdk.forProject.backups.listPolicies([
|
||||
Query.orderDesc('$createdAt'),
|
||||
Query.equal('resourceType', 'database'),
|
||||
Query.equal('resourceId', params.database)
|
||||
])
|
||||
]);
|
||||
} catch (e) {
|
||||
// ignore
|
||||
if (isCloud && backupsEnabled) {
|
||||
try {
|
||||
[backups, policies] = await Promise.all([
|
||||
sdk.forProject.backups.listArchives([
|
||||
Query.limit(limit),
|
||||
Query.offset(offset),
|
||||
Query.orderDesc('$createdAt'),
|
||||
Query.equal('resourceType', 'database'),
|
||||
Query.equal('resourceId', params.database)
|
||||
]),
|
||||
|
||||
sdk.forProject.backups.listPolicies([
|
||||
Query.orderDesc('$createdAt'),
|
||||
Query.equal('resourceType', 'database'),
|
||||
Query.equal('resourceId', params.database)
|
||||
])
|
||||
]);
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
|
||||
const archivesByPolicy = groupArchivesByPolicy(backups.archives);
|
||||
|
||||
Reference in New Issue
Block a user