87 lines
2.1 KiB
TypeScript
87 lines
2.1 KiB
TypeScript
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);
|
|
}
|
|
}
|