84 lines
2.2 KiB
TypeScript
84 lines
2.2 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Delete,
|
|
Get,
|
|
Param,
|
|
ParseUUIDPipe,
|
|
Post,
|
|
Put,
|
|
Query,
|
|
UseGuards,
|
|
} from '@nestjs/common';
|
|
import { ListDto } from '../dto/admin-user/list.dto';
|
|
import { CreateDto } from '../dto/admin-user/create.dto';
|
|
import { UserService } from 'src/user/user.service';
|
|
import { UpdateDto } from '../dto/admin-user/update.dto';
|
|
import { UpdatePasswordDto } from '../dto/admin-user/update-password.dto';
|
|
import { RemoveUserDto } from '../dto/admin-user/remove.dto';
|
|
import { RolesGuard } from 'src/common/guard/roles.guard';
|
|
import { Roles } from 'src/common/decorators/role.decorator';
|
|
import { Role } from 'src/auth/role.enum';
|
|
import { AuthGuard } from '@nestjs/passport';
|
|
|
|
@Controller('admin/user')
|
|
@UseGuards(AuthGuard('jwt'), RolesGuard)
|
|
@Roles(Role.Admin)
|
|
export class AdminUserController {
|
|
constructor(private readonly userService: UserService) {}
|
|
|
|
@Get()
|
|
async list(@Query() listDto: ListDto) {
|
|
return this.userService.list(listDto.page, listDto.pageSize);
|
|
}
|
|
|
|
@Get(':userId')
|
|
async get(
|
|
@Param('userId', new ParseUUIDPipe({ version: '4' })) userId: string,
|
|
) {
|
|
return this.userService.findOne({ userId });
|
|
}
|
|
|
|
@Post()
|
|
async create(@Body() createDto: CreateDto) {
|
|
return this.userService.create({
|
|
...createDto,
|
|
...(createDto.password &&
|
|
(() => {
|
|
const salt = this.userService.generateSalt();
|
|
return {
|
|
salt,
|
|
password_hash: this.userService.hashPassword(
|
|
createDto.password,
|
|
salt,
|
|
),
|
|
};
|
|
})()),
|
|
});
|
|
}
|
|
|
|
@Put(':userId')
|
|
async update(
|
|
@Param('userId', new ParseUUIDPipe({ version: '4' })) userId: string,
|
|
@Body() updateDto: UpdateDto,
|
|
) {
|
|
return this.userService.update(userId, updateDto);
|
|
}
|
|
|
|
@Delete(':userId')
|
|
async delete(
|
|
@Param('userId', new ParseUUIDPipe({ version: '4' })) userId: string,
|
|
@Query() dto: RemoveUserDto,
|
|
) {
|
|
return this.userService.delete(userId, dto.soft);
|
|
}
|
|
|
|
@Post(':userId/password')
|
|
async setPassword(
|
|
@Param('userId', new ParseUUIDPipe({ version: '4' })) userId: string,
|
|
@Body() updatePasswordDto: UpdatePasswordDto,
|
|
) {
|
|
return this.userService.setPassword(userId, updatePasswordDto.password);
|
|
}
|
|
}
|