mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-27 09:42:53 +00:00
114 lines
3.4 KiB
TypeScript
114 lines
3.4 KiB
TypeScript
import {
|
|
Controller,
|
|
Get,
|
|
Post,
|
|
Patch,
|
|
Delete,
|
|
Param,
|
|
Body,
|
|
Query,
|
|
ParseUUIDPipe,
|
|
UploadedFiles,
|
|
UseInterceptors,
|
|
} from '@nestjs/common';
|
|
import { AnyFilesInterceptor } from '@nestjs/platform-express';
|
|
import { ApiBearerAuth, ApiConsumes, ApiOperation, ApiTags } from '@nestjs/swagger';
|
|
import { BookingStaff } from '../../common/booking-guards';
|
|
import { FREIGHT_PERMS } from '../../seed/freight-permissions.registry';
|
|
import { DriversService } from './drivers.service';
|
|
import { CreateDriverDto } from './dto/create-driver.dto';
|
|
import { UpdateDriverDto } from './dto/update-driver.dto';
|
|
import { FleetHistoryService } from '../fleet-history/fleet-history.service';
|
|
|
|
@ApiTags('drivers')
|
|
@ApiBearerAuth()
|
|
@Controller('drivers')
|
|
@BookingStaff(FREIGHT_PERMS.drivers.view)
|
|
export class DriversController {
|
|
constructor(
|
|
private readonly driversService: DriversService,
|
|
private readonly fleetHistory: FleetHistoryService,
|
|
) {}
|
|
|
|
@Post()
|
|
@BookingStaff(FREIGHT_PERMS.drivers.create)
|
|
@ApiOperation({ summary: 'Create a new driver' })
|
|
create(@Body() createDriverDto: CreateDriverDto) {
|
|
return this.driversService.create(createDriverDto);
|
|
}
|
|
|
|
@Get()
|
|
@ApiOperation({ summary: 'Get all drivers with filters' })
|
|
findAll(
|
|
@Query('search') search?: string,
|
|
@Query('status') status?: string,
|
|
@Query('page') page?: string,
|
|
@Query('limit') limit?: string,
|
|
@Query('sortBy') sortBy?: string,
|
|
@Query('sortOrder') sortOrder?: 'ASC' | 'DESC',
|
|
) {
|
|
return this.driversService.findAll({
|
|
search,
|
|
status: status as any,
|
|
page: page ? parseInt(page) : undefined,
|
|
limit: limit ? parseInt(limit) : undefined,
|
|
sortBy,
|
|
sortOrder,
|
|
});
|
|
}
|
|
|
|
@Get(':id')
|
|
@ApiOperation({ summary: 'Get driver by id' })
|
|
findOne(@Param('id', ParseUUIDPipe) id: string) {
|
|
return this.driversService.findById(id);
|
|
}
|
|
|
|
@Get(':id/history')
|
|
@ApiOperation({ summary: 'Get driver assignment & activity history' })
|
|
history(@Param('id', ParseUUIDPipe) id: string) {
|
|
return this.fleetHistory.getDriverHistory(id);
|
|
}
|
|
|
|
@Post(':id/documents')
|
|
@BookingStaff(FREIGHT_PERMS.drivers.update)
|
|
@ApiConsumes('multipart/form-data')
|
|
@UseInterceptors(AnyFilesInterceptor())
|
|
@ApiOperation({ summary: 'Upload driver documents (code driver_docs)' })
|
|
uploadDocuments(
|
|
@Param('id', ParseUUIDPipe) id: string,
|
|
@UploadedFiles() files: Express.Multer.File[],
|
|
) {
|
|
return this.driversService.uploadDocuments(id, files ?? []);
|
|
}
|
|
|
|
@Get(':id/documents')
|
|
@ApiOperation({ summary: "List a driver's documents" })
|
|
listDocuments(@Param('id', ParseUUIDPipe) id: string) {
|
|
return this.driversService.listDocuments(id);
|
|
}
|
|
|
|
@Delete(':id/documents/:fileId')
|
|
@BookingStaff(FREIGHT_PERMS.drivers.update)
|
|
@ApiOperation({ summary: 'Delete a driver document' })
|
|
removeDocument(@Param('fileId', ParseUUIDPipe) fileId: string) {
|
|
return this.driversService.removeDocument(fileId);
|
|
}
|
|
|
|
@Patch(':id')
|
|
@BookingStaff(FREIGHT_PERMS.drivers.update)
|
|
@ApiOperation({ summary: 'Update a driver' })
|
|
update(
|
|
@Param('id', ParseUUIDPipe) id: string,
|
|
@Body() updateDriverDto: UpdateDriverDto,
|
|
) {
|
|
return this.driversService.update(id, updateDriverDto);
|
|
}
|
|
|
|
@Delete(':id')
|
|
@BookingStaff(FREIGHT_PERMS.drivers.delete)
|
|
@ApiOperation({ summary: 'Delete a driver' })
|
|
remove(@Param('id', ParseUUIDPipe) id: string) {
|
|
return this.driversService.remove(id);
|
|
}
|
|
}
|