import {
Controller,
Get,
Post,
Body,
Patch,
Query,
Delete,
Param,
} from '@nestjs/common';
import { MenuService } from './menu.service';
import { CreateMenuDto } from './dto/create-menu.dto';
import { Permission } from '../public/permission.decorator';
import { UpdateMenuDto } from './dto/update-menu.dto';
import { Reject } from '../public/reject.decorator';
import { ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiParam, ApiQuery } from '@nestjs/swagger';
import { TreeNode } from './entity/tree-node.entity';
import { Menu } from '@app/models';
@Controller('menu')
export class MenuController {
constructor(private readonly menuService: MenuService) {}
@ApiOperation({summary: '获取某个用户绑定的角色菜单树'})
@ApiParam({name: 'email', description: '用户的电子邮箱'})
@ApiOkResponse({type: [TreeNode]})
@Get('/role/:email')
async getMenus(@Param('email') email: string) {
return this.menuService.findRoleMenu(email);
}
@ApiOperation({summary: '获取完整的菜单树'})
@ApiOkResponse({type: [TreeNode]})
@Get()
@Permission('menu::query')
async getAllMenus() {
return this.menuService.findAllMenu();
}
@ApiOperation({summary: '添加一个菜单'})
@ApiCreatedResponse({type: Menu})
@Post()
@Permission('menu::add')
async createMenu(@Body() dto: CreateMenuDto) {
return this.menuService.createMenu(dto, false);
}
@ApiOperation({summary: '菜单修改'})
@ApiOkResponse({type: Boolean})
@Reject()
@Patch()
@Permission('menu::update')
async updateMenu(@Body() dto: UpdateMenuDto) {
return this.menuService.updateMenu(dto);
}
@ApiOperation({summary: '删除菜单'})
@ApiQuery({name: 'id', description: '菜单id'})
@ApiQuery({name: 'parentId', description: '菜单父级ID'})
@ApiOkResponse({type: Menu})
@Reject()
@Delete()
@Permission('menu::remove')
async deleteMenu(
@Query('id') id: number,
@Query('parentId') parentId: number
) {
return this.menuService.deleteMenu(id, parentId);
}
}