import {
Body,
Controller,
DefaultValuePipe,
Delete,
Get,
HttpException,
HttpStatus,
Param,
ParseArrayPipe,
Patch,
Post,
Query,
Req,
} from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { Permission } from '../public/permission.decorator';
import { UpdateUserDto } from './dto/update-user.dto';
import { PaginationQueryDto } from './dto/pagination-query.dto';
import { UpdatePwdAdminDto } from './dto/update-pwd-admin.dto';
import { UpdatePwdUserDto } from './dto/update-pwd-user.dto';
import { I18n, I18nContext } from 'nestjs-i18n';
import { I18nTranslations } from '../.generate/i18n.generated';
import { Reject } from '../public/reject.decorator';
import { ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiParam, ApiProperty } from '@nestjs/swagger';
import { User } from '@app/models';
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@ApiOperation({summary: '创建用户'})
@ApiCreatedResponse({
type: ()=>User,
description: '返回创建后的用户'
})
@ApiBearerAuth()
@Post('reg')
@Permission('user::add')
async register(@Body() body: CreateUserDto) {
return this.userService.create(body, false);
}
@ApiOperation({summary: '获取用户信息'})
@ApiParam({
name: 'email',
description: '用户邮箱'
})
@ApiOkResponse({
type: ()=>User
})
@Get('/info/:email?')
async getUserInfo(
@I18n() i18n: I18nContext<I18nTranslations>,
@Req() request: Request & RequestUser,
@Param('email') email?: string
) {
const _email = email ? email : request.user.email;
if (!_email) {
throw new HttpException(
i18n.t('exception.common.unauth', { lang: I18nContext.current().lang }),
HttpStatus.UNAUTHORIZED
);
}
return this.userService.getUserInfo(_email, ['role', 'role.permission']);
}
@ApiOperation({summary: '删除用户'})
@ApiParam({
name: 'email',
description: '用户邮箱'
})
@ApiOkResponse({
type: User
})
@Reject()
@Delete('/:email')
@Permission('user::remove')
async delUser(@Param('email') email: string) {
return this.userService.deleteUser(email);
}
@ApiOperation({summary: '修改用户信息'})
@ApiOkResponse({
type: User,
})
@Reject()
@Patch('/update')
@Permission('user::update')
async UpdateUser(@Body() body: UpdateUserDto) {
return this.userService.updateUserInfo(body);
}
@ApiOperation({summary: '分页查询用户'})
@Get()
@Permission('user::query')
async getAllUser(
@Query() paginationQuery: PaginationQueryDto,
@Query('name') name?: string,
@Query('role', new DefaultValuePipe([]), ParseArrayPipe) role?: number[],
@Query('email') email?: string
) {
return this.userService.getAllUser(paginationQuery, name, role, email);
}
@ApiOperation({summary: '修改某位用户的密码', description: '强制性的修改'})
@Reject()
@Patch('/admin/updatePwd')
@Permission('user::password::force-update')
async updatePwdAdmin(@Body() body: UpdatePwdAdminDto) {
return this.userService.updatePwdAdmin(body);
}
@ApiOperation({summary: '修改自身的密码'})
@Reject()
@Patch('/updatePwd')
@Permission('user::update')
async updatePwdUser(@Body() body: UpdatePwdUserDto) {
return this.userService.updatePwdUser(body);
}
@ApiOperation({summary: '批量删除用户'})
@ApiOkResponse({
type: [User]
})
@Reject()
@Post('/batch')
@Permission('user::batch-remove')
async batchRemoveUser(
@Body() emails: string[],
) {
return this.userService.batchDeleteUser(emails);
}
}