From 2f6ba45084bbc41666a6424a504cccb93c979e95 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Thu, 17 Nov 2022 22:50:26 +0530 Subject: [PATCH] feat: add support foor db pools --- src/lib/stores/project.ts | 65 +++++++++++++++++++ src/lib/stores/sdk.ts | 3 + .../project-[project]/overview/+layout.svelte | 4 +- .../project-[project]/overview/store.ts | 9 +-- 4 files changed, 75 insertions(+), 6 deletions(-) create mode 100644 src/lib/stores/project.ts diff --git a/src/lib/stores/project.ts b/src/lib/stores/project.ts new file mode 100644 index 0000000000..54c3b51297 --- /dev/null +++ b/src/lib/stores/project.ts @@ -0,0 +1,65 @@ +import type { Client, Models } from "@aw-labs/appwrite-console"; + +type Payload = { + [key: string]: any; +} + +class Service { + static CHUNK_SIZE = 5*1024*1024; // 5MB + + client: Client; + + constructor(client: Client) { + this.client = client; + } + + static flatten(data: Payload, prefix = ''): Payload { + let output: Payload = {}; + + for (const key in data) { + let value = data[key]; + let finalKey = prefix ? `${prefix}[${key}]` : key; + + if (Array.isArray(value)) { + output = Object.assign(output, this.flatten(value, finalKey)); + } + else { + output[finalKey] = value; + } + } + + return output; + } +} + +export class Project extends Service { + constructor(client: Client) + { + super(client); + } + + /** + * Get usage stats for a project + * + * + * @param {string} range + * @throws {AppwriteException} + * @returns {Promise} + */ + async getUsage(range?: string): Promise { + let path = '/project/usage'; + let payload: Payload = {}; + + console.log("Getting usage") + console.log(range) + + if (typeof range !== 'undefined') { + payload['range'] = range; + } + + const uri = new URL(this.client.config.endpoint + path); + return await this.client.call('get', uri, { + 'content-type': 'application/json', + }, payload); + } +} \ No newline at end of file diff --git a/src/lib/stores/sdk.ts b/src/lib/stores/sdk.ts index cffc23deca..d4b322aba2 100644 --- a/src/lib/stores/sdk.ts +++ b/src/lib/stores/sdk.ts @@ -12,6 +12,8 @@ import { Users } from '@aw-labs/appwrite-console'; +import { Project } from './project'; + const endpoint = import.meta.env.VITE_APPWRITE_ENDPOINT?.toString() ?? `${window?.location?.origin}/v1`; const clientConsole = new Client(); @@ -42,6 +44,7 @@ const sdkForProject = { functions: new Functions(clientProject), health: new Health(clientProject), locale: new Locale(clientProject), + project: new Project(clientProject), projects: new Projects(clientProject), storage: new Storage(clientProject), teams: new Teams(clientProject), diff --git a/src/routes/console/project-[project]/overview/+layout.svelte b/src/routes/console/project-[project]/overview/+layout.svelte index fbed69cfbd..5f5d31ec18 100644 --- a/src/routes/console/project-[project]/overview/+layout.svelte +++ b/src/routes/console/project-[project]/overview/+layout.svelte @@ -42,7 +42,7 @@ afterNavigate(handle); async function handle() { - const promise = usage.load(projectId, period); + const promise = usage.load(period); if ($usage) { await promise; @@ -51,7 +51,7 @@ function changePeriod(newPeriod: UsagePeriods) { period = newPeriod; - usage.load(projectId, period); + usage.load(period); } diff --git a/src/routes/console/project-[project]/overview/store.ts b/src/routes/console/project-[project]/overview/store.ts index 17c8ad4a17..9534fce807 100644 --- a/src/routes/console/project-[project]/overview/store.ts +++ b/src/routes/console/project-[project]/overview/store.ts @@ -1,16 +1,17 @@ -import { sdkForConsole } from '$lib/stores/sdk'; +import { sdkForProject } from '$lib/stores/sdk'; import { cachedStore } from '$lib/helpers/cache'; import type { Models } from '@aw-labs/appwrite-console'; export const usage = cachedStore< Models.UsageProject, { - load: (projectId: string, range: string) => Promise; + load: (range: string) => Promise; } >('projectUsage', function ({ set }) { return { - load: async (projectId, range) => { - const usages = await sdkForConsole.projects.getUsage(projectId, range); + load: async (range) => { + const usages = await sdkForProject.project.getUsage(range); + console.log(usages) set(usages); } };