Files
nademitex_server/src/crm/customer-crm.controller.ts
T

87 lines
2.1 KiB
TypeScript
Raw Normal View History

2026-10-10 10:35:56 +03:30
import {
Body,
Controller,
Get,
Param,
Patch,
Post,
} from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
2026-10-10 10:35:56 +03:30
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()
2026-10-10 10:35:56 +03:30
@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()
2026-10-10 10:35:56 +03:30
@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);
}
}