import { Controller, Get, Post, Body, Param, Patch, Delete, UseGuards } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiBody, ApiBearerAuth } from '@nestjs/swagger'; import { RolesService } from '../providers/roles.service'; import { PermissionsService } from '../providers/permissions.service'; import { CreateRoleDto } from '../dto/create-role.dto'; import { UpdateRoleDto } from '../dto/update-role.dto'; import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard'; import { Permissions } from 'src/modules/auth/decorators/permissions.decorator'; import { RestId } from 'src/common/decorators'; import { AdminId } from 'src/common/decorators/admin-id.decorator'; @UseGuards(AdminAuthGuard) @ApiBearerAuth() @ApiTags('roles') @Controller('admin/roles') export class RolesController { constructor( private readonly roleService: RolesService, private readonly permissionService: PermissionsService, ) {} @Get() @ApiOperation({ summary: 'Get all through restaurant roles with pagination and filters' }) findAll(@RestId() restId: string) { return this.roleService.findAllGeneralAndRestaurantRoles(restId); } @Get('permissions') @ApiOperation({ summary: 'Get all permissions that the admin has' }) async findAllPermissions(@AdminId() adminId: string, @RestId() restId: string) { const adminPermissionNames = await this.permissionService.getAdminFullPermissions(adminId, restId); return adminPermissionNames; } @Permissions('create_role') @Post() @ApiOperation({ summary: 'Create a new role' }) @ApiBody({ type: CreateRoleDto }) create(@Body() dto: CreateRoleDto, @RestId() restId: string) { return this.roleService.createRestaurantRole(dto, restId); } @Get(':id') @ApiOperation({ summary: 'Get a specific role by ID' }) findOne(@Param('id') id: string, @RestId() restId: string) { return this.roleService.findOne(restId, id); } @Patch(':id') @ApiOperation({ summary: 'Update a role' }) @ApiBody({ type: UpdateRoleDto }) update(@Param('id') id: string, @Body() dto: UpdateRoleDto, @RestId() restId: string) { return this.roleService.update(restId, id, dto); } @Delete(':id') @ApiOperation({ summary: 'Delete a role' }) remove(@Param('id') id: string, @RestId() restId: string) { return this.roleService.remove(restId, id); } }