2022-06-11 16:12:06 -05:00
|
|
|
import {
|
2023-07-01 14:27:34 -04:00
|
|
|
AuthUserDto,
|
2023-06-16 15:54:17 -04:00
|
|
|
CreateProfileImageDto,
|
|
|
|
|
CreateProfileImageResponseDto,
|
2023-08-03 14:17:38 -04:00
|
|
|
CreateUserDto as CreateDto,
|
|
|
|
|
UpdateUserDto as UpdateDto,
|
|
|
|
|
UserCountDto as CountDto,
|
2023-06-16 15:54:17 -04:00
|
|
|
UserCountResponseDto,
|
|
|
|
|
UserResponseDto,
|
|
|
|
|
UserService,
|
|
|
|
|
} from '@app/domain';
|
|
|
|
|
import {
|
|
|
|
|
Body,
|
2022-06-11 16:12:06 -05:00
|
|
|
Controller,
|
2022-11-07 16:53:47 -05:00
|
|
|
Delete,
|
2023-06-16 15:54:17 -04:00
|
|
|
Get,
|
|
|
|
|
Header,
|
2022-06-11 16:12:06 -05:00
|
|
|
Param,
|
2023-06-16 15:54:17 -04:00
|
|
|
Post,
|
2022-06-11 16:12:06 -05:00
|
|
|
Put,
|
|
|
|
|
Query,
|
|
|
|
|
Response,
|
2022-12-23 21:08:50 +01:00
|
|
|
StreamableFile,
|
2023-06-16 15:54:17 -04:00
|
|
|
UploadedFile,
|
|
|
|
|
UseInterceptors,
|
2022-06-11 16:12:06 -05:00
|
|
|
} from '@nestjs/common';
|
2023-02-24 17:01:10 +01:00
|
|
|
import { ApiBody, ApiConsumes, ApiTags } from '@nestjs/swagger';
|
2023-06-16 15:54:17 -04:00
|
|
|
import { Response as Res } from 'express';
|
2023-07-01 14:27:34 -04:00
|
|
|
import { AdminRoute, Authenticated, AuthUser, PublicRoute } from '../app.guard';
|
2023-07-09 00:37:40 -04:00
|
|
|
import { FileUploadInterceptor, Route } from '../app.interceptor';
|
2023-07-01 14:27:34 -04:00
|
|
|
import { UseValidation } from '../app.utils';
|
2023-08-03 14:17:38 -04:00
|
|
|
import { UUIDParamDto } from './dto/uuid-param.dto';
|
2022-02-03 10:06:44 -06:00
|
|
|
|
2022-07-08 21:26:50 -05:00
|
|
|
@ApiTags('User')
|
2023-07-09 00:37:40 -04:00
|
|
|
@Controller(Route.USER)
|
2023-05-28 12:30:01 -04:00
|
|
|
@Authenticated()
|
2023-04-03 06:24:18 +02:00
|
|
|
@UseValidation()
|
2022-02-03 10:06:44 -06:00
|
|
|
export class UserController {
|
2023-03-24 00:53:56 -04:00
|
|
|
constructor(private service: UserService) {}
|
2022-04-23 21:08:45 -05:00
|
|
|
|
|
|
|
|
@Get()
|
2023-06-16 15:39:53 -04:00
|
|
|
getAllUsers(@AuthUser() authUser: AuthUserDto, @Query('isAll') isAll: boolean): Promise<UserResponseDto[]> {
|
2023-08-03 14:17:38 -04:00
|
|
|
return this.service.getAll(authUser, isAll);
|
2022-05-21 02:23:55 -05:00
|
|
|
}
|
|
|
|
|
|
2023-08-03 14:17:38 -04:00
|
|
|
@Get('info/:id')
|
|
|
|
|
getUserById(@Param() { id }: UUIDParamDto): Promise<UserResponseDto> {
|
|
|
|
|
return this.service.get(id);
|
2022-07-16 23:52:00 -05:00
|
|
|
}
|
|
|
|
|
|
2022-06-27 15:13:07 -05:00
|
|
|
@Get('me')
|
2023-06-16 15:39:53 -04:00
|
|
|
getMyUserInfo(@AuthUser() authUser: AuthUserDto): Promise<UserResponseDto> {
|
2023-08-03 14:17:38 -04:00
|
|
|
return this.service.getMe(authUser);
|
2022-06-27 15:13:07 -05:00
|
|
|
}
|
|
|
|
|
|
2023-05-28 12:30:01 -04:00
|
|
|
@AdminRoute()
|
2022-05-21 02:23:55 -05:00
|
|
|
@Post()
|
2023-08-03 14:17:38 -04:00
|
|
|
createUser(@Body() createUserDto: CreateDto): Promise<UserResponseDto> {
|
|
|
|
|
return this.service.create(createUserDto);
|
2022-05-21 02:23:55 -05:00
|
|
|
}
|
|
|
|
|
|
2023-05-28 12:30:01 -04:00
|
|
|
@PublicRoute()
|
2023-08-03 14:17:38 -04:00
|
|
|
@Get('count')
|
|
|
|
|
getUserCount(@Query() dto: CountDto): Promise<UserCountResponseDto> {
|
|
|
|
|
return this.service.getCount(dto);
|
2022-05-21 02:23:55 -05:00
|
|
|
}
|
|
|
|
|
|
2023-05-28 12:30:01 -04:00
|
|
|
@AdminRoute()
|
2023-08-03 14:17:38 -04:00
|
|
|
@Delete(':id')
|
|
|
|
|
deleteUser(@AuthUser() authUser: AuthUserDto, @Param() { id }: UUIDParamDto): Promise<UserResponseDto> {
|
|
|
|
|
return this.service.delete(authUser, id);
|
2022-11-07 16:53:47 -05:00
|
|
|
}
|
|
|
|
|
|
2023-05-28 12:30:01 -04:00
|
|
|
@AdminRoute()
|
2023-08-03 14:17:38 -04:00
|
|
|
@Post(':id/restore')
|
|
|
|
|
restoreUser(@AuthUser() authUser: AuthUserDto, @Param() { id }: UUIDParamDto): Promise<UserResponseDto> {
|
|
|
|
|
return this.service.restore(authUser, id);
|
2022-11-07 16:53:47 -05:00
|
|
|
}
|
|
|
|
|
|
2023-08-01 11:49:50 -04:00
|
|
|
// TODO: replace with @Put(':id')
|
2022-05-21 02:23:55 -05:00
|
|
|
@Put()
|
2023-08-03 14:17:38 -04:00
|
|
|
updateUser(@AuthUser() authUser: AuthUserDto, @Body() updateUserDto: UpdateDto): Promise<UserResponseDto> {
|
|
|
|
|
return this.service.update(authUser, updateUserDto);
|
2022-04-23 21:08:45 -05:00
|
|
|
}
|
2022-05-27 22:15:35 -05:00
|
|
|
|
2023-07-09 00:37:40 -04:00
|
|
|
@UseInterceptors(FileUploadInterceptor)
|
2022-07-08 21:26:50 -05:00
|
|
|
@ApiConsumes('multipart/form-data')
|
2023-07-09 00:37:40 -04:00
|
|
|
@ApiBody({ description: 'A new avatar for the user', type: CreateProfileImageDto })
|
2023-08-03 14:17:38 -04:00
|
|
|
@Post('profile-image')
|
2023-03-24 00:53:56 -04:00
|
|
|
createProfileImage(
|
2023-06-16 15:39:53 -04:00
|
|
|
@AuthUser() authUser: AuthUserDto,
|
2022-07-08 21:26:50 -05:00
|
|
|
@UploadedFile() fileInfo: Express.Multer.File,
|
|
|
|
|
): Promise<CreateProfileImageResponseDto> {
|
2023-03-24 00:53:56 -04:00
|
|
|
return this.service.createProfileImage(authUser, fileInfo);
|
2022-05-27 22:15:35 -05:00
|
|
|
}
|
|
|
|
|
|
2023-08-03 14:17:38 -04:00
|
|
|
@Get('profile-image/:id')
|
2023-07-16 03:31:33 +02:00
|
|
|
@Header('Cache-Control', 'private, no-cache, no-transform')
|
2023-08-03 14:17:38 -04:00
|
|
|
async getProfileImage(@Param() { id }: UUIDParamDto, @Response({ passthrough: true }) res: Res): Promise<any> {
|
|
|
|
|
const readableStream = await this.service.getProfileImage(id);
|
2023-03-24 00:53:56 -04:00
|
|
|
res.header('Content-Type', 'image/jpeg');
|
2022-12-23 21:08:50 +01:00
|
|
|
return new StreamableFile(readableStream);
|
2022-05-27 22:15:35 -05:00
|
|
|
}
|
2022-02-03 10:06:44 -06:00
|
|
|
}
|