From 6dadddefeb5e968e936ea90f802132d4fd2e3eaa Mon Sep 17 00:00:00 2001 From: "marcel.kocisek" Date: Fri, 20 Sep 2024 16:42:04 +0200 Subject: [PATCH 1/2] Added worksapce id to paginated endpoint --- server/mergin/sync/schemas.py | 7 +++++++ server/mergin/sync/workspace.py | 4 +++- .../admin-app/src/modules/user/views/LoginView.vue | 1 - web-app/packages/admin-app/src/router.ts | 7 +------ .../src/modules/admin/components/AdminProjectsTable.vue | 4 ++-- web-app/packages/admin-lib/src/modules/admin/types.ts | 3 ++- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/server/mergin/sync/schemas.py b/server/mergin/sync/schemas.py index 019fdacf..0be7e659 100644 --- a/server/mergin/sync/schemas.py +++ b/server/mergin/sync/schemas.py @@ -294,6 +294,7 @@ class AdminProjectSchema(ma.SQLAlchemyAutoSchema): id = fields.UUID(attribute="Project.id") name = fields.Str(attribute="Project.name") workspace = fields.Method("_workspace_name") + workspace_id = fields.Method("_workspace_id") version = fields.Function( lambda obj: ProjectVersion.to_v_name(obj.Project.latest_version) ) @@ -316,6 +317,12 @@ def _workspace_name(self, obj): name = obj.Project.workspace.name return name + def _workspace_id(self, obj): + id = getattr(obj, "workspace_id", None) + if not id: + id = obj.Project.workspace.id + return id + class UserWorkspaceSchema(ma.SQLAlchemyAutoSchema): id = fields.Integer() diff --git a/server/mergin/sync/workspace.py b/server/mergin/sync/workspace.py index a678524c..ad43f459 100644 --- a/server/mergin/sync/workspace.py +++ b/server/mergin/sync/workspace.py @@ -251,7 +251,9 @@ def workspace_count(): def projects_query(self, like: str = None): ws = self.factory_method() query = db.session.query( - Project, literal(ws.name).label("workspace_name") + Project, + literal(ws.name).label("workspace_name"), + literal(ws.id).label("workspace_id"), ).filter(Project.storage_params.isnot(None)) if like: diff --git a/web-app/packages/admin-app/src/modules/user/views/LoginView.vue b/web-app/packages/admin-app/src/modules/user/views/LoginView.vue index f1fb63b1..81e7000b 100644 --- a/web-app/packages/admin-app/src/modules/user/views/LoginView.vue +++ b/web-app/packages/admin-app/src/modules/user/views/LoginView.vue @@ -14,7 +14,6 @@ import { LoginViewTemplate, useUserStore } from '@mergin/lib' import { mapActions } from 'pinia' import { defineComponent } from 'vue' - export default defineComponent({ name: 'LoginView', components: { diff --git a/web-app/packages/admin-app/src/router.ts b/web-app/packages/admin-app/src/router.ts index 32035f5f..de31c932 100644 --- a/web-app/packages/admin-app/src/router.ts +++ b/web-app/packages/admin-app/src/router.ts @@ -8,7 +8,6 @@ import { SettingsView, ProjectsView, ProjectView, - // useAdminStore AdminRoutes } from '@mergin/admin-lib' import { @@ -48,11 +47,7 @@ export const createRouter = (pinia: Pinia) => { { path: '/', name: 'admin', - component: NotFoundView, - beforeEnter: (to, from, next) => { - next('/accounts') - }, - props: true + redirect: '/accounts' }, { path: '/accounts', diff --git a/web-app/packages/admin-lib/src/modules/admin/components/AdminProjectsTable.vue b/web-app/packages/admin-lib/src/modules/admin/components/AdminProjectsTable.vue index 82bd31ea..c8df7db1 100644 --- a/web-app/packages/admin-lib/src/modules/admin/components/AdminProjectsTable.vue +++ b/web-app/packages/admin-lib/src/modules/admin/components/AdminProjectsTable.vue @@ -58,8 +58,8 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-MerginMaps-Commercial {{ slotProps.data.workspace }} diff --git a/web-app/packages/admin-lib/src/modules/admin/types.ts b/web-app/packages/admin-lib/src/modules/admin/types.ts index 2c1c4d99..ed31eddc 100644 --- a/web-app/packages/admin-lib/src/modules/admin/types.ts +++ b/web-app/packages/admin-lib/src/modules/admin/types.ts @@ -54,7 +54,8 @@ export interface AdminProjectListItem extends Project { disk_usage: number id: string name: string - namespace: string + workspace: string + workspace_id: number updated: string version: string removed_at: string From 73e7e0638713114f7d54e5ee9fab0675d2f26208 Mon Sep 17 00:00:00 2001 From: "marcel.kocisek" Date: Mon, 23 Sep 2024 10:45:37 +0200 Subject: [PATCH 2/2] Use workspace_id from db directly --- server/mergin/sync/schemas.py | 8 +------- server/mergin/sync/workspace.py | 1 - 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/server/mergin/sync/schemas.py b/server/mergin/sync/schemas.py index 0be7e659..081b2ab7 100644 --- a/server/mergin/sync/schemas.py +++ b/server/mergin/sync/schemas.py @@ -294,7 +294,7 @@ class AdminProjectSchema(ma.SQLAlchemyAutoSchema): id = fields.UUID(attribute="Project.id") name = fields.Str(attribute="Project.name") workspace = fields.Method("_workspace_name") - workspace_id = fields.Method("_workspace_id") + workspace_id = fields.Int(attribute="Project.workspace_id") version = fields.Function( lambda obj: ProjectVersion.to_v_name(obj.Project.latest_version) ) @@ -317,12 +317,6 @@ def _workspace_name(self, obj): name = obj.Project.workspace.name return name - def _workspace_id(self, obj): - id = getattr(obj, "workspace_id", None) - if not id: - id = obj.Project.workspace.id - return id - class UserWorkspaceSchema(ma.SQLAlchemyAutoSchema): id = fields.Integer() diff --git a/server/mergin/sync/workspace.py b/server/mergin/sync/workspace.py index ad43f459..65203849 100644 --- a/server/mergin/sync/workspace.py +++ b/server/mergin/sync/workspace.py @@ -253,7 +253,6 @@ def projects_query(self, like: str = None): query = db.session.query( Project, literal(ws.name).label("workspace_name"), - literal(ws.id).label("workspace_id"), ).filter(Project.storage_params.isnot(None)) if like: