forked from Nova-reward/Nova-Rewards
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcampaigns.controller.ts
More file actions
53 lines (49 loc) · 2.33 KB
/
Copy pathcampaigns.controller.ts
File metadata and controls
53 lines (49 loc) · 2.33 KB
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
import { Controller, Get, Query, Param, UseGuards, BadRequestException, ValidationPipe } from '@nestjs/common';
import { CampaignsService } from './campaigns.service';
import { QueryCampaignsDto } from './dto/query-campaigns.dto';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { ApiTags, ApiOperation, ApiResponse, ApiBearerAuth, ApiQuery } from '@nestjs/swagger';
@ApiTags('campaigns')
@Controller('api/campaigns')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth()
export class CampaignsController {
constructor(private readonly campaignsService: CampaignsService) {}
@Get()
@ApiOperation({ summary: 'Get all campaigns with filtering and pagination' })
@ApiResponse({ status: 200, description: 'Returns paginated campaigns' })
@ApiResponse({ status: 400, description: 'Invalid query parameters' })
@ApiResponse({ status: 401, description: 'Unauthorized' })
@ApiQuery({ name: 'status', required: false, enum: ['draft', 'active', 'paused', 'completed', 'cancelled'] })
@ApiQuery({ name: 'merchantId', required: false, type: 'string' })
@ApiQuery({ name: 'page', required: false, type: 'number', example: 1 })
@ApiQuery({ name: 'pageSize', required: false, type: 'number', example: 20 })
async findAll(@Query(new ValidationPipe({ transform: true })) query: QueryCampaignsDto) {
try {
return await this.campaignsService.findAll(query);
} catch (error) {
if (error instanceof BadRequestException) {
throw error;
}
throw new BadRequestException('Invalid query parameters');
}
}
@Get(':id')
@ApiOperation({ summary: 'Get a single campaign by ID' })
@ApiResponse({ status: 200, description: 'Returns the campaign' })
@ApiResponse({ status: 404, description: 'Campaign not found' })
@ApiResponse({ status: 401, description: 'Unauthorized' })
async findOne(@Param('id') id: string) {
return await this.campaignsService.findOne(id);
}
@Get('merchant/:merchantId')
@ApiOperation({ summary: 'Get campaigns by merchant ID' })
@ApiResponse({ status: 200, description: 'Returns merchant campaigns' })
@ApiResponse({ status: 401, description: 'Unauthorized' })
async findByMerchant(
@Param('merchantId') merchantId: string,
@Query(new ValidationPipe({ transform: true })) query: QueryCampaignsDto,
) {
return await this.campaignsService.findByMerchant(merchantId, query);
}
}