import { Inject, Body, Controller, Delete, Get, Param, Patch, Post, Query, Req } from "@nestjs/common"; import type { Request } from "express"; import { BlockService } from "./block.service.js"; import { ZodValidate } from "../../common/pipes/zod-validation.pipe.js"; import { requireActor } from "../../common/types.js"; import { BatchBlocksDto, type BatchBlocksInput, CreateBlockDto, type CreateBlockInput, DuplicateBlockDto, type DuplicateBlockInput, ListBlocksQuery, type ListBlocksInput, MoveBlockDto, type MoveBlockInput, UpdateBlockDto, type UpdateBlockInput } from "./dto.js"; @Controller() export class BlocksController { constructor(@Inject(BlockService) private readonly blocks: BlockService) {} @Get("pages/:pageId/blocks") list( @Param("pageId") pageId: string, @Query(ZodValidate(ListBlocksQuery)) query: ListBlocksInput, @Req() req: Request ) { return this.blocks.list(pageId, requireActor(req), query); } @Post("pages/:pageId/blocks") create( @Param("pageId") pageId: string, @Body(ZodValidate(CreateBlockDto)) body: CreateBlockInput, @Req() req: Request ) { return this.blocks.create(pageId, requireActor(req), body, req); } @Get("pages/:pageId/content") content(@Param("pageId") pageId: string, @Req() req: Request) { return this.blocks.content(pageId, requireActor(req)); } @Patch("blocks/:id") update( @Param("id") id: string, @Body(ZodValidate(UpdateBlockDto)) body: UpdateBlockInput, @Req() req: Request ) { return this.blocks.update(id, requireActor(req), body, req); } @Post("blocks/:id/move") move( @Param("id") id: string, @Body(ZodValidate(MoveBlockDto)) body: MoveBlockInput, @Req() req: Request ) { return this.blocks.move(id, requireActor(req), body, req); } @Delete("blocks/:id") delete(@Param("id") id: string, @Req() req: Request) { return this.blocks.delete(id, requireActor(req), req); } @Post("blocks/:id/duplicate") duplicate( @Param("id") id: string, @Body(ZodValidate(DuplicateBlockDto)) body: DuplicateBlockInput, @Req() req: Request ) { return this.blocks.duplicate(id, requireActor(req), req, body); } @Post("blocks/batch") batch( @Body(ZodValidate(BatchBlocksDto)) body: BatchBlocksInput, @Req() req: Request ) { return this.blocks.batch(body.pageId, requireActor(req), body, req); } }