import { Body, Controller, Get, Param, ParseUUIDPipe, Patch, Post, Query } from '@nestjs/common'; import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; import { CreateWarehouseDto } from './dto/create-warehouse.dto'; import { CreateWarehouseYardDto } from './dto/create-warehouse-yard.dto'; import { FilterWarehouseDto } from './dto/filter-warehouse.dto'; import { UpdateWarehouseDto } from './dto/update-warehouse.dto'; import { WarehouseDashboardService } from './warehouse-dashboard.service'; import { WarehouseYardsService } from './warehouse-yards.service'; import { WarehousesService } from './warehouses.service'; @ApiTags('warehouses') @ApiBearerAuth() @Controller('warehouses') export class WarehousesController { constructor( private readonly warehousesService: WarehousesService, private readonly yardsService: WarehouseYardsService, private readonly dashboardService: WarehouseDashboardService, ) {} @Get() @ApiOperation({ summary: 'List warehouses' }) findAll(@Query() filter: FilterWarehouseDto) { return this.warehousesService.findAll(filter); } @Get('dashboard') @ApiOperation({ summary: 'Warehouse dashboard metrics' }) dashboard() { return this.dashboardService.getDashboard(); } @Post() @ApiOperation({ summary: 'Create warehouse' }) create(@Body() dto: CreateWarehouseDto) { return this.warehousesService.create(dto); } @Get(':id') @ApiOperation({ summary: 'Get warehouse by ID' }) findOne(@Param('id', ParseUUIDPipe) id: string) { return this.warehousesService.findById(id); } @Patch(':id') @ApiOperation({ summary: 'Update warehouse' }) update(@Param('id', ParseUUIDPipe) id: string, @Body() dto: UpdateWarehouseDto) { return this.warehousesService.update(id, dto); } @Get(':warehouseId/yards') @ApiOperation({ summary: 'List yards within a warehouse' }) listYards(@Param('warehouseId', ParseUUIDPipe) warehouseId: string) { return this.yardsService.findByWarehouse(warehouseId); } @Post(':warehouseId/yards') @ApiOperation({ summary: 'Create a yard within a warehouse' }) createYard( @Param('warehouseId', ParseUUIDPipe) warehouseId: string, @Body() dto: CreateWarehouseYardDto, ) { return this.yardsService.create(warehouseId, dto); } }