Assist_Design/apps/bff/src/modules/orders/orders.controller.ts

61 lines
1.8 KiB
TypeScript
Raw Normal View History

import { Body, Controller, Get, Param, Post, Request, UsePipes } from "@nestjs/common";
2025-08-27 20:01:46 +09:00
import { OrderOrchestrator } from "./services/order-orchestrator.service";
import type { RequestWithUser } from "@bff/modules/auth/auth.types";
2025-08-27 10:54:05 +09:00
import { Logger } from "nestjs-pino";
import { ZodValidationPipe } from "@bff/core/validation";
import {
createOrderRequestSchema,
sfOrderIdParamSchema,
type CreateOrderRequest,
type SfOrderIdParam,
} from "@customer-portal/domain";
2025-08-21 15:24:40 +09:00
@Controller("orders")
export class OrdersController {
2025-08-27 10:54:05 +09:00
constructor(
2025-08-27 20:01:46 +09:00
private orderOrchestrator: OrderOrchestrator,
2025-08-27 10:54:05 +09:00
private readonly logger: Logger
) {}
@Post()
@UsePipes(new ZodValidationPipe(createOrderRequestSchema))
async create(@Request() req: RequestWithUser, @Body() body: CreateOrderRequest) {
2025-08-28 16:57:57 +09:00
this.logger.log(
{
userId: req.user?.id,
orderType: body.orderType,
skuCount: body.skus?.length || 0,
2025-08-28 16:57:57 +09:00
},
"Order creation request received"
);
2025-08-27 20:01:46 +09:00
try {
return await this.orderOrchestrator.createOrder(req.user.id, body);
} catch (error) {
2025-08-28 16:57:57 +09:00
this.logger.error(
{
error: error instanceof Error ? error.message : String(error),
userId: req.user?.id,
orderType: body.orderType,
2025-08-28 16:57:57 +09:00
},
"Order creation failed"
);
2025-08-27 20:01:46 +09:00
throw error;
}
}
@Get("user")
async getUserOrders(@Request() req: RequestWithUser) {
return this.orderOrchestrator.getOrdersForUser(req.user.id);
}
@Get(":sfOrderId")
@UsePipes(new ZodValidationPipe(sfOrderIdParamSchema))
async get(@Request() req: RequestWithUser, @Param() params: SfOrderIdParam) {
return this.orderOrchestrator.getOrder(params.sfOrderId);
}
// Note: Order provisioning has been moved to SalesforceProvisioningController
// This controller now focuses only on customer-facing order operations
}