From eea191c8e26cbd29e05a086de42a45ecc82045b0 Mon Sep 17 00:00:00 2001 From: Herman Snevajs Date: Fri, 12 Dec 2025 14:47:29 +0100 Subject: [PATCH 01/14] Add fullname to v2 GET collaborators --- server/mergin/sync/models.py | 2 ++ server/mergin/sync/public_api_v2.yaml | 3 +++ server/mergin/sync/public_api_v2_controller.py | 1 + server/mergin/sync/schemas.py | 1 + 4 files changed, 7 insertions(+) diff --git a/server/mergin/sync/models.py b/server/mergin/sync/models.py index 9574a69d..5c427775 100644 --- a/server/mergin/sync/models.py +++ b/server/mergin/sync/models.py @@ -304,6 +304,7 @@ def get_member(self, user_id: int) -> Optional[ProjectMember]: project_role=ProjectRole(member.role), workspace_role=self.workspace.get_user_role(member.user), role=ProjectPermissions.get_user_project_role(self, member.user), + fullname=member.user.profile.name(), ) def members_by_role(self, role: ProjectRole) -> List[int]: @@ -364,6 +365,7 @@ class ProjectMember: workspace_role: WorkspaceRole project_role: Optional[ProjectRole] role: ProjectRole + fullname: str @dataclass diff --git a/server/mergin/sync/public_api_v2.yaml b/server/mergin/sync/public_api_v2.yaml index bf3db007..9dfe7214 100644 --- a/server/mergin/sync/public_api_v2.yaml +++ b/server/mergin/sync/public_api_v2.yaml @@ -531,6 +531,9 @@ components: $ref: "#/components/schemas/ProjectRole" role: $ref: "#/components/schemas/Role" + fullname: + type: string + example: John Doe ProjectDetail: type: object required: diff --git a/server/mergin/sync/public_api_v2_controller.py b/server/mergin/sync/public_api_v2_controller.py index 217204c1..c5d55146 100644 --- a/server/mergin/sync/public_api_v2_controller.py +++ b/server/mergin/sync/public_api_v2_controller.py @@ -115,6 +115,7 @@ def get_project_collaborators(id): project_role=project_role, workspace_role=workspace_role, role=ProjectPermissions.get_user_project_role(project, user), + fullname=user.profile.name(), ) ) diff --git a/server/mergin/sync/schemas.py b/server/mergin/sync/schemas.py index 8d1df050..661cd55b 100644 --- a/server/mergin/sync/schemas.py +++ b/server/mergin/sync/schemas.py @@ -405,6 +405,7 @@ class ProjectMemberSchema(Schema): project_role = fields.Enum(enum=ProjectRole, by_value=True) workspace_role = fields.Enum(enum=WorkspaceRole, by_value=True) role = fields.Enum(enum=ProjectRole, by_value=True) + fullname = fields.String() class UploadChunkSchema(Schema): From 0f471489610148c5e8a6d08ec57e9fb53c0c7fbd Mon Sep 17 00:00:00 2001 From: Herman Snevajs Date: Fri, 12 Dec 2025 14:48:24 +0100 Subject: [PATCH 02/14] Introduce UserSummary component and adjust project collaborators --- .../components/ProjectMembersTable.vue | 37 ++++------------ .../project/components/UserSummary.vue | 44 +++++++++++++++++++ .../packages/lib/src/modules/project/types.ts | 2 +- 3 files changed, 54 insertions(+), 29 deletions(-) create mode 100644 web-app/packages/lib/src/modules/project/components/UserSummary.vue diff --git a/web-app/packages/lib/src/modules/project/components/ProjectMembersTable.vue b/web-app/packages/lib/src/modules/project/components/ProjectMembersTable.vue index e7e01062..c5dfafae 100644 --- a/web-app/packages/lib/src/modules/project/components/ProjectMembersTable.vue +++ b/web-app/packages/lib/src/modules/project/components/ProjectMembersTable.vue @@ -38,33 +38,18 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-MerginMaps-Commercial /> - - - - -
- -

