-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathadmin-area-data.controller.ts
99 lines (94 loc) · 2.84 KB
/
admin-area-data.controller.ts
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import {
Body,
Controller,
Get,
Param,
Post,
UploadedFile,
UseGuards,
UseInterceptors,
} from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import {
ApiBearerAuth,
ApiBody,
ApiConsumes,
ApiOperation,
ApiParam,
ApiResponse,
ApiTags,
} from '@nestjs/swagger';
import { Roles } from '../../roles.decorator';
import { RolesGuard } from '../../roles.guard';
import { AdminDataReturnDto } from '../admin-area-dynamic-data/dto/admin-data-return.dto';
import { UserRole } from '../user/user-role.enum';
import { AdminAreaDataService } from './admin-area-data.service';
import { UploadAdminAreaDataJsonDto } from './dto/upload-admin-area-data.dto';
import { FILE_UPLOAD_API_FORMAT } from '../../shared/file-upload-api-format';
@ApiBearerAuth()
@UseGuards(RolesGuard)
@ApiTags('admin-area-data')
@Controller('admin-area-data')
export class AdminAreaDataController {
private readonly adminAreaDataService: AdminAreaDataService;
public constructor(adminAreaDataService: AdminAreaDataService) {
this.adminAreaDataService = adminAreaDataService;
}
@Roles(UserRole.Admin)
@ApiOperation({
summary: 'Upload (and overwrite) static admin-area data via CSV',
})
@ApiResponse({
status: 201,
description: 'Uploaded static admin-area data',
})
@ApiResponse({
status: 400,
description: 'Validation errors in content of CSV',
})
@Post('upload/csv')
@ApiConsumes('multipart/form-data')
@ApiBody(FILE_UPLOAD_API_FORMAT)
@UseInterceptors(FileInterceptor('file'))
public async uploadCsv(@UploadedFile() adminAreaData): Promise<void> {
await this.adminAreaDataService.uploadCsv(adminAreaData);
}
@Roles(UserRole.Admin)
@ApiOperation({
summary: 'Upload (and overwrite) static admin-area data via JSON',
})
@ApiResponse({
status: 201,
description: 'Uploaded static admin-area data',
})
@Post('upload/json')
@ApiConsumes()
@UseInterceptors()
public async uploadJson(
@Body() dataPlaceCode: UploadAdminAreaDataJsonDto,
): Promise<void> {
await this.adminAreaDataService.uploadJson(dataPlaceCode);
}
@ApiOperation({
summary:
'Get static indicator data per admin-area for given indicator and country.',
})
@ApiParam({ name: 'countryCodeISO3', required: true, type: 'string' })
@ApiParam({ name: 'adminLevel', required: true, type: 'number' })
@ApiParam({ name: 'indicator', required: true, type: 'string' })
@ApiResponse({
status: 200,
description: 'Static data per admin-area for given indicator and country',
type: [AdminDataReturnDto],
})
@Get(':countryCodeISO3/:adminLevel/:indicator')
public async getAdminAreaData(
@Param() params,
): Promise<AdminDataReturnDto[]> {
return await this.adminAreaDataService.getAdminAreaData(
params.countryCodeISO3,
params.adminLevel,
params.indicator,
);
}
}