All files / src/interfaces/mobile-api/sales crm-sales-mobile.controller.ts

0% Statements 0/27
0% Branches 0/8
0% Functions 0/5
0% Lines 0/25

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81                                                                                                                                                                 
import {
  Controller,
  Get,
  Post,
  Put,
  Body,
  Param,
  Query,
  UseGuards,
  Request,
} from '@nestjs/common';
import { LeadService } from '../../../domains/crm/services/lead.service';
import { ActivityService } from '../../../domains/crm/services/activity.service';
import { PermissionGuard } from '../../../platform/permissions/permission.guard';
import { RequirePermission } from '../../../platform/permissions/permission.decorator';
import { Types } from 'mongoose';
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
 
@Controller('mobile-api/sales/crm')
@UseGuards(PermissionGuard)
@ApiTags('CrmSalesMobile')
export class CrmSalesMobileController {
  constructor(
    private readonly leadService: LeadService,
    private readonly activityService: ActivityService,
  ) {}
 
  @Get('leads')
  @RequirePermission('crm_lead', 'read')
  @ApiOperation({ summary: 'Get my leads operation' })
  @ApiResponse({ status: 200, description: 'Operation successful' })
  async getMyLeads(@Request() req: any) {
    const tenantId = new Types.ObjectId(req.user.tenantId);
    return this.leadService.listLeads(
      tenantId,
      { ownerId: req.user.userId },
      1,
      50,
    );
  }
 
  @Post('leads')
  @RequirePermission('crm_lead', 'create')
  @ApiOperation({ summary: 'Create lead quick operation' })
  @ApiResponse({ status: 201, description: 'Operation successful' })
  async createLeadQuick(@Request() req: any, @Body() body: any) {
    const tenantId = new Types.ObjectId(req.user.tenantId);
    const userId = new Types.ObjectId(req.user.userId);
    return this.leadService.createLead(
      tenantId,
      { ...body, ownerId: userId },
      userId,
    );
  }
 
  @Get('activities/overdue')
  @RequirePermission('crm_activity', 'read')
  @ApiOperation({ summary: 'Get my overdue activities operation' })
  @ApiResponse({ status: 200, description: 'Operation successful' })
  async getMyOverdueActivities(@Request() req: any) {
    const tenantId = new Types.ObjectId(req.user.tenantId);
    const userId = new Types.ObjectId(req.user.userId);
    return this.activityService.getOverdueActivities(tenantId, userId);
  }
 
  @Post('activities/:id/checkin')
  @RequirePermission('crm_activity', 'update')
  @ApiOperation({ summary: 'Activity checkin operation' })
  @ApiResponse({ status: 201, description: 'Operation successful' })
  async activityCheckin(
    @Request() req: any,
    @Param('id') id: string,
    @Body('latitude') latitude: number,
    @Body('longitude') longitude: number,
  ) {
    const tenantId = new Types.ObjectId(req.user.tenantId);
    const outcome = `Geolocated checkin at (${latitude}, ${longitude})`;
    return this.activityService.completeActivity(tenantId, id, outcome);
  }
}