Files
twenty/packages/twenty-server/src/modules/dashboard/controllers/dashboard.controller.ts
T
Raphaël Bosi 5af2d37253 [DASHBOARDS] Dashboard duplication (#16291)
## Description

- Created a Dashboard duplication action
- Created a new duplication custom resolver
- Created the service using the v2 of the API
- Created the integration tests following the v2 methodology

## Video QA


https://github.com/user-attachments/assets/e409951a-5946-4da0-91a0-1f7d2ecadb08
2025-12-11 11:15:15 +00:00

31 lines
1.3 KiB
TypeScript

import { Controller, Param, Post, UseFilters, UseGuards } from '@nestjs/common';
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
import { JwtAuthGuard } from 'src/engine/guards/jwt-auth.guard';
import { NoPermissionGuard } from 'src/engine/guards/no-permission.guard';
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
import { DuplicatedDashboardDTO } from 'src/modules/dashboard/dtos/duplicated-dashboard.dto';
import { DashboardRestApiExceptionFilter } from 'src/modules/dashboard/filters/dashboard-rest-api-exception.filter';
import { DashboardDuplicationService } from 'src/modules/dashboard/services/dashboard-duplication.service';
@Controller('rest/dashboards')
@UseGuards(JwtAuthGuard, WorkspaceAuthGuard, NoPermissionGuard)
@UseFilters(DashboardRestApiExceptionFilter)
export class DashboardController {
constructor(
private readonly dashboardDuplicationService: DashboardDuplicationService,
) {}
@Post(':id/duplicate')
async duplicate(
@Param('id') id: string,
@AuthWorkspace() workspace: WorkspaceEntity,
): Promise<DuplicatedDashboardDTO> {
return this.dashboardDuplicationService.duplicateDashboard(
id,
workspace.id,
);
}
}