import { Body, Controller, Get, Param, Post, Query, UseGuards, } from '@nestjs/common'; import { BusinessServiceRequestEntity, BusinessServiceRequestStatus, } from '../../entities/business-service-request.entity'; import { UserRole } from '../../entities/user.entity'; import { AuthUser } from '../auth/auth.types'; import { CurrentUser } from '../auth/decorators/current-user.decorator'; import { Roles } from '../auth/decorators/roles.decorator'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; import { RolesGuard } from '../auth/guards/roles.guard'; import { BusinessServiceRequestsService } from './business-service-requests.service'; import { CreateBusinessServiceRequestDto } from './dto/create-business-service-request.dto'; import { RejectBusinessServiceRequestDto } from './dto/reject-business-service-request.dto'; @Controller('business-service-requests') export class BusinessServiceRequestsController { constructor(private readonly service: BusinessServiceRequestsService) {} @Post() @UseGuards(JwtAuthGuard, RolesGuard) @Roles(UserRole.BUSINESS_OWNER) create( @CurrentUser() user: AuthUser, @Body() payload: CreateBusinessServiceRequestDto, ): Promise { return this.service.create(user.id, payload); } @Get('mine') @UseGuards(JwtAuthGuard, RolesGuard) @Roles(UserRole.BUSINESS_OWNER) findMine( @CurrentUser() user: AuthUser, ): Promise { return this.service.findMine(user.id); } @Get() @UseGuards(JwtAuthGuard, RolesGuard) @Roles(UserRole.ADMIN) findAll( @Query('status') status?: BusinessServiceRequestStatus, ): Promise { return this.service.findAll({ status }); } @Get(':id') @UseGuards(JwtAuthGuard) findOne( @Param('id') id: string, @CurrentUser() user: AuthUser, ): Promise { return this.service.findOne(id).then((entity) => { this.service.assertCanView(entity, user); return entity; }); } @Post(':id/approve') @UseGuards(JwtAuthGuard, RolesGuard) @Roles(UserRole.ADMIN) approve( @Param('id') id: string, @CurrentUser() user: AuthUser, ): Promise { return this.service.approve(id, user); } @Post(':id/reject') @UseGuards(JwtAuthGuard, RolesGuard) @Roles(UserRole.ADMIN) reject( @Param('id') id: string, @CurrentUser() user: AuthUser, @Body() payload: RejectBusinessServiceRequestDto, ): Promise { return this.service.reject(id, user, payload); } }