- {{ - profile?.name - ? `${profile.name} (${user?.username})` - : user.username - }} -

-

+ + +

- - {{ user?.email }} -

-
-
+

+ {{ + profile?.name + ? `${profile.name} (${user?.username})` + : user.username + }} +

+

-

Last signed in
-
- {{ $filters.date(user?.last_signed_in) || '-' }} -
-
-
-
Registered
-
- {{ $filters.date(user?.registration_date) }} -
-
-
-
- - - - - - - - - + + + + + From 1ac849ff1498494fe421987ecdb636d9bdbc2162 Mon Sep 17 00:00:00 2001 From: Herman Snevajs Date: Wed, 14 Jan 2026 11:31:36 +0100 Subject: [PATCH 11/14] rename fullname to name 2 --- server/mergin/sync/models.py | 2 +- server/mergin/sync/public_api_v2.yaml | 2 +- server/mergin/sync/public_api_v2_controller.py | 2 +- server/mergin/sync/schemas.py | 2 +- web-app/packages/lib/src/common/components/UserSummary.vue | 6 +++--- .../src/modules/project/components/ProjectMembersTable.vue | 2 +- web-app/packages/lib/src/modules/project/types.ts | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/server/mergin/sync/models.py b/server/mergin/sync/models.py index b0820908..ce19d6d0 100644 --- a/server/mergin/sync/models.py +++ b/server/mergin/sync/models.py @@ -304,7 +304,7 @@ def get_member(self, user_id: int) -> Optional[ProjectMember]: project_role=ProjectRole(member.role), workspace_role=self.workspace.get_user_role(member.user), role=ProjectPermissions.get_user_project_role(self, member.user), - fullname=member.user.profile.name(), + name=member.user.profile.name(), ) def members_by_role(self, role: ProjectRole) -> List[int]: diff --git a/server/mergin/sync/public_api_v2.yaml b/server/mergin/sync/public_api_v2.yaml index 6e868805..fcce84d2 100644 --- a/server/mergin/sync/public_api_v2.yaml +++ b/server/mergin/sync/public_api_v2.yaml @@ -528,7 +528,7 @@ components: $ref: "#/components/schemas/ProjectRole" role: $ref: "#/components/schemas/Role" - fullname: + name: nullable: true type: string example: John Doe diff --git a/server/mergin/sync/public_api_v2_controller.py b/server/mergin/sync/public_api_v2_controller.py index ffd0d6fd..b6011746 100644 --- a/server/mergin/sync/public_api_v2_controller.py +++ b/server/mergin/sync/public_api_v2_controller.py @@ -114,7 +114,7 @@ def get_project_collaborators(id): project_role=project_role, workspace_role=workspace_role, role=ProjectPermissions.get_user_project_role(project, user), - fullname=user.profile.name(), + name=user.profile.name(), ) ) diff --git a/server/mergin/sync/schemas.py b/server/mergin/sync/schemas.py index 5ad41a9a..1dc6eb88 100644 --- a/server/mergin/sync/schemas.py +++ b/server/mergin/sync/schemas.py @@ -406,7 +406,7 @@ class ProjectMemberSchema(Schema): project_role = fields.Enum(enum=ProjectRole, by_value=True) workspace_role = fields.Enum(enum=WorkspaceRole, by_value=True) role = fields.Enum(enum=ProjectRole, by_value=True) - fullname = fields.String() + name = fields.String() class UploadChunkSchema(Schema): diff --git a/web-app/packages/lib/src/common/components/UserSummary.vue b/web-app/packages/lib/src/common/components/UserSummary.vue index f6eb0f9a..943fbe6b 100644 --- a/web-app/packages/lib/src/common/components/UserSummary.vue +++ b/web-app/packages/lib/src/common/components/UserSummary.vue @@ -1,7 +1,7 @@