1
10import { Body, Controller, HttpCode, Inject, Param, Post, Req } from "@nestjs/common";
11import type { Request } from "express";
12
13import { requireActor } from "../../../common/types.js";
14import { ZodValidate } from "../../../common/pipes/zod-validation.pipe.js";
15import { AssistantService } from "./assistant.service.js";
16import {
17 AiApplyMetadataDto,
18 AiExtractActionsDto,
19 AiFindDuplicatesDto,
20 AiFindStaleDto,
21 AiGenerateFaqsDto,
22 AiSuggestMetadataDto,
23} from "./assistant.dto.js";
24import type {
25 AiApplyMetadataInput,
26 AiExtractActionsInput,
27 AiFindDuplicatesInput,
28 AiFindStaleInput,
29 AiGenerateFaqsInput,
30 AiSuggestMetadataInput,
31} from "./assistant.dto.js";
32
33@Controller()
34export class AssistantController {
35 constructor(@Inject(AssistantService) private readonly assistant: AssistantService) {}
36
37
38 @HttpCode(200)
39 @Post("workspaces/:workspaceId/ai/assistant/extract-actions")
40 extractActions(
41 @Param("workspaceId") workspaceId: string,
42 @Body(ZodValidate(AiExtractActionsDto)) body: AiExtractActionsInput,
43 @Req() req: Request,
44 ) {
45 return this.assistant.extractActions(workspaceId, requireActor(req), body, req);
46 }
47
48
49 @HttpCode(200)
50 @Post("workspaces/:workspaceId/ai/assistant/generate-faqs")
51 generateFaqs(
52 @Param("workspaceId") workspaceId: string,
53 @Body(ZodValidate(AiGenerateFaqsDto)) body: AiGenerateFaqsInput,
54 @Req() req: Request,
55 ) {
56 return this.assistant.generateFaqs(workspaceId, requireActor(req), body, req);
57 }
58
59
60 @HttpCode(200)
61 @Post("workspaces/:workspaceId/ai/assistant/find-duplicates")
62 findDuplicates(
63 @Param("workspaceId") workspaceId: string,
64 @Body(ZodValidate(AiFindDuplicatesDto)) body: AiFindDuplicatesInput,
65 @Req() req: Request,
66 ) {
67 return this.assistant.findDuplicates(workspaceId, requireActor(req), body, req);
68 }
69
70
71 @HttpCode(200)
72 @Post("workspaces/:workspaceId/ai/assistant/find-stale")
73 findStale(
74 @Param("workspaceId") workspaceId: string,
75 @Body(ZodValidate(AiFindStaleDto)) body: AiFindStaleInput,
76 @Req() req: Request,
77 ) {
78 return this.assistant.findStale(workspaceId, requireActor(req), body, req);
79 }
80
81
82 @HttpCode(200)
83 @Post("workspaces/:workspaceId/ai/assistant/suggest-metadata")
84 suggestMetadata(
85 @Param("workspaceId") workspaceId: string,
86 @Body(ZodValidate(AiSuggestMetadataDto)) body: AiSuggestMetadataInput,
87 @Req() req: Request,
88 ) {
89 return this.assistant.suggestMetadata(workspaceId, requireActor(req), body, req);
90 }
91
92
93 @HttpCode(200)
94 @Post("workspaces/:workspaceId/ai/assistant/apply-metadata")
95 applyMetadata(
96 @Param("workspaceId") workspaceId: string,
97 @Body(ZodValidate(AiApplyMetadataDto)) body: AiApplyMetadataInput,
98 @Req() req: Request,
99 ) {
100 return this.assistant.applyMetadata(workspaceId, requireActor(req), body, req);
101 }
102}
103