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 { OrderService } from '../providers/order.service';
import { AuthGuard } from '../../auth/guards/auth.guard'; import { AuthGuard } from '../../auth/guards/auth.guard';
import { UserId } from '../../../common/decorators/user-id.decorator'; import { UserId } from '../../../common/decorators/user-id.decorator';
import { AdminAuthGuard } from '../../auth/guards/adminAuth.guard';
import { FindOrdersDto } from '../dto/find-orders.dto'; 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 { Permissions } from 'src/common/decorators/permissions.decorator';
import { Permission } from 'src/common/enums/permission.enum'; import { Permission } from 'src/common/enums/permission.enum';
import { CreateOrderDto } from '../dto/create-order.dto'; import { CreateOrderDto } from '../dto/create-order.dto';
import { CreateInvoiceDto } from '../dto/create-invoice.dto'; import { CreateInvoiceDto } from '../dto/create-invoice.dto';
import { AdminId } from 'src/common/decorators/admin-id.decorator'; import { AdminId } from 'src/common/decorators/admin-id.decorator';
import { CreateOrderAsAdminDto } from '../dto/create-order-as-admin.dto'; import { CreateOrderAsAdminDto } from '../dto/create-order-as-admin.dto';
import { AssignDesignerDto } from '../dto/assign-designer.dto';
@ApiTags('orders') @ApiTags('orders')
@ApiBearerAuth() @ApiBearerAuth()
@@ -22,7 +20,7 @@ export class OrderController {
@Post('public/order') @Post('public/order')
@UseGuards(AuthGuard) @UseGuards(AuthGuard)
@ApiOperation({ summary: 'Checkout : create order ' }) @ApiOperation({ summary: 'create order as user' })
createOrder(@UserId() userId: string, @Body() body: CreateOrderDto) { createOrder(@UserId() userId: string, @Body() body: CreateOrderDto) {
return this.orderService.createOrder(userId, body); return this.orderService.createOrder(userId, body);
} }
@@ -52,7 +50,7 @@ export class OrderController {
@Post('admin/order') @Post('admin/order')
@UseGuards(AuthGuard) @UseGuards(AuthGuard)
@ApiOperation({ summary: 'create order ' }) @ApiOperation({ summary: 'create order as admin' })
createOrderAsAdmin(@AdminId() adminId: string, @Body() body: CreateOrderAsAdminDto) { createOrderAsAdmin(@AdminId() adminId: string, @Body() body: CreateOrderAsAdminDto) {
return this.orderService.createOrdeAsAdmin(adminId, body); return this.orderService.createOrdeAsAdmin(adminId, body);
} }
@@ -63,6 +61,13 @@ export class OrderController {
createInvoice(@Param('orderId') orderId: string, @Body() body: CreateInvoiceDto) { createInvoice(@Param('orderId') orderId: string, @Body() body: CreateInvoiceDto) {
return this.orderService.createInvoice(orderId, body); 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) // @UseGuards(AdminAuthGuard)
// @Permissions(Permission.MANAGE_ORDERS) // @Permissions(Permission.MANAGE_ORDERS)
// @Get('admin/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 }) @ManyToOne(() => Admin, { nullable: true })
creator?: Admin creator?: Admin
@ManyToOne(() => Admin, { nullable: true })
designer?: Admin
// @Property({ nullable: true }) // @Property({ nullable: true })
// userAddress?: string | null; // userAddress?: string | null;
@@ -1,10 +1,15 @@
export enum OrderStatusEnum { export enum OrderStatusEnum {
NEW = 'new', DRAFT = 'draft',
INVOICED = 'invoiced', INVOICED = 'invoiced',
PREPARING = 'preparing',
COMPLETED = 'completed', IN_DESIGN = 'in_design',
IN_PRINTING = 'in_printing',
FINISHED = 'finished',
CANCELED = 'canceled', CANCELED = 'canceled',
SHIPPED = 'shipped',
} }
+27 -6
View File
@@ -59,7 +59,7 @@ export class OrderService {
total: 0, total: 0,
paidAmount: 0, paidAmount: 0,
balance: 0, balance: 0,
status: OrderStatusEnum.NEW status: OrderStatusEnum.DRAFT
}) })
em.persist(order) em.persist(order)
@@ -121,8 +121,8 @@ export class OrderService {
const order = await this.em.transactional(async (em) => { const order = await this.em.transactional(async (em) => {
let subTotal = 0 let subTotal = 0
items.forEach(item => {subTotal += item.unitPrice * item.quantity}) items.forEach(item => { subTotal += item.unitPrice * item.quantity })
const total=subTotal-discount const total = subTotal - discount
const order = this.orderRepository.create({ const order = this.orderRepository.create({
creator: admin, creator: admin,
@@ -131,8 +131,8 @@ export class OrderService {
subTotal, subTotal,
total, total,
paidAmount: 0, paidAmount: 0,
balance:total, balance: total,
status: OrderStatusEnum.NEW status: OrderStatusEnum.INVOICED
}) })
em.persist(order) em.persist(order)
@@ -175,7 +175,7 @@ export class OrderService {
status: TicketStatus.PENDING, status: TicketStatus.PENDING,
admin: null admin: null
}) })
em.persist(ticket) em.persist(ticket)
await em.flush() await em.flush()
@@ -270,4 +270,25 @@ export class OrderService {
return orderItem 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); return this.paymentsService.payOrder(orderId, dto, adminId);
} }
@Post('public/payments/:token/verify/online') @Post('admin/payments/:token/verify/online')
@UseGuards(AdminAuthGuard) @UseGuards(AdminAuthGuard)
@ApiBearerAuth() @ApiBearerAuth()
@ApiOperation({ summary: 'Verify online payment as admin' }) @ApiOperation({ summary: 'Verify online payment as admin' })