diff --git a/src/orders/orders.controller.ts b/src/orders/orders.controller.ts index 6f2e8ca..9125b3a 100644 --- a/src/orders/orders.controller.ts +++ b/src/orders/orders.controller.ts @@ -20,16 +20,29 @@ import { OrdersService } from './orders.service'; @Controller('orders') @UseGuards(JwtAuthGuard, RolesGuard) -@Roles(UserRole.STORE_ADMIN, UserRole.SUPER_ADMIN) 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); } diff --git a/src/orders/orders.service.ts b/src/orders/orders.service.ts index 52468b2..ca3786f 100644 --- a/src/orders/orders.service.ts +++ b/src/orders/orders.service.ts @@ -20,6 +20,10 @@ export class OrdersService { ) {} async list(actor: AuthUser) { + if (actor.role === UserRole.CUSTOMER) { + return this.listMine(actor); + } + if (actor.role === UserRole.SUPER_ADMIN) { return this.prisma.order.findMany({ include: { @@ -59,7 +63,22 @@ export class OrdersService { }); } + async listMine(actor: AuthUser) { + return this.prisma.order.findMany({ + where: { customerId: actor.id }, + include: { + items: true, + fulfillments: true, + }, + orderBy: { createdAt: 'desc' }, + }); + } + async findOne(actor: AuthUser, id: string) { + if (actor.role === UserRole.CUSTOMER) { + return this.findOneMine(actor, id); + } + if (actor.role === UserRole.SUPER_ADMIN) { const order = await this.prisma.order.findUnique({ where: { id }, @@ -85,6 +104,15 @@ export class OrdersService { return order; } + async findOneMine(actor: AuthUser, id: string) { + const order = await this.prisma.order.findFirst({ + where: { id, customerId: actor.id }, + include: { items: true, fulfillments: true }, + }); + if (!order) throw new NotFoundException('سفارش یافت نشد'); + return order; + } + async updateStoreFulfillment( actor: AuthUser, orderId: string,