import { Body, Controller, Get, Param, Patch, UseGuards, } from '@nestjs/common'; import { UserRole } from '@prisma/client'; import { CurrentUser } from '../auth/decorators/current-user.decorator'; import { Roles } from '../auth/decorators/roles.decorator'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; import { RolesGuard } from '../auth/guards/roles.guard'; import type { AuthUser } from '../auth/auth.types'; import { UpdateOrderStatusDto, UpdateOrderStoreStatusDto, } from './dto/order.dto'; import { OrdersService } from './orders.service'; @Controller('orders') @UseGuards(JwtAuthGuard, RolesGuard) export class OrdersController { constructor(private readonly orders: OrdersService) {} @Get('mine') @Roles(UserRole.CUSTOMER) listMine(@CurrentUser() user: AuthUser) { return this.orders.listMine(user); } @Get('mine/:id') @Roles(UserRole.CUSTOMER) findOneMine(@CurrentUser() user: AuthUser, @Param('id') id: string) { return this.orders.findOneMine(user, id); } @Get() @Roles(UserRole.STORE_ADMIN, UserRole.SUPER_ADMIN) list(@CurrentUser() user: AuthUser) { return this.orders.list(user); } @Get(':id') @Roles(UserRole.STORE_ADMIN, UserRole.SUPER_ADMIN) findOne(@CurrentUser() user: AuthUser, @Param('id') id: string) { return this.orders.findOne(user, id); } @Patch(':id/fulfillment') @Roles(UserRole.STORE_ADMIN) updateFulfillment( @CurrentUser() user: AuthUser, @Param('id') id: string, @Body() dto: UpdateOrderStoreStatusDto, ) { return this.orders.updateStoreFulfillment(user, id, dto); } @Patch(':id/status') @Roles(UserRole.SUPER_ADMIN) updateStatus( @CurrentUser() user: AuthUser, @Param('id') id: string, @Body() dto: UpdateOrderStatusDto, ) { return this.orders.updateStatus(user, id, dto); } }