Files
docmost/apps/server/src/core/group/group.controller.ts
Philipinho 51b9808382 Implement Space membership by group
* Add all users to default group
* Fixes and updates
2024-03-20 01:26:03 +00:00

143 lines
4.4 KiB
TypeScript

import {
Controller,
Post,
Body,
UseGuards,
HttpCode,
HttpStatus,
} from '@nestjs/common';
import { GroupService } from './services/group.service';
import { CreateGroupDto } from './dto/create-group.dto';
import { AuthUser } from '../../decorators/auth-user.decorator';
import { AuthWorkspace } from '../../decorators/auth-workspace.decorator';
import { User } from '../user/entities/user.entity';
import { Workspace } from '../workspace/entities/workspace.entity';
import { GroupUserService } from './services/group-user.service';
import { GroupIdDto } from './dto/group-id.dto';
import { PaginationOptions } from '../../helpers/pagination/pagination-options';
import { AddGroupUserDto } from './dto/add-group-user.dto';
import { RemoveGroupUserDto } from './dto/remove-group-user.dto';
import { UpdateGroupDto } from './dto/update-group.dto';
import { Action } from '../casl/ability.action';
import { Group } from './entities/group.entity';
import { GroupUser } from './entities/group-user.entity';
import { PoliciesGuard } from '../casl/guards/policies.guard';
import { CheckPolicies } from '../casl/decorators/policies.decorator';
import { AppAbility } from '../casl/abilities/casl-ability.factory';
import { JwtAuthGuard } from '../../guards/jwt-auth.guard';
@UseGuards(JwtAuthGuard)
@Controller('groups')
export class GroupController {
constructor(
private readonly groupService: GroupService,
private readonly groupUserService: GroupUserService,
) {}
@HttpCode(HttpStatus.OK)
@Post('/')
getWorkspaceGroups(
@Body() pagination: PaginationOptions,
@AuthUser() user: User,
@AuthWorkspace() workspace: Workspace,
) {
return this.groupService.getWorkspaceGroups(workspace.id, pagination);
}
@UseGuards(PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can(Action.Read, Group))
@HttpCode(HttpStatus.OK)
@Post('/info')
getGroup(
@Body() groupIdDto: GroupIdDto,
@AuthUser() user: User,
@AuthWorkspace() workspace: Workspace,
) {
return this.groupService.getGroupInfo(groupIdDto.groupId, workspace.id);
}
@UseGuards(PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can(Action.Manage, Group))
@HttpCode(HttpStatus.OK)
@Post('create')
createGroup(
@Body() createGroupDto: CreateGroupDto,
@AuthUser() user: User,
@AuthWorkspace() workspace: Workspace,
) {
return this.groupService.createGroup(user, workspace.id, createGroupDto);
}
@UseGuards(PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can(Action.Manage, Group))
@HttpCode(HttpStatus.OK)
@Post('update')
updateGroup(
@Body() updateGroupDto: UpdateGroupDto,
@AuthUser() user: User,
@AuthWorkspace() workspace: Workspace,
) {
return this.groupService.updateGroup(workspace.id, updateGroupDto);
}
@UseGuards(PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can(Action.Read, GroupUser))
@HttpCode(HttpStatus.OK)
@Post('members')
getGroupMembers(
@Body() groupIdDto: GroupIdDto,
@Body() pagination: PaginationOptions,
@AuthWorkspace() workspace: Workspace,
) {
return this.groupUserService.getGroupUsers(
groupIdDto.groupId,
workspace.id,
pagination,
);
}
@UseGuards(PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can(Action.Manage, GroupUser))
@HttpCode(HttpStatus.OK)
@Post('members/add')
addGroupMember(
@Body() addGroupUserDto: AddGroupUserDto,
@AuthUser() user: User,
@AuthWorkspace() workspace: Workspace,
) {
return this.groupUserService.addUserToGroup(
addGroupUserDto.userId,
addGroupUserDto.groupId,
workspace.id,
);
}
@UseGuards(PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can(Action.Manage, GroupUser))
@HttpCode(HttpStatus.OK)
@Post('members/remove')
removeGroupMember(
@Body() removeGroupUserDto: RemoveGroupUserDto,
//@AuthUser() user: User,
@AuthWorkspace() workspace: Workspace,
) {
return this.groupUserService.removeUserFromGroup(
removeGroupUserDto.userId,
removeGroupUserDto.groupId,
workspace.id,
);
}
@UseGuards(PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can(Action.Manage, Group))
@HttpCode(HttpStatus.OK)
@Post('delete')
deleteGroup(
@Body() groupIdDto: GroupIdDto,
@AuthUser() user: User,
@AuthWorkspace() workspace: Workspace,
) {
return this.groupService.deleteGroup(groupIdDto.groupId, workspace.id);
}
}