import { Controller, Get, Post, Put, Delete, Body, Param, Query, UseGuards, ParseUUIDPipe, } from '@nestjs/common'; import { JwtAuthGuard } from '@modules/auth/guards/jwt-auth.guard'; import { CurrentUser } from '@modules/auth/decorators/current-user.decorator'; import { ActivitiesService } from '../services'; import { CreateActivityDto, UpdateActivityDto, CompleteActivityDto, ActivityListQueryDto, ActivityResponseDto, PaginatedActivitiesDto, } from '../dto'; interface RequestUser { id: string; tenant_id: string; email: string; role: string; } @Controller('sales/activities') @UseGuards(JwtAuthGuard) export class ActivitiesController { constructor(private readonly activitiesService: ActivitiesService) {} @Get() async findAll( @CurrentUser() user: RequestUser, @Query() query: ActivityListQueryDto, ): Promise { return this.activitiesService.findAll(user.tenant_id, query); } @Get('upcoming') async getUpcoming(@CurrentUser() user: RequestUser): Promise { return this.activitiesService.getUpcoming(user.tenant_id, user.id); } @Get(':id') async findOne( @CurrentUser() user: RequestUser, @Param('id', ParseUUIDPipe) id: string, ): Promise { return this.activitiesService.findOne(user.tenant_id, id); } @Post() async create( @CurrentUser() user: RequestUser, @Body() dto: CreateActivityDto, ): Promise { return this.activitiesService.create(user.tenant_id, user.id, dto); } @Put(':id') async update( @CurrentUser() user: RequestUser, @Param('id', ParseUUIDPipe) id: string, @Body() dto: UpdateActivityDto, ): Promise { return this.activitiesService.update(user.tenant_id, id, dto); } @Post(':id/complete') async complete( @CurrentUser() user: RequestUser, @Param('id', ParseUUIDPipe) id: string, @Body() dto: CompleteActivityDto, ): Promise { return this.activitiesService.complete(user.tenant_id, id, dto); } @Delete(':id') async remove( @CurrentUser() user: RequestUser, @Param('id', ParseUUIDPipe) id: string, ): Promise<{ message: string }> { await this.activitiesService.remove(user.tenant_id, id); return { message: 'Activity deleted successfully' }; } }