-
Notifications
You must be signed in to change notification settings - Fork 70
/
event.controller.ts
120 lines (114 loc) · 3.2 KB
/
event.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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import {
Count,
CountSchema,
Filter,
FilterExcludingWhere,
Where,
repository,
} from '@loopback/repository';
import {get, getModelSchemaRef, param, post, requestBody} from '@loopback/rest';
import {WorkflowRepository} from '@sourceloop/bpmn-service';
import {
CONTENT_TYPE,
OPERATION_SECURITY_SPEC,
STATUS_CODE,
} from '@sourceloop/core';
import {STRATEGY, authenticate} from 'loopback4-authentication';
import {authorize} from 'loopback4-authorization';
import {TaskPermssionKey} from '../enums/permission-key.enum';
import {Event, EventWorkflow} from '../models';
import {EventRepository, EventWorkflowRepository} from '../repositories';
const baseUrl = '/events';
export class EventController {
constructor(
@repository(EventWorkflowRepository)
private readonly eventWorkflowMapping: EventWorkflowRepository,
@repository(EventRepository)
private readonly eventRepository: EventRepository,
@repository(WorkflowRepository)
private readonly workflowRepository: WorkflowRepository,
) {}
@authenticate(STRATEGY.BEARER)
@authorize({
permissions: [TaskPermssionKey.ViewEvent],
})
@get(baseUrl, {
security: OPERATION_SECURITY_SPEC,
responses: {
[STATUS_CODE.OK]: {
description: 'Array of Event model instances',
content: {
[CONTENT_TYPE.JSON]: {
schema: {
type: 'array',
items: getModelSchemaRef(Event, {includeRelations: true}),
},
},
},
},
},
})
async find(@param.filter(Event) filter?: Filter<Event>) {
return this.eventRepository.find(filter);
}
@authenticate(STRATEGY.BEARER)
@authorize({
permissions: [TaskPermssionKey.ViewEvent],
})
@get(`${baseUrl}/{id}`, {
security: OPERATION_SECURITY_SPEC,
responses: {
[STATUS_CODE.OK]: {
description: 'Event model instance',
content: {
[CONTENT_TYPE.JSON]: {
schema: getModelSchemaRef(Event, {includeRelations: true}),
},
},
},
},
})
async findById(
@param.path.string('id') id: string,
@param.filter(Event, {exclude: 'where'})
filter?: FilterExcludingWhere<Event>,
): Promise<Event> {
return this.eventRepository.findById(id, filter);
}
@authenticate(STRATEGY.BEARER)
@authorize({
permissions: [TaskPermssionKey.ViewEvent],
})
@get(`${baseUrl}/count`, {
security: OPERATION_SECURITY_SPEC,
responses: {
[STATUS_CODE.OK]: {
description: 'Event model count',
content: {[CONTENT_TYPE.JSON]: {schema: CountSchema}},
},
},
})
async count(@param.where(Event) where?: Where<Event>): Promise<Count> {
return this.eventRepository.count(where);
}
@authenticate(STRATEGY.BEARER)
@authorize({permissions: ['*']})
@post(`${baseUrl}/mapping`, {
security: OPERATION_SECURITY_SPEC,
responses: {},
})
async mapEventToWorkflow(
@requestBody({
content: {
[CONTENT_TYPE.JSON]: {
schema: getModelSchemaRef(EventWorkflow, {
title: 'EventWorkflowMapping',
}),
},
},
})
eventWorkflowMapping: Omit<EventWorkflow, 'id'>,
) {
await this.eventWorkflowMapping.create(eventWorkflowMapping);
}
}