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:
co-authored by
Cursor
parent
59746fa556
commit
3e1b95e7bb
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user