-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathcriterion-controller.ts
More file actions
84 lines (79 loc) · 2.14 KB
/
criterion-controller.ts
File metadata and controls
84 lines (79 loc) · 2.14 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
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
import {
Authorized,
Delete,
Get,
JsonController,
Param,
Put,
Post,
Body,
} from "routing-controllers";
import { Inject } from "typedi";
import { UserRole } from "../entities/user-role";
import {
CriterionServiceToken,
ICriterionService,
} from "../services/criterion-service";
import {
CriterionDTO,
SuccessResponseDTO,
convertBetweenEntityAndDTO,
} from "./dto";
import { Criterion } from "../entities/criterion";
@JsonController("/criteria")
export class CriterionController {
public constructor(
@Inject(CriterionServiceToken)
private readonly _criterion: ICriterionService,
) {}
/**
* Get all criteria.
*/
@Get("/")
@Authorized(UserRole.User)
public async getAllCriteria(): Promise<CriterionDTO[]> {
const criteria = await this._criterion.getAllCriteria();
return criteria.map((c) => convertBetweenEntityAndDTO(c, CriterionDTO));
}
/**
* Create a criterion.
*/
@Post("/")
@Authorized(UserRole.Root)
public async createCriterion(
@Body() { data: criterionDTO }: { data: CriterionDTO },
): Promise<CriterionDTO> {
const criterion = convertBetweenEntityAndDTO(criterionDTO, Criterion);
const createdCriterion = await this._criterion.createCriterion(criterion);
return convertBetweenEntityAndDTO(createdCriterion, CriterionDTO);
}
/**
* Update criteria.
*/
@Put("/:id")
@Authorized(UserRole.Root)
public async updateCriterion(
@Param("id") criterionId: number,
@Body() { data: criterionDTO }: { data: CriterionDTO },
): Promise<CriterionDTO> {
const criterion = convertBetweenEntityAndDTO(
{ ...criterionDTO, id: criterionId },
Criterion,
);
const updateCriterion = await this._criterion.updateCriterion(criterion);
return convertBetweenEntityAndDTO(updateCriterion, CriterionDTO);
}
/**
* Delete criteria.
*/
@Delete("/:id")
@Authorized(UserRole.Root)
public async deleteCriterion(
@Param("id") criterionId: number,
): Promise<SuccessResponseDTO> {
await this._criterion.deleteCriterionByID(criterionId);
const response = new SuccessResponseDTO();
response.success = true;
return response;
}
}