forked from DhanushNehru/ToolJet
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathorganizations.controller.ts
More file actions
127 lines (110 loc) · 4.68 KB
/
organizations.controller.ts
File metadata and controls
127 lines (110 loc) · 4.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import { Body, Controller, Get, NotFoundException, Param, Patch, Post, UseGuards, Query, Res } from '@nestjs/common';
import { OrganizationsService } from '@services/organizations.service';
import { decamelizeKeys } from 'humps';
import { User } from 'src/decorators/user.decorator';
import { JwtAuthGuard } from '../../src/modules/auth/jwt-auth.guard';
import { AuthService } from '@services/auth.service';
import { AppAbility } from 'src/modules/casl/casl-ability.factory';
import { CheckPolicies } from 'src/modules/casl/check_policies.decorator';
import { PoliciesGuard } from 'src/modules/casl/policies.guard';
import { User as UserEntity } from 'src/entities/user.entity';
import { OrganizationCreateDto, OrganizationUpdateDto } from '@dto/organization.dto';
import { Response } from 'express';
@Controller('organizations')
export class OrganizationsController {
constructor(private organizationsService: OrganizationsService, private authService: AuthService) {}
@UseGuards(JwtAuthGuard, PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can('viewAllUsers', UserEntity))
@Get('users')
async getUsers(@User() user, @Query() query) {
const { page, searchText, status } = query;
const filterOptions = {
...(searchText && { searchText }),
...(status && { status }),
};
const usersCount = await this.organizationsService.usersCount(user, filterOptions);
let users = [];
if (usersCount > 0) users = await this.organizationsService.fetchUsers(user, page, filterOptions);
const meta = {
total_pages: Math.ceil(usersCount / 10),
total_count: usersCount,
current_page: parseInt(page || 1),
};
const response = {
meta,
users,
};
return decamelizeKeys(response);
}
@UseGuards(JwtAuthGuard)
@Get('users/suggest')
async getUserSuggestions(@User() user, @Query('input') searchInput) {
const users = await this.organizationsService.fetchUsersByValue(user, searchInput);
const response = {
users,
};
return decamelizeKeys(response);
}
@UseGuards(JwtAuthGuard)
@Get()
async get(@User() user) {
const result = await this.organizationsService.fetchOrganizations(user);
return decamelizeKeys({ organizations: result });
}
@UseGuards(JwtAuthGuard)
@Post()
async create(
@User() user,
@Body() organizationCreateDto: OrganizationCreateDto,
@Res({ passthrough: true }) response: Response
) {
const result = await this.organizationsService.create(organizationCreateDto.name, organizationCreateDto.slug, user);
if (!result) {
throw new Error();
}
return await this.authService.switchOrganization(response, result.id, user, true);
}
@Get(['/:organizationId/public-configs', '/public-configs'])
async getOrganizationDetails(@Param('organizationId') organizationId: string) {
const existingOrganizationId = (await this.organizationsService.getSingleOrganization())?.id;
if (!existingOrganizationId) {
throw new NotFoundException();
}
if (!organizationId) {
const result = this.organizationsService.constructSSOConfigs();
return decamelizeKeys({ ssoConfigs: result });
}
const result = await this.organizationsService.fetchOrganizationDetails(organizationId, [true], true, true);
if (!result) throw new NotFoundException();
return decamelizeKeys({ ssoConfigs: result });
}
@UseGuards(JwtAuthGuard, PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can('updateOrganizations', UserEntity))
@Get('/configs')
async getConfigs(@User() user) {
const result = await this.organizationsService.fetchOrganizationDetails(user.organizationId);
return decamelizeKeys({
organizationDetails: result,
instanceConfigs: this.organizationsService.constructSSOConfigs(),
});
}
@UseGuards(JwtAuthGuard, PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can('updateOrganizations', UserEntity))
@Patch()
async update(@Body() organizationUpdateDto: OrganizationUpdateDto, @User() user) {
await this.organizationsService.updateOrganization(user.organizationId, organizationUpdateDto);
return;
}
@UseGuards(JwtAuthGuard, PoliciesGuard)
@CheckPolicies((ability: AppAbility) => ability.can('updateOrganizations', UserEntity))
@Patch('/configs')
async updateConfigs(@Body() body, @User() user) {
const result: any = await this.organizationsService.updateOrganizationConfigs(user.organizationId, body);
return decamelizeKeys({ id: result.id });
}
@UseGuards(JwtAuthGuard)
@Get('/is-unique')
async checkWorkspaceUnique(@User() user, @Query('name') name: string, @Query('slug') slug: string) {
return this.organizationsService.checkWorkspaceUniqueness(name, slug);
}
}