2023-06-16 15:54:17 -04:00
|
|
|
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,
|
2023-11-14 04:10:35 +01:00
|
|
|
HttpCode,
|
|
|
|
HttpStatus,
|
2023-12-18 11:33:46 -05:00
|
|
|
Next,
|
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,
|
2023-12-18 11:33:46 -05:00
|
|
|
Res,
|
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-12-18 11:33:46 -05:00
|
|
|
import { NextFunction, Response } from 'express';
|
2024-03-20 23:53:07 +01:00
|
|
|
import { AuthDto } from 'src/dtos/auth.dto';
|
2024-07-01 18:43:16 +01:00
|
|
|
import { LicenseKeyDto, LicenseResponseDto } from 'src/dtos/license.dto';
|
2024-05-27 22:16:53 -04:00
|
|
|
import { UserPreferencesResponseDto, UserPreferencesUpdateDto } from 'src/dtos/user-preferences.dto';
|
2024-03-20 23:53:07 +01:00
|
|
|
import { CreateProfileImageDto, CreateProfileImageResponseDto } from 'src/dtos/user-profile.dto';
|
2024-05-26 18:15:52 -04:00
|
|
|
import { UserAdminResponseDto, UserResponseDto, UserUpdateMeDto } from 'src/dtos/user.dto';
|
2024-09-27 10:28:42 -04:00
|
|
|
import { RouteKey } from 'src/enum';
|
2024-05-09 13:58:44 -04:00
|
|
|
import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard';
|
2024-09-27 10:28:42 -04:00
|
|
|
import { FileUploadInterceptor } from 'src/middleware/file-upload.interceptor';
|
2025-01-23 08:31:30 -05:00
|
|
|
import { LoggingRepository } from 'src/repositories/logging.repository';
|
2024-03-21 00:07:30 +01:00
|
|
|
import { UserService } from 'src/services/user.service';
|
2024-03-21 08:07:47 -05:00
|
|
|
import { sendFile } from 'src/utils/file';
|
2024-03-20 15:04:03 -05:00
|
|
|
import { UUIDParamDto } from 'src/validation';
|
2022-02-03 10:06:44 -06:00
|
|
|
|
2024-05-30 00:26:57 +02:00
|
|
|
@ApiTags('Users')
|
2024-09-27 10:28:42 -04:00
|
|
|
@Controller(RouteKey.USER)
|
2022-02-03 10:06:44 -06:00
|
|
|
export class UserController {
|
2024-05-14 08:48:49 -04:00
|
|
|
constructor(
|
|
|
|
private service: UserService,
|
2025-01-23 08:31:30 -05:00
|
|
|
private logger: LoggingRepository,
|
2024-05-14 08:48:49 -04:00
|
|
|
) {}
|
2022-04-23 21:08:45 -05:00
|
|
|
|
|
|
|
@Get()
|
2024-05-09 13:58:44 -04:00
|
|
|
@Authenticated()
|
2024-11-26 10:51:01 -05:00
|
|
|
searchUsers(@Auth() auth: AuthDto): Promise<UserResponseDto[]> {
|
|
|
|
return this.service.search(auth);
|
2022-07-16 23:52:00 -05:00
|
|
|
}
|
|
|
|
|
2022-06-27 15:13:07 -05:00
|
|
|
@Get('me')
|
2024-05-09 13:58:44 -04:00
|
|
|
@Authenticated()
|
2024-05-26 18:15:52 -04:00
|
|
|
getMyUser(@Auth() auth: AuthDto): UserAdminResponseDto {
|
2023-12-09 23:34:12 -05:00
|
|
|
return this.service.getMe(auth);
|
2022-06-27 15:13:07 -05:00
|
|
|
}
|
|
|
|
|
2024-05-26 18:15:52 -04:00
|
|
|
@Put('me')
|
2024-05-22 14:15:33 -04:00
|
|
|
@Authenticated()
|
2024-05-26 18:15:52 -04:00
|
|
|
updateMyUser(@Auth() auth: AuthDto, @Body() dto: UserUpdateMeDto): Promise<UserAdminResponseDto> {
|
|
|
|
return this.service.updateMe(auth, dto);
|
2022-05-21 02:23:55 -05:00
|
|
|
}
|
2024-05-27 22:16:53 -04:00
|
|
|
|
|
|
|
@Get('me/preferences')
|
|
|
|
@Authenticated()
|
|
|
|
getMyPreferences(@Auth() auth: AuthDto): UserPreferencesResponseDto {
|
|
|
|
return this.service.getMyPreferences(auth);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Put('me/preferences')
|
|
|
|
@Authenticated()
|
|
|
|
updateMyPreferences(
|
|
|
|
@Auth() auth: AuthDto,
|
|
|
|
@Body() dto: UserPreferencesUpdateDto,
|
|
|
|
): Promise<UserPreferencesResponseDto> {
|
|
|
|
return this.service.updateMyPreferences(auth, dto);
|
|
|
|
}
|
2024-07-01 18:43:16 +01:00
|
|
|
|
|
|
|
@Get('me/license')
|
|
|
|
@Authenticated()
|
|
|
|
getUserLicense(@Auth() auth: AuthDto): LicenseResponseDto {
|
|
|
|
return this.service.getLicense(auth);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Put('me/license')
|
|
|
|
@Authenticated()
|
|
|
|
async setUserLicense(@Auth() auth: AuthDto, @Body() license: LicenseKeyDto): Promise<LicenseResponseDto> {
|
|
|
|
return this.service.setLicense(auth, license);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Delete('me/license')
|
|
|
|
@Authenticated()
|
|
|
|
async deleteUserLicense(@Auth() auth: AuthDto): Promise<void> {
|
|
|
|
await this.service.deleteLicense(auth);
|
|
|
|
}
|
2022-05-21 02:23:55 -05:00
|
|
|
|
2024-05-26 18:15:52 -04:00
|
|
|
@Get(':id')
|
2024-05-09 13:58:44 -04:00
|
|
|
@Authenticated()
|
2024-05-26 18:15:52 -04:00
|
|
|
getUser(@Param() { id }: UUIDParamDto): Promise<UserResponseDto> {
|
|
|
|
return this.service.get(id);
|
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')
|
2024-05-09 13:58:44 -04:00
|
|
|
@Authenticated()
|
2023-03-24 00:53:56 -04:00
|
|
|
createProfileImage(
|
2023-12-09 23:34:12 -05:00
|
|
|
@Auth() auth: AuthDto,
|
2022-07-08 21:26:50 -05:00
|
|
|
@UploadedFile() fileInfo: Express.Multer.File,
|
|
|
|
): Promise<CreateProfileImageResponseDto> {
|
2023-12-09 23:34:12 -05:00
|
|
|
return this.service.createProfileImage(auth, fileInfo);
|
2022-05-27 22:15:35 -05:00
|
|
|
}
|
|
|
|
|
2024-05-26 18:15:52 -04:00
|
|
|
@Delete('profile-image')
|
|
|
|
@HttpCode(HttpStatus.NO_CONTENT)
|
|
|
|
@Authenticated()
|
|
|
|
deleteProfileImage(@Auth() auth: AuthDto): Promise<void> {
|
|
|
|
return this.service.deleteProfileImage(auth);
|
|
|
|
}
|
|
|
|
|
2024-05-22 14:31:12 -04:00
|
|
|
@Get(':id/profile-image')
|
2023-12-12 09:58:25 -05:00
|
|
|
@FileResponse()
|
2024-05-09 13:58:44 -04:00
|
|
|
@Authenticated()
|
2023-12-18 11:33:46 -05:00
|
|
|
async getProfileImage(@Res() res: Response, @Next() next: NextFunction, @Param() { id }: UUIDParamDto) {
|
2024-05-14 08:48:49 -04:00
|
|
|
await sendFile(res, next, () => this.service.getProfileImage(id), this.logger);
|
2022-05-27 22:15:35 -05:00
|
|
|
}
|
2022-02-03 10:06:44 -06:00
|
|
|
}
|