miinventario-v2/apps/backend/src/modules/stores/stores.controller.ts
rckrdmrd 1a53b5c4d3 [MIINVENTARIO] feat: Initial commit - Sistema de inventario con análisis de video IA
- Backend NestJS con módulos de autenticación, inventario, créditos
- Frontend React con dashboard y componentes UI
- Base de datos PostgreSQL con migraciones
- Tests E2E configurados
- Configuración de Docker y deployment

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 02:25:48 -06:00

83 lines
2.4 KiB
TypeScript

import {
Controller,
Get,
Post,
Patch,
Delete,
Body,
Param,
UseGuards,
Request,
ParseUUIDPipe,
} from '@nestjs/common';
import {
ApiTags,
ApiOperation,
ApiResponse,
ApiBearerAuth,
} from '@nestjs/swagger';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { StoresService } from './stores.service';
import { CreateStoreDto } from './dto/create-store.dto';
import { UpdateStoreDto } from './dto/update-store.dto';
import { AuthenticatedRequest } from '../../common/interfaces/authenticated-request.interface';
@ApiTags('stores')
@ApiBearerAuth()
@UseGuards(JwtAuthGuard)
@Controller('stores')
export class StoresController {
constructor(private readonly storesService: StoresService) {}
@Post()
@ApiOperation({ summary: 'Crear una nueva tienda' })
@ApiResponse({ status: 201, description: 'Tienda creada exitosamente' })
create(
@Request() req: AuthenticatedRequest,
@Body() createStoreDto: CreateStoreDto,
) {
return this.storesService.create(req.user.id, createStoreDto);
}
@Get()
@ApiOperation({ summary: 'Obtener todas las tiendas del usuario' })
@ApiResponse({ status: 200, description: 'Lista de tiendas' })
findAll(@Request() req: AuthenticatedRequest) {
return this.storesService.findAllByOwner(req.user.id);
}
@Get(':id')
@ApiOperation({ summary: 'Obtener una tienda por ID' })
@ApiResponse({ status: 200, description: 'Tienda encontrada' })
@ApiResponse({ status: 404, description: 'Tienda no encontrada' })
findOne(
@Request() req: AuthenticatedRequest,
@Param('id', ParseUUIDPipe) id: string,
) {
return this.storesService.findByIdAndOwner(id, req.user.id);
}
@Patch(':id')
@ApiOperation({ summary: 'Actualizar una tienda' })
@ApiResponse({ status: 200, description: 'Tienda actualizada' })
@ApiResponse({ status: 404, description: 'Tienda no encontrada' })
update(
@Request() req: AuthenticatedRequest,
@Param('id', ParseUUIDPipe) id: string,
@Body() updateStoreDto: UpdateStoreDto,
) {
return this.storesService.update(id, req.user.id, updateStoreDto);
}
@Delete(':id')
@ApiOperation({ summary: 'Eliminar una tienda' })
@ApiResponse({ status: 200, description: 'Tienda eliminada' })
@ApiResponse({ status: 404, description: 'Tienda no encontrada' })
remove(
@Request() req: AuthenticatedRequest,
@Param('id', ParseUUIDPipe) id: string,
) {
return this.storesService.delete(id, req.user.id);
}
}