From 115b2937e5849686042374906ba3b4d35c11ed33 Mon Sep 17 00:00:00 2001 From: anton Date: Thu, 17 Oct 2024 17:47:50 +0200 Subject: [PATCH] Export/Import database in settings --- src/router/index.ts | 14 ++++++ src/stores/admin/database.ts | 42 ++++++++++++++++ src/stores/admin/navigation.ts | 3 ++ src/types/permissionTypes.ts | 6 ++- src/views/admin/settings/Database.vue | 70 +++++++++++++++++++++++++++ 5 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 src/stores/admin/database.ts create mode 100644 src/views/admin/settings/Database.vue diff --git a/src/router/index.ts b/src/router/index.ts index 25dbd9d..55f7da6 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -286,6 +286,20 @@ const router = createRouter({ }, ], }, + { + path: "database", + name: "admin-settings-database", + component: () => import("@/views/RouterView.vue"), + meta: { type: "read", section: "settings", module: "database" }, + beforeEnter: [abilityAndNavUpdate], + children: [ + { + path: "", + name: "admin-settings-database-status", + component: () => import("@/views/admin/settings/Database.vue"), + }, + ], + }, ], }, { diff --git a/src/stores/admin/database.ts b/src/stores/admin/database.ts new file mode 100644 index 0000000..6f84045 --- /dev/null +++ b/src/stores/admin/database.ts @@ -0,0 +1,42 @@ +import { defineStore } from "pinia"; +import { http } from "@/serverCom"; +import type { AxiosResponse } from "axios"; + +export const useDatabaseStore = defineStore("database", { + state: () => { + return { + data: {} as any, + status: "idle" as "idle" | "working" | "success" | "failed", + failureReason: '' as string, + ex: {} as Error, + }; + }, + actions: { + async import() { + this.status = "working"; + http + .post("/admin/database") + .then((result) => { + this.data = result.data; + this.status = "success"; + }) + .catch((err) => { + this.status = "failed"; + }); + }, + async export(secret: string) { + try { + this.status = "working"; + const postData = {secret: secret}; + const response: AxiosResponse = await http.post("/admin/database", postData); + this.data = response.data; + this.status = "success"; + } catch (ex) { + this.status = "failed"; + this.failureReason = (ex as Error).message; + this.ex = (ex as Error); + throw ex; + } + }, + }, +}); diff --git a/src/stores/admin/navigation.ts b/src/stores/admin/navigation.ts index a63719e..6040087 100644 --- a/src/stores/admin/navigation.ts +++ b/src/stores/admin/navigation.ts @@ -108,6 +108,9 @@ export const useNavigationStore = defineStore("navigation", { ...(abilityStore.can("read", "settings", "membership_status") ? [{ key: "membership_status", title: "Mitgliedsstatus" }] : []), + ...(abilityStore.can("read", "settings", "database") + ? [{ key: "database", title: "Datenbank" }] + : []), ], }, user: { diff --git a/src/types/permissionTypes.ts b/src/types/permissionTypes.ts index 3bd54c8..a8da5a9 100644 --- a/src/types/permissionTypes.ts +++ b/src/types/permissionTypes.ts @@ -11,7 +11,8 @@ export type PermissionModule = | "communication" | "membership_status" | "user" - | "role"; + | "role" + | "database"; export type PermissionType = "read" | "create" | "update" | "delete"; @@ -47,10 +48,11 @@ export const permissionModules: Array = [ "membership_status", "user", "role", + "database", ]; export const permissionTypes: Array = ["read", "create", "update", "delete"]; export const sectionsAndModules: SectionsAndModulesObject = { club: ["member", "calendar", "newsletter", "protocoll"], - settings: ["qualification", "award", "executive_position", "communication", "membership_status"], + settings: ["qualification", "award", "executive_position", "communication", "membership_status", "database"], user: ["user", "role"], }; diff --git a/src/views/admin/settings/Database.vue b/src/views/admin/settings/Database.vue new file mode 100644 index 0000000..220f244 --- /dev/null +++ b/src/views/admin/settings/Database.vue @@ -0,0 +1,70 @@ + + + + +