diff --git a/apps/client/src/features/space/services/space-service.ts b/apps/client/src/features/space/services/space-service.ts index 0d543e9e..198b66ea 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 4b962091..956a91eb 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 8a7620fa..08ac3ded 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 371cda68..ab2f9e58 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 61aa71d3..b5d55c68 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 d144a9cc..ed7d3d12 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'); }