Files
dukang/server/dukang-api/src/modules/ops/admin-proxy-orders.controller.ts
T
2026-08-04 21:38:49 +08:00

65 lines
2.0 KiB
TypeScript

import { Body, Controller, Get, Param, Post, Req, UseGuards } from '@nestjs/common';
import type { Request } from 'express';
import { CurrentUser } from '../../common/decorators/current-user.decorator';
import { HqAuthGuard } from '../../common/guards/hq-auth.guard';
import {
HqPermissionGuard,
RequireHqPermissions,
} from '../../common/guards/hq-permission.guard';
import type { AuthUser } from '../../common/guards/jwt-auth.guard';
import { HqOperation } from '../../common/hq-operation/hq-operation.decorator';
import { HqOperationAction } from '../../common/hq-operation/hq-operation.constants';
import { TradeService } from '../trade/trade.service';
import {
HqProxyOrderCreateDto,
HqProxyOrderPayDto,
HqProxyOrderPreviewDto,
} from './dto/hq-proxy-order.dto';
@Controller('admin/proxy-orders')
@UseGuards(HqAuthGuard, HqPermissionGuard)
@RequireHqPermissions('orders')
export class AdminProxyOrdersController {
constructor(private readonly tradeService: TradeService) {}
@Get('options')
options() {
return this.tradeService.getHqProxyOrderOptions();
}
@Post('preview')
preview(@Body() dto: HqProxyOrderPreviewDto) {
return this.tradeService.previewPartnerProxyOrder(dto, { bypassWhitelist: true });
}
@Post()
@HqOperation({
action: HqOperationAction.ORDER_PROXY_CREATE,
refType: 'ORDER',
batch: true,
includeBody: true,
})
create(
@CurrentUser() user: AuthUser,
@Body() dto: HqProxyOrderCreateDto,
@Req() req: Request,
) {
return this.tradeService.createHqProxyOrder(user.actorId, dto, req);
}
@Post(':id/pay')
pay(@Param('id') id: string, @Body() dto: HqProxyOrderPayDto) {
return this.tradeService.payHqProxyOrder(BigInt(id), dto.payMethod ?? 'NATIVE');
}
@Post(':id/pay/mock-confirm')
mockConfirmPay(@Param('id') id: string) {
return this.tradeService.mockConfirmProxyPay(BigInt(id), { hq: true });
}
@Get(':id/pay-status')
payStatus(@Param('id') id: string) {
return this.tradeService.getProxyPayStatus(BigInt(id));
}
}