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); } }