import { Body, Controller, Get, Param, Patch, Post, } from '@nestjs/common'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { AuthType, Roles } from '../common/decorators/auth.decorators'; import { CurrentUser } from '../common/decorators/current-user.decorator'; import type { AuthPrincipal } from '../common/decorators/current-user.decorator'; import { CrmService } from './crm.service'; import { CreateNextActionDto, CreateOpportunityDto, CreateTimelineEventDto, SetCustomerAssignmentDto, UpdateNextActionDto, } from './dto/crm.dto'; @ApiTags('CustomerCrm') @ApiBearerAuth() @Controller('admin/customers') @AuthType('admin') @Roles('admin', 'sales') export class CustomerCrmController { constructor(private readonly crmService: CrmService) {} @Get(':id/timeline') timeline(@Param('id') id: string) { return this.crmService.listTimeline(id); } @Post(':id/timeline') addTimeline( @Param('id') id: string, @CurrentUser() user: AuthPrincipal, @Body() dto: CreateTimelineEventDto, ) { return this.crmService.createTimeline(id, user.id, dto); } @Get(':id/next-actions') nextActions(@Param('id') id: string) { return this.crmService.listNextActions(id); } @Post(':id/next-actions') createNextAction( @Param('id') id: string, @Body() dto: CreateNextActionDto, ) { return this.crmService.createNextAction(id, dto); } @Post(':id/opportunities') createOpportunity( @Param('id') id: string, @Body() dto: CreateOpportunityDto, ) { return this.crmService.createOpportunity(id, dto); } @Patch(':id/assignment') setAssignment( @Param('id') id: string, @Body() dto: SetCustomerAssignmentDto, ) { return this.crmService.setCustomerAssignment(id, dto); } } @ApiTags('CustomerCrm') @ApiBearerAuth() @Controller('admin/next-actions') @AuthType('admin') @Roles('admin', 'sales') export class AdminNextActionsController { constructor(private readonly crmService: CrmService) {} @Patch(':id') update(@Param('id') id: string, @Body() dto: UpdateNextActionDto) { return this.crmService.updateNextAction(id, dto); } }