- 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>
83 lines
2.4 KiB
TypeScript
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);
|
|
}
|
|
}
|