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')
|
@Controller('orders')
|
||||||
@UseGuards(JwtAuthGuard, RolesGuard)
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
||||||
@Roles(UserRole.STORE_ADMIN, UserRole.SUPER_ADMIN)
|
|
||||||
export class OrdersController {
|
export class OrdersController {
|
||||||
constructor(private readonly orders: OrdersService) {}
|
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()
|
@Get()
|
||||||
|
@Roles(UserRole.STORE_ADMIN, UserRole.SUPER_ADMIN)
|
||||||
list(@CurrentUser() user: AuthUser) {
|
list(@CurrentUser() user: AuthUser) {
|
||||||
return this.orders.list(user);
|
return this.orders.list(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get(':id')
|
@Get(':id')
|
||||||
|
@Roles(UserRole.STORE_ADMIN, UserRole.SUPER_ADMIN)
|
||||||
findOne(@CurrentUser() user: AuthUser, @Param('id') id: string) {
|
findOne(@CurrentUser() user: AuthUser, @Param('id') id: string) {
|
||||||
return this.orders.findOne(user, id);
|
return this.orders.findOne(user, id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,10 @@ export class OrdersService {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
async list(actor: AuthUser) {
|
async list(actor: AuthUser) {
|
||||||
|
if (actor.role === UserRole.CUSTOMER) {
|
||||||
|
return this.listMine(actor);
|
||||||
|
}
|
||||||
|
|
||||||
if (actor.role === UserRole.SUPER_ADMIN) {
|
if (actor.role === UserRole.SUPER_ADMIN) {
|
||||||
return this.prisma.order.findMany({
|
return this.prisma.order.findMany({
|
||||||
include: {
|
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) {
|
async findOne(actor: AuthUser, id: string) {
|
||||||
|
if (actor.role === UserRole.CUSTOMER) {
|
||||||
|
return this.findOneMine(actor, id);
|
||||||
|
}
|
||||||
|
|
||||||
if (actor.role === UserRole.SUPER_ADMIN) {
|
if (actor.role === UserRole.SUPER_ADMIN) {
|
||||||
const order = await this.prisma.order.findUnique({
|
const order = await this.prisma.order.findUnique({
|
||||||
where: { id },
|
where: { id },
|
||||||
@@ -85,6 +104,15 @@ export class OrdersService {
|
|||||||
return order;
|
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(
|
async updateStoreFulfillment(
|
||||||
actor: AuthUser,
|
actor: AuthUser,
|
||||||
orderId: string,
|
orderId: string,
|
||||||
|
|||||||
Reference in New Issue
Block a user