mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-10 07:07:21 +00:00
199 lines
5.7 KiB
TypeScript
199 lines
5.7 KiB
TypeScript
import { ControllerRoute } from '@app/common/constants/controller-route';
|
|
import { EnableDisableStatusEnum } from '@app/common/constants/days.enum';
|
|
import { RoleType } from '@app/common/constants/role.type.enum';
|
|
import { BaseResponseDto } from '@app/common/dto/base.response.dto';
|
|
import {
|
|
Body,
|
|
Controller,
|
|
Delete,
|
|
Get,
|
|
HttpStatus,
|
|
Param,
|
|
Patch,
|
|
Put,
|
|
Req,
|
|
UseGuards,
|
|
} from '@nestjs/common';
|
|
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
|
|
import { CheckProfilePictureGuard } from 'src/guards/profile.picture.guard';
|
|
import { SuperAdminRoleGuard } from 'src/guards/super.admin.role.guard';
|
|
import { JwtAuthGuard } from '../../../libs/common/src/guards/jwt.auth.guard';
|
|
import {
|
|
UpdateNameDto,
|
|
UpdateProfilePictureDataDto,
|
|
UpdateRegionDataDto,
|
|
UpdateTimezoneDataDto,
|
|
} from '../dtos';
|
|
import { UserService } from '../services/user.service';
|
|
|
|
@ApiTags('User Module')
|
|
@Controller({
|
|
version: EnableDisableStatusEnum.ENABLED,
|
|
path: ControllerRoute.USER.ROUTE,
|
|
})
|
|
export class UserController {
|
|
constructor(private readonly userService: UserService) {}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
@Get(':userUuid')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.USER.ACTIONS.GET_USER_DETAILS_SUMMARY,
|
|
description: ControllerRoute.USER.ACTIONS.GET_USER_DETAILS_DESCRIPTION,
|
|
})
|
|
async getUserDetailsByUserUuid(@Param('userUuid') userUuid: string) {
|
|
return await this.userService.getUserDetailsByUserUuid(userUuid);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard, CheckProfilePictureGuard)
|
|
@Put('/profile-picture/:userUuid')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.USER.ACTIONS.UPDATE_PROFILE_PICTURE_SUMMARY,
|
|
description:
|
|
ControllerRoute.USER.ACTIONS.UPDATE_PROFILE_PICTURE_DESCRIPTION,
|
|
})
|
|
async updateProfilePictureByUserUuid(
|
|
@Param('userUuid') userUuid: string,
|
|
@Body() updateProfilePictureDataDto: UpdateProfilePictureDataDto,
|
|
) {
|
|
const userData = await this.userService.updateProfilePictureByUserUuid(
|
|
userUuid,
|
|
updateProfilePictureDataDto,
|
|
);
|
|
return {
|
|
statusCode: HttpStatus.CREATED,
|
|
success: true,
|
|
message: 'Profile picture updated successfully',
|
|
data: userData,
|
|
};
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
@Put('/region/:userUuid')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.USER.ACTIONS.UPDATE_REGION_SUMMARY,
|
|
description: ControllerRoute.USER.ACTIONS.UPDATE_REGION_DESCRIPTION,
|
|
})
|
|
async updateRegionByUserUuid(
|
|
@Param('userUuid') userUuid: string,
|
|
@Body() updateRegionDataDto: UpdateRegionDataDto,
|
|
) {
|
|
const userData = await this.userService.updateRegionByUserUuid(
|
|
userUuid,
|
|
updateRegionDataDto,
|
|
);
|
|
return {
|
|
statusCode: HttpStatus.CREATED,
|
|
success: true,
|
|
message: 'Region updated successfully',
|
|
data: userData,
|
|
};
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
@Put('/timezone/:userUuid')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.USER.ACTIONS.UPDATE_TIMEZONE_SUMMARY,
|
|
description: ControllerRoute.USER.ACTIONS.UPDATE_TIMEZONE_DESCRIPTION,
|
|
})
|
|
async updateTimezoneByUserUuid(
|
|
@Param('userUuid') userUuid: string,
|
|
@Body() updateTimezoneDataDto: UpdateTimezoneDataDto,
|
|
) {
|
|
const userData = await this.userService.updateTimezoneByUserUuid(
|
|
userUuid,
|
|
updateTimezoneDataDto,
|
|
);
|
|
return {
|
|
statusCode: HttpStatus.CREATED,
|
|
success: true,
|
|
message: 'Timezone updated successfully',
|
|
data: userData,
|
|
};
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
@Put('/name/:userUuid')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.USER.ACTIONS.UPDATE_NAME_SUMMARY,
|
|
description: ControllerRoute.USER.ACTIONS.UPDATE_NAME_DESCRIPTION,
|
|
})
|
|
async updateNameByUserUuid(
|
|
@Param('userUuid') userUuid: string,
|
|
@Body() updateNameDto: UpdateNameDto,
|
|
) {
|
|
const userData = await this.userService.updateNameByUserUuid(
|
|
userUuid,
|
|
updateNameDto,
|
|
);
|
|
return {
|
|
statusCode: HttpStatus.CREATED,
|
|
success: true,
|
|
message: 'Name updated successfully',
|
|
data: userData,
|
|
};
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(SuperAdminRoleGuard)
|
|
@Delete('/:userUuid')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.USER.ACTIONS.DELETE_USER_SUMMARY,
|
|
description: ControllerRoute.USER.ACTIONS.DELETE_USER_DESCRIPTION,
|
|
})
|
|
async userDelete(@Param('userUuid') userUuid: string) {
|
|
await this.userService.deleteUser(userUuid);
|
|
return {
|
|
statusCode: HttpStatus.OK,
|
|
data: {
|
|
userUuid,
|
|
},
|
|
message: 'User deleted successfully',
|
|
};
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
@Delete('')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.USER.ACTIONS.DELETE_USER_PROFILE_SUMMARY,
|
|
description: ControllerRoute.USER.ACTIONS.DELETE_USER_PROFILE_DESCRIPTION,
|
|
})
|
|
async deleteUserProfile(@Req() req: Request) {
|
|
const userUuid = req['user']?.userUuid;
|
|
const userRole = req['user']?.role;
|
|
if (!userUuid || (userRole && userRole == RoleType.SUPER_ADMIN)) {
|
|
throw {
|
|
statusCode: HttpStatus.UNAUTHORIZED,
|
|
message: 'Unauthorized',
|
|
};
|
|
}
|
|
await this.userService.deleteUserProfile(userUuid);
|
|
return {
|
|
statusCode: HttpStatus.OK,
|
|
data: {
|
|
userId: userUuid,
|
|
},
|
|
message: 'User deleted successfully',
|
|
};
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
@Patch('agreements/web/:userUuid')
|
|
@ApiOperation({
|
|
summary: ControllerRoute.USER.ACTIONS.UPDATE_USER_WEB_AGREEMENT_SUMMARY,
|
|
description:
|
|
ControllerRoute.USER.ACTIONS.UPDATE_USER_WEB_AGREEMENT_DESCRIPTION,
|
|
})
|
|
async acceptWebAgreement(
|
|
@Param('userUuid') userUuid: string,
|
|
): Promise<BaseResponseDto> {
|
|
return this.userService.acceptWebAgreement(userUuid);
|
|
}
|
|
}
|