-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathuser.controller.ts
128 lines (116 loc) · 4.22 KB
/
user.controller.ts
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
128
import {
Body,
Controller,
Delete,
Get,
Param,
Patch,
Post,
Query,
Req,
UseGuards,
} from '@nestjs/common';
import { ApiBearerAuth, ApiBody, ApiOperation, ApiParam, ApiTags } from '@nestjs/swagger';
import { Request } from 'express';
import { UserEntity } from 'src/entities/user.entity';
import { SuperAdminAuthGuard } from 'src/partner-admin/super-admin-auth.guard';
import { ServiceUserProfilesService } from 'src/service-user-profiles/service-user-profiles.service';
import { formatUserObject } from 'src/utils/serialize';
import { FirebaseAuthGuard } from '../firebase/firebase-auth.guard';
import { ControllerDecorator } from '../utils/controller.decorator';
import { AdminUpdateUserDto } from './dtos/admin-update-user.dto';
import { CreateUserDto } from './dtos/create-user.dto';
import { GetUserDto } from './dtos/get-user.dto';
import { UpdateUserDto } from './dtos/update-user.dto';
import { UserService } from './user.service';
@ApiTags('Users')
@ControllerDecorator()
@Controller('/v1/user')
export class UserController {
constructor(
private readonly userService: UserService,
private readonly serviceUserProfilesService: ServiceUserProfilesService,
) {}
@Post()
@ApiOperation({
description: 'Stores basic profile data for a user',
})
@ApiBody({ type: CreateUserDto })
async createUser(@Body() createUserDto: CreateUserDto): Promise<GetUserDto> {
return await this.userService.createUser(createUserDto);
}
@ApiBearerAuth('access-token')
@ApiOperation({
description:
'Returns user profile data with their nested partner access, partner admin, course user and session user data.',
})
@Get('/me')
@UseGuards(FirebaseAuthGuard)
async getUserByFirebaseId(@Req() req: Request): Promise<GetUserDto> {
const user = req['userEntity'];
this.userService.updateUser({ lastActiveAt: new Date() }, user.id);
return (await this.userService.getUserProfile(user.id)).userDto;
}
@ApiBearerAuth()
@Delete()
@UseGuards(FirebaseAuthGuard)
async deleteUser(@Req() req: Request): Promise<UserEntity> {
return await this.userService.deleteUser(req['userEntity']);
}
// This route must go before the Delete user route below as we want nestjs to check against this one first
@ApiBearerAuth('access-token')
@Delete('/cypress')
@UseGuards(SuperAdminAuthGuard)
async deleteCypressUsers(): Promise<UserEntity[]> {
return await this.userService.deleteCypressTestUsers();
}
@ApiBearerAuth('access-token')
@Delete('/cypress-clean')
@UseGuards(SuperAdminAuthGuard)
async cleanCypressUsers(): Promise<UserEntity[]> {
return await this.userService.deleteCypressTestUsers(true);
}
@ApiBearerAuth()
@Delete(':id')
@ApiParam({ name: 'id', description: 'User id to delete' })
@UseGuards(SuperAdminAuthGuard)
async adminDeleteUser(@Param() { id }): Promise<UserEntity> {
return await this.userService.deleteUserById(id);
}
@ApiBearerAuth()
@Patch()
@UseGuards(FirebaseAuthGuard)
async updateUser(@Body() updateUserDto: UpdateUserDto, @Req() req: Request): Promise<UserEntity> {
return await this.userService.updateUser(updateUserDto, req['userEntity'].id);
}
@ApiBearerAuth()
@Patch('/admin/:id')
@UseGuards(SuperAdminAuthGuard)
async adminUpdateUser(@Param() { id }, @Body() adminUpdateUserDto: AdminUpdateUserDto) {
return await this.userService.adminUpdateUser(adminUpdateUserDto, id);
}
@ApiBearerAuth()
@Get()
@UseGuards(SuperAdminAuthGuard)
async getUsers(@Query() query) {
const { include, fields, limit, ...userQuery } = query.searchCriteria
? JSON.parse(query.searchCriteria)
: { include: [], fields: [], limit: undefined };
const users = await this.userService.getUsers(userQuery, include || [], fields, limit);
return users.map((u) => formatUserObject(u));
}
@ApiBearerAuth()
@Get('/bulk-upload-mailchimp-profiles')
@UseGuards(SuperAdminAuthGuard)
async bulkUploadMailchimpProfiles() {
await this.serviceUserProfilesService.bulkUploadMailchimpProfiles();
return 'ok';
}
@ApiBearerAuth()
@Get('/bulk-update-mailchimp-profiles')
@UseGuards(SuperAdminAuthGuard)
async bulkUpdateMailchimpProfiles() {
await this.serviceUserProfilesService.bulkUpdateMailchimpProfiles();
return 'ok';
}
}