Files
serverMontime/src/modules/business-service-requests/business-service-requests.controller.ts
T
2026-05-25 21:37:01 +03:30

89 lines
2.6 KiB
TypeScript

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<BusinessServiceRequestEntity> {
return this.service.create(user.id, payload);
}
@Get('mine')
@UseGuards(JwtAuthGuard, RolesGuard)
@Roles(UserRole.BUSINESS_OWNER)
findMine(
@CurrentUser() user: AuthUser,
): Promise<BusinessServiceRequestEntity[]> {
return this.service.findMine(user.id);
}
@Get()
@UseGuards(JwtAuthGuard, RolesGuard)
@Roles(UserRole.ADMIN)
findAll(
@Query('status') status?: BusinessServiceRequestStatus,
): Promise<BusinessServiceRequestEntity[]> {
return this.service.findAll({ status });
}
@Get(':id')
@UseGuards(JwtAuthGuard)
findOne(
@Param('id') id: string,
@CurrentUser() user: AuthUser,
): Promise<BusinessServiceRequestEntity> {
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<BusinessServiceRequestEntity> {
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<BusinessServiceRequestEntity> {
return this.service.reject(id, user, payload);
}
}