assign designer

This commit is contained in:
2026-01-20 19:23:33 +03:30
parent e74ab1b573
commit 897db44c66
6 changed files with 61 additions and 16 deletions
@@ -3,16 +3,14 @@ import { ApiTags, ApiOperation, ApiBearerAuth, ApiParam, ApiHeader, ApiBody, Api
import { OrderService } from '../providers/order.service';
import { AuthGuard } from '../../auth/guards/auth.guard';
import { UserId } from '../../../common/decorators/user-id.decorator';
import { AdminAuthGuard } from '../../auth/guards/adminAuth.guard';
import { FindOrdersDto } from '../dto/find-orders.dto';
import { OrderStatusEnum } from '../interface/order.interface';
import { UpdateOrderStatusDto } from '../dto/update-order-status.dto';
import { Permissions } from 'src/common/decorators/permissions.decorator';
import { Permission } from 'src/common/enums/permission.enum';
import { CreateOrderDto } from '../dto/create-order.dto';
import { CreateInvoiceDto } from '../dto/create-invoice.dto';
import { AdminId } from 'src/common/decorators/admin-id.decorator';
import { CreateOrderAsAdminDto } from '../dto/create-order-as-admin.dto';
import { AssignDesignerDto } from '../dto/assign-designer.dto';
@ApiTags('orders')
@ApiBearerAuth()
@@ -22,7 +20,7 @@ export class OrderController {
@Post('public/order')
@UseGuards(AuthGuard)
@ApiOperation({ summary: 'Checkout : create order ' })
@ApiOperation({ summary: 'create order as user' })
createOrder(@UserId() userId: string, @Body() body: CreateOrderDto) {
return this.orderService.createOrder(userId, body);
}
@@ -52,7 +50,7 @@ export class OrderController {
@Post('admin/order')
@UseGuards(AuthGuard)
@ApiOperation({ summary: 'create order ' })
@ApiOperation({ summary: 'create order as admin' })
createOrderAsAdmin(@AdminId() adminId: string, @Body() body: CreateOrderAsAdminDto) {
return this.orderService.createOrdeAsAdmin(adminId, body);
}
@@ -63,6 +61,13 @@ export class OrderController {
createInvoice(@Param('orderId') orderId: string, @Body() body: CreateInvoiceDto) {
return this.orderService.createInvoice(orderId, body);
}
@Post('admin/orders/:orderId/assign-designer')
@UseGuards(AuthGuard)
@ApiOperation({ summary: 'Assign Order Designer ' })
assignDesigner(@Param('orderId') orderId: string, @Body() body: AssignDesignerDto) {
return this.orderService.asignDesigner(orderId, body.designerId);
}
// @UseGuards(AdminAuthGuard)
// @Permissions(Permission.MANAGE_ORDERS)
// @Get('admin/orders')
@@ -0,0 +1,11 @@
import {
IsString
} from 'class-validator';
import { ApiProperty } from '@nestjs/swagger';
export class AssignDesignerDto {
@IsString()
@ApiProperty()
designerId: string;
}
@@ -44,6 +44,9 @@ export class Order extends BaseEntity {
@ManyToOne(() => Admin, { nullable: true })
creator?: Admin
@ManyToOne(() => Admin, { nullable: true })
designer?: Admin
// @Property({ nullable: true })
// userAddress?: string | null;
@@ -1,10 +1,15 @@
export enum OrderStatusEnum {
NEW = 'new',
DRAFT = 'draft',
INVOICED = 'invoiced',
PREPARING = 'preparing',
COMPLETED = 'completed',
IN_DESIGN = 'in_design',
IN_PRINTING = 'in_printing',
FINISHED = 'finished',
CANCELED = 'canceled',
SHIPPED = 'shipped',
}
+27 -6
View File
@@ -59,7 +59,7 @@ export class OrderService {
total: 0,
paidAmount: 0,
balance: 0,
status: OrderStatusEnum.NEW
status: OrderStatusEnum.DRAFT
})
em.persist(order)
@@ -121,8 +121,8 @@ export class OrderService {
const order = await this.em.transactional(async (em) => {
let subTotal = 0
items.forEach(item => {subTotal += item.unitPrice * item.quantity})
const total=subTotal-discount
items.forEach(item => { subTotal += item.unitPrice * item.quantity })
const total = subTotal - discount
const order = this.orderRepository.create({
creator: admin,
@@ -131,8 +131,8 @@ export class OrderService {
subTotal,
total,
paidAmount: 0,
balance:total,
status: OrderStatusEnum.NEW
balance: total,
status: OrderStatusEnum.INVOICED
})
em.persist(order)
@@ -175,7 +175,7 @@ export class OrderService {
status: TicketStatus.PENDING,
admin: null
})
em.persist(ticket)
await em.flush()
@@ -270,4 +270,25 @@ export class OrderService {
return orderItem
}
async asignDesigner(orderId: string, designerId: string) {
const order = await this.orderRepository.findOne({ id: orderId })
if (!order) {
throw new BadRequestException("Order not found")
}
const designer = await this.adminRepository.findOne({ id: designerId })
if (!designer) {
throw new BadRequestException("designer not found")
}
order.designer = designer
order.status=OrderStatusEnum.IN_DESIGN
await this.em.persistAndFlush(order)
return order
}
}
@@ -59,7 +59,7 @@ export class PaymentController {
return this.paymentsService.payOrder(orderId, dto, adminId);
}
@Post('public/payments/:token/verify/online')
@Post('admin/payments/:token/verify/online')
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@ApiOperation({ summary: 'Verify online payment as admin' })