From 046dd6d15010b169f02bb7f341c645ed23f42b6e Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Fri, 24 May 2024 15:59:20 +0100 Subject: [PATCH] fix space member count * fix space added_by_id * rename user role change endpoints --- .../features/space/services/space-service.ts | 2 +- .../workspace/services/workspace-service.ts | 2 +- .../space/services/space-member.service.ts | 6 ++--- .../server/src/core/space/space.controller.ts | 14 +++------- .../controllers/workspace.controller.ts | 2 +- .../src/database/repos/space/space.repo.ts | 26 ++++++++++++------- 6 files changed, 25 insertions(+), 27 deletions(-) diff --git a/apps/client/src/features/space/services/space-service.ts b/apps/client/src/features/space/services/space-service.ts index 0d543e9..198b66e 100644 --- a/apps/client/src/features/space/services/space-service.ts +++ b/apps/client/src/features/space/services/space-service.ts @@ -43,5 +43,5 @@ export async function removeSpaceMember( export async function changeMemberRole( data: IChangeSpaceMemberRole, ): Promise { - await api.post("/spaces/members/role", data); + await api.post("/spaces/members/change-role", data); } diff --git a/apps/client/src/features/workspace/services/workspace-service.ts b/apps/client/src/features/workspace/services/workspace-service.ts index 4b96209..956a91e 100644 --- a/apps/client/src/features/workspace/services/workspace-service.ts +++ b/apps/client/src/features/workspace/services/workspace-service.ts @@ -36,7 +36,7 @@ export async function changeMemberRole(data: { userId: string; role: string; }): Promise { - await api.post("/workspace/members/role", data); + await api.post("/workspace/members/change-role", data); } export async function getPendingInvitations( diff --git a/apps/server/src/core/space/services/space-member.service.ts b/apps/server/src/core/space/services/space-member.service.ts index 8a7620f..08ac3de 100644 --- a/apps/server/src/core/space/services/space-member.service.ts +++ b/apps/server/src/core/space/services/space-member.service.ts @@ -147,7 +147,7 @@ export class SpaceMemberService { spaceId: dto.spaceId, userId: user.id, role: dto.role, - creatorId: authUser.id, + addedById: authUser.id, }); } @@ -157,7 +157,7 @@ export class SpaceMemberService { spaceId: dto.spaceId, groupId: group.id, role: dto.role, - creatorId: authUser.id, + addedById: authUser.id, }); } @@ -172,7 +172,6 @@ export class SpaceMemberService { async removeMemberFromSpace( dto: RemoveSpaceMemberDto, - authUser: User, // Todo: permissions check workspaceId: string, ): Promise { const space = await this.spaceRepo.findById(dto.spaceId, workspaceId); @@ -218,7 +217,6 @@ export class SpaceMemberService { async updateSpaceMemberRole( dto: UpdateSpaceMemberRoleDto, - authUser: User, workspaceId: string, ): Promise { const space = await this.spaceRepo.findById(dto.spaceId, workspaceId); diff --git a/apps/server/src/core/space/space.controller.ts b/apps/server/src/core/space/space.controller.ts index 371cda6..ab2f9e5 100644 --- a/apps/server/src/core/space/space.controller.ts +++ b/apps/server/src/core/space/space.controller.ts @@ -147,15 +147,11 @@ export class SpaceController { throw new ForbiddenException(); } - return this.spaceMemberService.removeMemberFromSpace( - dto, - user, - workspace.id, - ); + return this.spaceMemberService.removeMemberFromSpace(dto, workspace.id); } @HttpCode(HttpStatus.OK) - @Post('members/role') + @Post('members/change-role') async updateSpaceMemberRole( @Body() dto: UpdateSpaceMemberRoleDto, @AuthUser() user: User, @@ -168,11 +164,7 @@ export class SpaceController { throw new ForbiddenException(); } - return this.spaceMemberService.updateSpaceMemberRole( - dto, - user, - workspace.id, - ); + return this.spaceMemberService.updateSpaceMemberRole(dto, workspace.id); } validateIds(dto: RemoveSpaceMemberDto | UpdateSpaceMemberRoleDto) { diff --git a/apps/server/src/core/workspace/controllers/workspace.controller.ts b/apps/server/src/core/workspace/controllers/workspace.controller.ts index 61aa71d..b5d55c6 100644 --- a/apps/server/src/core/workspace/controllers/workspace.controller.ts +++ b/apps/server/src/core/workspace/controllers/workspace.controller.ts @@ -91,7 +91,7 @@ export class WorkspaceController { ability.can(Action.Manage, 'WorkspaceUser'), ) @HttpCode(HttpStatus.OK) - @Post('members/role') + @Post('members/change-role') async updateWorkspaceMemberRole( @Body() workspaceUserRoleDto: UpdateWorkspaceUserRoleDto, @AuthUser() authUser: User, diff --git a/apps/server/src/database/repos/space/space.repo.ts b/apps/server/src/database/repos/space/space.repo.ts index d144a9c..ed7d3d1 100644 --- a/apps/server/src/database/repos/space/space.repo.ts +++ b/apps/server/src/database/repos/space/space.repo.ts @@ -120,17 +120,25 @@ export class SpaceRepo { } withMemberCount(eb: ExpressionBuilder) { - return eb + const subquery = eb .selectFrom('spaceMembers') - .innerJoin('groups', 'groups.id', 'spaceMembers.groupId') - .innerJoin('groupUsers', 'groupUsers.groupId', 'groups.id') - .select((eb) => - eb.fn - .count(sql`concat(space_members.user_id, group_users.user_id)`) - .distinct() - .as('count'), - ) + .select('spaceMembers.userId') + .where('spaceMembers.userId', 'is not', null) .whereRef('spaceMembers.spaceId', '=', 'spaces.id') + .union( + eb + .selectFrom('spaceMembers') + .where('spaceMembers.groupId', 'is not', null) + .leftJoin('groups', 'groups.id', 'spaceMembers.groupId') + .leftJoin('groupUsers', 'groupUsers.groupId', 'groups.id') + .select('groupUsers.userId') + .whereRef('spaceMembers.spaceId', '=', 'spaces.id'), + ) + .as('userId'); + + return eb + .selectFrom(subquery) + .select((eb) => eb.fn.count('userId').as('count')) .as('memberCount'); }