1import { Body, Controller, Delete, Get, Inject, Param, Patch, Post, Query, Req } from "@nestjs/common";
2import type { Request } from "express";
3import { TasksService } from "./tasks.service.js";
4import { ZodValidate } from "../../common/pipes/zod-validation.pipe.js";
5import { requireActor } from "../../common/types.js";
6import {
7 CreateTaskDto,
8 type CreateTaskInput,
9 ListTasksQuery,
10 type ListTasksQueryInput,
11 UpdateTaskDto,
12 type UpdateTaskInput
13} from "./dto.js";
14
15
25@Controller()
26export class TasksController {
27 constructor(@Inject(TasksService) private readonly tasks: TasksService) {}
28
29
30
31 @Get("workspaces/:workspaceId/tasks")
32 list(
33 @Param("workspaceId") workspaceId: string,
34 @Query(ZodValidate(ListTasksQuery)) query: ListTasksQueryInput,
35 @Req() req: Request
36 ) {
37 return this.tasks.list(
38 workspaceId,
39 requireActor(req),
40 {
41 scope: query.scope,
42 status: query.status,
43 dueBefore: query.dueBefore,
44 dueAfter: query.dueAfter,
45 month: query.month,
46 overdue: query.overdue,
47 cursor: query.cursor,
48 limit: String(query.limit)
49 }
50 );
51 }
52
53 @Post("workspaces/:workspaceId/tasks")
54 create(
55 @Param("workspaceId") workspaceId: string,
56 @Body(ZodValidate(CreateTaskDto)) body: CreateTaskInput,
57 @Req() req: Request
58 ) {
59 return this.tasks.create(workspaceId, requireActor(req), body, req);
60 }
61
62
63
64 @Get("workspaces/:workspaceId/tasks/:id")
65 get(@Param("workspaceId") workspaceId: string, @Param("id") id: string, @Req() req: Request) {
66 return this.tasks.get(workspaceId, id, requireActor(req));
67 }
68
69 @Patch("workspaces/:workspaceId/tasks/:id")
70 update(
71 @Param("workspaceId") workspaceId: string,
72 @Param("id") id: string,
73 @Body(ZodValidate(UpdateTaskDto)) body: UpdateTaskInput,
74 @Req() req: Request
75 ) {
76 return this.tasks.update(workspaceId, id, requireActor(req), body, req);
77 }
78
79 @Delete("workspaces/:workspaceId/tasks/:id")
80 remove(@Param("workspaceId") workspaceId: string, @Param("id") id: string, @Req() req: Request) {
81 return this.tasks.remove(workspaceId, id, requireActor(req), req);
82 }
83}
84