1
13import { Body, Controller, Inject, Param, Post, Req, Res } from "@nestjs/common";
14import type { Request, Response } from "express";
15
16import { AiGenerateService } from "./generate.service.js";
17import { ZodValidate } from "../../../common/pipes/zod-validation.pipe.js";
18import { requireActor } from "../../../common/types.js";
19import { SkipIdempotency } from "../../../common/middleware/idempotency.js";
20import { AiGenerateDto, type AiGenerateInput } from "./generate.dto.js";
21
22@Controller()
23export class AiGenerateController {
24 constructor(@Inject(AiGenerateService) private readonly generateService: AiGenerateService) {}
25
26
36 @Post("workspaces/:workspaceId/ai/generate")
37 @SkipIdempotency()
38 generatePage(
39 @Param("workspaceId") workspaceId: string,
40 @Body(ZodValidate(AiGenerateDto)) body: AiGenerateInput,
41 @Req() req: Request,
42 @Res() res: Response,
43 ) {
44 const keyHeader = req.header("idempotency-key");
45 const idempotencyKey = keyHeader && keyHeader.trim() ? keyHeader.trim() : undefined;
46 return this.generateService.generate(workspaceId, requireActor(req), body, idempotencyKey, req, res);
47 }
48}
49