1
15import { Body, Controller, HttpCode, Inject, Param, Post, Req, Res } from "@nestjs/common";
16import type { Request, Response } from "express";
17
18import { DatabaseAiService } from "./database-ai.service.js";
19import { ZodValidate } from "../../common/pipes/zod-validation.pipe.js";
20import { requireActor } from "../../common/types.js";
21import {
22 AiExtractDto,
23 AiExtractPreviewDto,
24 AiGenerateDatabaseDto,
25 AiGenerateFormulaDto,
26 type AiExtractInput,
27 type AiExtractPreviewInput,
28 type AiGenerateDatabaseInput,
29 type AiGenerateFormulaInput,
30} from "./database-ai.dto.js";
31
32@Controller()
33export class DatabaseAiController {
34 constructor(@Inject(DatabaseAiService) private readonly dbAi: DatabaseAiService) {}
35
36
37 @Post("workspaces/:workspaceId/ai/databases/generate")
38 generate(
39 @Param("workspaceId") workspaceId: string,
40 @Body(ZodValidate(AiGenerateDatabaseDto)) body: AiGenerateDatabaseInput,
41 @Req() req: Request,
42 @Res() res: Response,
43 ) {
44 return this.dbAi.generate(workspaceId, requireActor(req), body, req, res);
45 }
46
47
48 @Post("workspaces/:workspaceId/ai/databases/extract")
49 extract(
50 @Param("workspaceId") workspaceId: string,
51 @Body(ZodValidate(AiExtractDto)) body: AiExtractInput,
52 @Req() req: Request,
53 @Res() res: Response,
54 ) {
55 return this.dbAi.extract(workspaceId, requireActor(req), body, req, res);
56 }
57
58
59 @Post("workspaces/:workspaceId/ai/databases/extract/preview")
60 @HttpCode(200)
61 preview(
62 @Param("workspaceId") workspaceId: string,
63 @Body(ZodValidate(AiExtractPreviewDto)) body: AiExtractPreviewInput,
64 @Req() req: Request,
65 ) {
66 return this.dbAi.preview(workspaceId, requireActor(req), body);
67 }
68
69
70 @Post("workspaces/:workspaceId/ai/databases/formulas")
71 @HttpCode(200)
72 formula(
73 @Param("workspaceId") workspaceId: string,
74 @Body(ZodValidate(AiGenerateFormulaDto)) body: AiGenerateFormulaInput,
75 @Req() req: Request,
76 ) {
77 return this.dbAi.formula(workspaceId, requireActor(req), body, req);
78 }
79}
80