ToolJet/server/src/controllers/organization_users.controller.ts
vjaris42 980328e063
Revamp users table and edit organization users drawer (#8329)
* setup user tables and edit user drawer

* fix states on user edit and ui fixes

* fixes

* fix: user update

* remove: disable editing of full name while editing user

* bug fixes

* bug fixes
2024-01-19 16:53:40 +05:30

87 lines
3.2 KiB
TypeScript

import {
Controller,
Param,
Post,
UseGuards,
Body,
UseInterceptors,
UploadedFile,
Res,
BadRequestException,
Put,
} from '@nestjs/common';
import { Response, Express } from 'express';
import { OrganizationUsersService } from 'src/services/organization_users.service';
import { decamelizeKeys } from 'humps';
import { JwtAuthGuard } from '../../src/modules/auth/jwt-auth.guard';
import { AppAbility } from 'src/modules/casl/casl-ability.factory';
import { PoliciesGuard } from 'src/modules/casl/policies.guard';
import { CheckPolicies } from 'src/modules/casl/check_policies.decorator';
import { User as UserEntity } from 'src/entities/user.entity';
import { User } from 'src/decorators/user.decorator';
import { InviteNewUserDto } from '../dto/invite-new-user.dto';
import { OrganizationsService } from '@services/organizations.service';
import { FileInterceptor } from '@nestjs/platform-express';
const MAX_CSV_FILE_SIZE = 1024 * 1024 * 1; // 1MB
@Controller('organization_users')
export class OrganizationUsersController {
constructor(
private organizationUsersService: OrganizationUsersService,
private organizationsService: OrganizationsService
) {}
// Endpoint for inviting new organization users
@UseGuards(JwtAuthGuard, PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can('inviteUser', UserEntity))
@Post()
async create(@User() user, @Body() inviteNewUserDto: InviteNewUserDto) {
await this.organizationsService.inviteNewUser(user, inviteNewUserDto);
return;
}
@UseGuards(JwtAuthGuard, PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can('inviteUser', UserEntity))
@UseInterceptors(FileInterceptor('file'))
@Post('upload_csv')
async bulkUploadUsers(@User() user, @UploadedFile() file: Express.Multer.File, @Res() res: Response) {
if (file.size > MAX_CSV_FILE_SIZE) {
throw new BadRequestException('File size cannot be greater than 2MB');
}
await this.organizationsService.bulkUploadUsers(user, file.buffer, res);
return;
}
@UseGuards(JwtAuthGuard, PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can('archiveUser', UserEntity))
@Post(':id/archive')
async archive(@User() user, @Param('id') id: string) {
await this.organizationUsersService.archive(id, user.organizationId);
return;
}
@UseGuards(JwtAuthGuard, PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can('updateUser', UserEntity))
@Put(':id')
async updateUser(@Param('id') id: string, @Body() updateUserDto) {
await this.organizationUsersService.updateOrgUser(id, updateUserDto);
return;
}
@UseGuards(JwtAuthGuard, PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can('archiveUser', UserEntity))
@Post(':id/unarchive')
async unarchive(@User() user, @Param('id') id: string) {
await this.organizationUsersService.unarchive(user, id);
return;
}
// Deprecated
@UseGuards(JwtAuthGuard, PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can('changeRole', UserEntity))
@Post(':id/change_role')
async changeRole(@Param('id') id, @Body('role') role) {
const result = await this.organizationUsersService.changeRole(id, role);
return decamelizeKeys({ result });
}
}