import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, ParseUUIDPipe, Patch, Post, Query, } from '@nestjs/common'; import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; import { RuleEngineCreate, RuleEngineDelete, RuleEngineUpdate, RuleEngineView, } from '../../common/rule-engine-guards'; import { CreateTransitAgentDto } from './dto/create-transit-agent.dto'; import { UpdateTransitAgentDto } from './dto/update-transit-agent.dto'; import { TransitAgentsService } from './transit-agents.service'; @ApiTags('transit-agents') @Controller('transit-agents') @ApiBearerAuth() export class TransitAgentsController { constructor(private readonly transitAgentsService: TransitAgentsService) {} @Get() @RuleEngineView('transit-agents') @ApiOperation({ summary: 'List transit agents' }) findAll(@Query() query: Record) { return this.transitAgentsService.findAll({ isActive: query.isActive === 'all' ? undefined : query.isActive !== undefined ? query.isActive === 'true' : undefined, page: query.page ? parseInt(query.page, 10) : undefined, pageSize: query.pageSize ? parseInt(query.pageSize, 10) : undefined, sortBy: query.sortBy, sortOrder: query.sortOrder, }); } /** Active + currently valid officers — the transit-assignee assignment dropdown. */ @Get('assignable') @RuleEngineView('transit-agents') @ApiOperation({ summary: 'List transit agents assignable right now (active and in-window)' }) findAssignable() { return this.transitAgentsService.findAssignable(); } @Get(':id') @RuleEngineView('transit-agents') @ApiOperation({ summary: 'Get a transit agent by ID' }) findOne(@Param('id', ParseUUIDPipe) id: string) { return this.transitAgentsService.findById(id); } @Post() @RuleEngineCreate('transit-agents') @ApiOperation({ summary: 'Create a transit agent' }) create(@Body() dto: CreateTransitAgentDto) { return this.transitAgentsService.create(dto); } @Patch(':id') @RuleEngineUpdate('transit-agents') @ApiOperation({ summary: 'Update a transit agent' }) update(@Param('id', ParseUUIDPipe) id: string, @Body() dto: UpdateTransitAgentDto) { return this.transitAgentsService.update(id, dto); } @Delete(':id') @RuleEngineDelete('transit-agents') @HttpCode(HttpStatus.NO_CONTENT) @ApiOperation({ summary: 'Soft-delete a transit agent' }) remove(@Param('id', ParseUUIDPipe) id: string) { return this.transitAgentsService.remove(id); } }