hard delete order

This commit is contained in:
2026-01-21 17:12:12 +03:30
parent ca8d6c473d
commit 92881c5b7c
5 changed files with 43 additions and 6 deletions
@@ -36,7 +36,7 @@ export class AdminController {
return admin; return admin;
} }
@Get('admin/admins/profile') @Get('admin/admins/me')
@UseGuards(AdminAuthGuard) @UseGuards(AdminAuthGuard)
@Permissions(Permission.MANAGE_ADMINS) @Permissions(Permission.MANAGE_ADMINS)
@ApiOperation({ summary: 'admin' }) @ApiOperation({ summary: 'admin' })
+1 -1
View File
@@ -1,6 +1,6 @@
import { Entity, Index, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core'; import { Entity, Index, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
@Entity({ tableName: 'otps' }) @Entity({ tableName: 'otp' })
@Index({ properties: ['phone'] }) @Index({ properties: ['phone'] })
export class Otp { export class Otp {
[OptionalProps]?: 'createdAt' [OptionalProps]?: 'createdAt'
@@ -1,4 +1,4 @@
import { Controller, Get, Post, Param, UseGuards, Patch, Query, Body } from '@nestjs/common'; import { Controller, Get, Post, Param, UseGuards, Patch, Query, Body, Delete } from '@nestjs/common';
import { ApiTags, ApiOperation, ApiBearerAuth, ApiParam, ApiHeader, ApiBody, ApiQuery } from '@nestjs/swagger'; import { ApiTags, ApiOperation, ApiBearerAuth, ApiParam, ApiHeader, ApiBody, ApiQuery } from '@nestjs/swagger';
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';
@@ -55,6 +55,13 @@ export class OrderController {
return this.orderService.createOrdeAsAdmin(adminId, body); return this.orderService.createOrdeAsAdmin(adminId, body);
} }
@Delete('admin/orders/:orderId')
@UseGuards(AuthGuard)
@ApiOperation({ summary: 'Hard Delete Order ' })
hardDelete(@Param('orderId') orderId: string) {
return this.orderService.hardDeleteOrder(orderId);
}
@Post('admin/orders/:orderId/create-invoice') @Post('admin/orders/:orderId/create-invoice')
@UseGuards(AuthGuard) @UseGuards(AuthGuard)
@ApiOperation({ summary: 'Create invoice for new order' }) @ApiOperation({ summary: 'Create invoice for new order' })
@@ -68,6 +75,8 @@ export class OrderController {
assignDesigner(@Param('orderId') orderId: string, @Body() body: AssignDesignerDto) { assignDesigner(@Param('orderId') orderId: string, @Body() body: AssignDesignerDto) {
return this.orderService.asignDesigner(orderId, body.designerId); 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')
+27 -3
View File
@@ -93,7 +93,8 @@ export class OrderService {
user, user,
attachments, attachments,
status: TicketStatus.PENDING, status: TicketStatus.PENDING,
admin: null admin: null,
order
}) })
em.persist(ticket) em.persist(ticket)
@@ -173,7 +174,8 @@ export class OrderService {
user, user,
attachments, attachments,
status: TicketStatus.PENDING, status: TicketStatus.PENDING,
admin: null admin: null,
order
}) })
em.persist(ticket) em.persist(ticket)
@@ -283,7 +285,7 @@ export class OrderService {
} }
order.designer = designer order.designer = designer
order.status=OrderStatusEnum.IN_DESIGN order.status = OrderStatusEnum.IN_DESIGN
await this.em.persistAndFlush(order) await this.em.persistAndFlush(order)
@@ -291,4 +293,26 @@ export class OrderService {
return order return order
} }
async hardDeleteOrder(orderId: string) {
const order = await this.orderRepository.findOne({ id: orderId })
if (!order) {
throw new BadRequestException("Order not found")
}
if (![OrderStatusEnum.DRAFT, OrderStatusEnum.INVOICED].includes(order.status)) {
throw new BadRequestException("Order status must be of of Drfat or Invoiced")
}
if (order.payments.length > 0) {
throw new BadRequestException("order with payments can not be deleted!")
}
await this.em.transactional(async (em) => {
await this.orderRepository.nativeDelete(order)
await this.orderItemRepository.nativeDelete({ order: { id: orderId } })
await this.ticketRepository.nativeDelete({ order: { id: orderId } })
await em.flush()
})
return { message: "Order deleted successfully" }
}
} }
@@ -13,6 +13,7 @@ import { BaseEntity } from "../../../common/entities/base.entity";
import { User } from "../../user/entities/user.entity"; import { User } from "../../user/entities/user.entity";
import { TicketStatus } from "../enums/ticket-status.enum"; import { TicketStatus } from "../enums/ticket-status.enum";
import { Admin } from 'src/modules/admin/entities/admin.entity'; import { Admin } from 'src/modules/admin/entities/admin.entity';
import { Order } from 'src/modules/order/entities/order.entity';
@Entity() @Entity()
export class Ticket extends BaseEntity { export class Ticket extends BaseEntity {
@@ -39,4 +40,7 @@ export class Ticket extends BaseEntity {
@Property({ type: 'json' }) @Property({ type: 'json' })
attachments: string[] attachments: string[]
@ManyToOne(() => Order)
order!: Order
} }