Add customer order endpoints for account dashboard.

Expose /orders/mine so logged-in customers can list and view their own orders.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-09-26 11:10:38 +03:30
co-authored by Cursor
parent 59746fa556
commit 3e1b95e7bb
2 changed files with 42 additions and 1 deletions
+14 -1
View File
@@ -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);
}
+28
View File
@@ -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,