wuyi 1 год назад
Родитель
Сommit
6e7817f08b
3 измененных файлов с 42 добавлено и 0 удалено
  1. 8 0
      src/users/dto/user-profile.dto.ts
  2. 19 0
      src/users/users.admin.controller.ts
  3. 15 0
      src/users/users.service.ts

+ 8 - 0
src/users/dto/user-profile.dto.ts

@@ -1,7 +1,15 @@
+import { Role } from '../../model/role.enum'
+
 export class UserProfileDto {
 export class UserProfileDto {
     id: number
     id: number
     
     
     name: string
     name: string
 
 
+    username: string
+
     avatar: string
     avatar: string
+
+    invitor?: number
+
+    roles: Role[]
 }
 }

+ 19 - 0
src/users/users.admin.controller.ts

@@ -47,6 +47,25 @@ export class UsersAdminController {
         return await this.usersService.create(user)
         return await this.usersService.create(user)
     }
     }
 
 
+    @Post('/update')
+    public async update(@Body() userProfileDto: UserProfileDto, @Req() req): Promise<any> {
+        if (req.user.roles.includes('user')|| req.user.roles.includes('api')) {
+            if (req.user.userId !== userProfileDto.id) {
+                throw new BadRequestException('Permission denied!')
+            }
+        }
+        try {
+            await this.usersService.update(userProfileDto)
+
+            return {
+                message: 'User Updated successfully!',
+                status: HttpStatus.OK
+            }
+        } catch (err) {
+            throw new BadRequestException(err, 'Error: User not updated!')
+        }
+    }
+
     @Get('/get')
     @Get('/get')
     public async get(@Req() req) {
     public async get(@Req() req) {
         const user = await this.usersService.findById(req.user.userId)
         const user = await this.usersService.findById(req.user.userId)

+ 15 - 0
src/users/users.service.ts

@@ -178,6 +178,21 @@ export class UsersService implements OnModuleInit {
         }
         }
     }
     }
 
 
+    public async update(userProfileDto: UserProfileDto): Promise<Users> {
+        try {
+            const user = await this.userRepository.findOneBy({ id: +userProfileDto.id })
+            if (userProfileDto.name) user.name = userProfileDto.name
+            if (userProfileDto.avatar) user.avatar = userProfileDto.avatar
+            if (userProfileDto.username) user.username = userProfileDto.username
+            if (userProfileDto.invitor) user.invitor = userProfileDto.invitor
+            if (userProfileDto.roles) user.roles = userProfileDto.roles
+
+            return await this.userRepository.save(user)
+        } catch (err) {
+            throw new HttpException(err, HttpStatus.BAD_REQUEST)
+        }
+    }
+
     public async updateUser(id: number, userUpdateDto: UserUpdateDto): Promise<UpdateResult> {
     public async updateUser(id: number, userUpdateDto: UserUpdateDto): Promise<UpdateResult> {
         try {
         try {
             const user = await this.userRepository.update(
             const user = await this.userRepository.update(