@flusys/nestjs-event-manager 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1328 -0
- package/adapters/event-manager.adapter.d.ts +12 -0
- package/adapters/index.d.ts +1 -0
- package/cjs/adapters/event-manager.adapter.js +71 -0
- package/cjs/adapters/index.js +18 -0
- package/cjs/config/event-manager.constants.js +13 -0
- package/cjs/config/index.js +18 -0
- package/cjs/controllers/event-participant.controller.js +271 -0
- package/cjs/controllers/event.controller.js +229 -0
- package/cjs/controllers/index.js +19 -0
- package/cjs/docs/event-manager-swagger.config.js +135 -0
- package/cjs/docs/index.js +24 -0
- package/cjs/dtos/calendar-query.dto.js +186 -0
- package/cjs/dtos/event-participant.dto.js +226 -0
- package/cjs/dtos/event.dto.js +291 -0
- package/cjs/dtos/index.js +20 -0
- package/cjs/entities/event-participant.entity.js +96 -0
- package/cjs/entities/event-with-company.entity.js +56 -0
- package/cjs/entities/event.entity.js +143 -0
- package/cjs/entities/index.js +55 -0
- package/cjs/index.js +27 -0
- package/cjs/interfaces/event-manager-module.interface.js +4 -0
- package/cjs/interfaces/event.interface.js +4 -0
- package/cjs/interfaces/index.js +19 -0
- package/cjs/modules/event-manager.module.js +133 -0
- package/cjs/modules/index.js +18 -0
- package/cjs/services/event-manager-config.service.js +76 -0
- package/cjs/services/event-manager-datasource.provider.js +181 -0
- package/cjs/services/event-manager-helper.service.js +253 -0
- package/cjs/services/event-participant.service.js +164 -0
- package/cjs/services/event.service.js +421 -0
- package/cjs/services/index.js +22 -0
- package/config/event-manager.constants.d.ts +1 -0
- package/config/index.d.ts +1 -0
- package/controllers/event-participant.controller.d.ts +31 -0
- package/controllers/event.controller.d.ts +24 -0
- package/controllers/index.d.ts +2 -0
- package/docs/event-manager-swagger.config.d.ts +3 -0
- package/docs/index.d.ts +2 -0
- package/dtos/calendar-query.dto.d.ts +23 -0
- package/dtos/event-participant.dto.d.ts +31 -0
- package/dtos/event.dto.d.ts +37 -0
- package/dtos/index.d.ts +3 -0
- package/entities/event-participant.entity.d.ts +8 -0
- package/entities/event-with-company.entity.d.ts +4 -0
- package/entities/event.entity.d.ts +14 -0
- package/entities/index.d.ts +11 -0
- package/fesm/adapters/event-manager.adapter.js +61 -0
- package/fesm/adapters/index.js +1 -0
- package/fesm/config/event-manager.constants.js +3 -0
- package/fesm/config/index.js +1 -0
- package/fesm/controllers/event-participant.controller.js +261 -0
- package/fesm/controllers/event.controller.js +219 -0
- package/fesm/controllers/index.js +2 -0
- package/fesm/docs/event-manager-swagger.config.js +128 -0
- package/fesm/docs/index.js +4 -0
- package/fesm/dtos/calendar-query.dto.js +168 -0
- package/fesm/dtos/event-participant.dto.js +199 -0
- package/fesm/dtos/event.dto.js +270 -0
- package/fesm/dtos/index.js +3 -0
- package/fesm/entities/event-participant.entity.js +86 -0
- package/fesm/entities/event-with-company.entity.js +46 -0
- package/fesm/entities/event.entity.js +133 -0
- package/fesm/entities/index.js +24 -0
- package/fesm/index.js +10 -0
- package/fesm/interfaces/event-manager-module.interface.js +3 -0
- package/fesm/interfaces/event.interface.js +1 -0
- package/fesm/interfaces/index.js +2 -0
- package/fesm/modules/event-manager.module.js +123 -0
- package/fesm/modules/index.js +1 -0
- package/fesm/services/event-manager-config.service.js +66 -0
- package/fesm/services/event-manager-datasource.provider.js +130 -0
- package/fesm/services/event-manager-helper.service.js +243 -0
- package/fesm/services/event-participant.service.js +154 -0
- package/fesm/services/event.service.js +411 -0
- package/fesm/services/index.js +5 -0
- package/index.d.ts +9 -0
- package/interfaces/event-manager-module.interface.d.ts +20 -0
- package/interfaces/event.interface.d.ts +28 -0
- package/interfaces/index.d.ts +2 -0
- package/modules/event-manager.module.d.ts +8 -0
- package/modules/index.d.ts +1 -0
- package/package.json +89 -0
- package/services/event-manager-config.service.d.ts +13 -0
- package/services/event-manager-datasource.provider.d.ts +23 -0
- package/services/event-manager-helper.service.d.ts +27 -0
- package/services/event-participant.service.d.ts +27 -0
- package/services/event.service.d.ts +49 -0
- package/services/index.d.ts +5 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
15
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
17
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
18
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
|
+
}
|
|
20
|
+
function _ts_metadata(k, v) {
|
|
21
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
22
|
+
}
|
|
23
|
+
function _ts_param(paramIndex, decorator) {
|
|
24
|
+
return function(target, key) {
|
|
25
|
+
decorator(target, key, paramIndex);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
import { Body, Controller, HttpCode, HttpStatus, Inject, Post, UseGuards } from '@nestjs/common';
|
|
29
|
+
import { ApiBearerAuth, ApiBody, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
|
|
30
|
+
import { createApiController } from '@flusys/nestjs-shared/classes';
|
|
31
|
+
import { CurrentUser, RequirePermission } from '@flusys/nestjs-shared/decorators';
|
|
32
|
+
import { ListResponseDto, SingleResponseDto } from '@flusys/nestjs-shared/dtos';
|
|
33
|
+
import { JwtAuthGuard } from '@flusys/nestjs-shared/guards';
|
|
34
|
+
import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
|
|
35
|
+
import { plainToInstance } from 'class-transformer';
|
|
36
|
+
import { BulkAddParticipantsDto, CalendarQueryDto, CalendarEventResponseDto, CreateEventDto, EventParticipantResponseDto, EventResponseDto, UpdateEventDto } from '../dtos';
|
|
37
|
+
import { EVENT_PERMISSIONS } from '../docs';
|
|
38
|
+
import { EventService } from '../services/event.service';
|
|
39
|
+
export class EventController extends createApiController(CreateEventDto, UpdateEventDto, EventResponseDto, {
|
|
40
|
+
security: {
|
|
41
|
+
insert: {
|
|
42
|
+
level: 'permission',
|
|
43
|
+
permissions: [
|
|
44
|
+
EVENT_PERMISSIONS.CREATE
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
insertMany: {
|
|
48
|
+
level: 'permission',
|
|
49
|
+
permissions: [
|
|
50
|
+
EVENT_PERMISSIONS.CREATE
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
getById: {
|
|
54
|
+
level: 'permission',
|
|
55
|
+
permissions: [
|
|
56
|
+
EVENT_PERMISSIONS.READ
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
getAll: {
|
|
60
|
+
level: 'permission',
|
|
61
|
+
permissions: [
|
|
62
|
+
EVENT_PERMISSIONS.READ
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
update: {
|
|
66
|
+
level: 'permission',
|
|
67
|
+
permissions: [
|
|
68
|
+
EVENT_PERMISSIONS.UPDATE
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
updateMany: {
|
|
72
|
+
level: 'permission',
|
|
73
|
+
permissions: [
|
|
74
|
+
EVENT_PERMISSIONS.UPDATE
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
delete: {
|
|
78
|
+
level: 'permission',
|
|
79
|
+
permissions: [
|
|
80
|
+
EVENT_PERMISSIONS.DELETE
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}) {
|
|
85
|
+
async getCalendarEvents(dto, user) {
|
|
86
|
+
const events = await this.eventService.getEventsForCalendarRange(dto, user);
|
|
87
|
+
const data = plainToInstance(CalendarEventResponseDto, events);
|
|
88
|
+
return {
|
|
89
|
+
success: true,
|
|
90
|
+
message: 'Calendar events retrieved successfully',
|
|
91
|
+
data,
|
|
92
|
+
meta: {
|
|
93
|
+
total: data.length,
|
|
94
|
+
page: 0,
|
|
95
|
+
pageSize: data.length,
|
|
96
|
+
count: data.length
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
async getEventWithParticipants(body, user) {
|
|
101
|
+
const event = await this.eventService.getEventWithParticipants(body.id, user);
|
|
102
|
+
if (!event) {
|
|
103
|
+
return {
|
|
104
|
+
success: false,
|
|
105
|
+
message: 'Event not found'
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
success: true,
|
|
110
|
+
message: 'Event retrieved successfully',
|
|
111
|
+
data: plainToInstance(EventResponseDto, event)
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
async addParticipants(dto, user) {
|
|
115
|
+
const participants = await this.eventService.addParticipants(dto.eventId, dto.userIds, user);
|
|
116
|
+
return {
|
|
117
|
+
success: true,
|
|
118
|
+
message: 'Participants added successfully',
|
|
119
|
+
data: plainToInstance(EventParticipantResponseDto, participants)
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
constructor(eventService){
|
|
123
|
+
super(eventService), _define_property(this, "eventService", void 0), this.eventService = eventService;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
_ts_decorate([
|
|
127
|
+
Post('calendar'),
|
|
128
|
+
UseGuards(JwtAuthGuard),
|
|
129
|
+
ApiBearerAuth(),
|
|
130
|
+
HttpCode(HttpStatus.OK),
|
|
131
|
+
RequirePermission(EVENT_PERMISSIONS.READ),
|
|
132
|
+
ApiOperation({
|
|
133
|
+
summary: 'Get events for calendar range with recurrence expansion'
|
|
134
|
+
}),
|
|
135
|
+
ApiBody({
|
|
136
|
+
type: CalendarQueryDto
|
|
137
|
+
}),
|
|
138
|
+
ApiResponse({
|
|
139
|
+
status: 200,
|
|
140
|
+
description: 'Calendar events retrieved successfully',
|
|
141
|
+
type: ListResponseDto
|
|
142
|
+
}),
|
|
143
|
+
_ts_param(0, Body()),
|
|
144
|
+
_ts_param(1, CurrentUser()),
|
|
145
|
+
_ts_metadata("design:type", Function),
|
|
146
|
+
_ts_metadata("design:paramtypes", [
|
|
147
|
+
typeof CalendarQueryDto === "undefined" ? Object : CalendarQueryDto,
|
|
148
|
+
typeof ILoggedUserInfo === "undefined" ? Object : ILoggedUserInfo
|
|
149
|
+
]),
|
|
150
|
+
_ts_metadata("design:returntype", Promise)
|
|
151
|
+
], EventController.prototype, "getCalendarEvents", null);
|
|
152
|
+
_ts_decorate([
|
|
153
|
+
Post('get-with-participants'),
|
|
154
|
+
UseGuards(JwtAuthGuard),
|
|
155
|
+
ApiBearerAuth(),
|
|
156
|
+
HttpCode(HttpStatus.OK),
|
|
157
|
+
RequirePermission(EVENT_PERMISSIONS.READ),
|
|
158
|
+
ApiOperation({
|
|
159
|
+
summary: 'Get event with participants'
|
|
160
|
+
}),
|
|
161
|
+
ApiBody({
|
|
162
|
+
schema: {
|
|
163
|
+
properties: {
|
|
164
|
+
id: {
|
|
165
|
+
type: 'string',
|
|
166
|
+
format: 'uuid'
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}),
|
|
171
|
+
ApiResponse({
|
|
172
|
+
status: 200,
|
|
173
|
+
description: 'Event retrieved successfully',
|
|
174
|
+
type: SingleResponseDto
|
|
175
|
+
}),
|
|
176
|
+
_ts_param(0, Body()),
|
|
177
|
+
_ts_param(1, CurrentUser()),
|
|
178
|
+
_ts_metadata("design:type", Function),
|
|
179
|
+
_ts_metadata("design:paramtypes", [
|
|
180
|
+
Object,
|
|
181
|
+
typeof ILoggedUserInfo === "undefined" ? Object : ILoggedUserInfo
|
|
182
|
+
]),
|
|
183
|
+
_ts_metadata("design:returntype", Promise)
|
|
184
|
+
], EventController.prototype, "getEventWithParticipants", null);
|
|
185
|
+
_ts_decorate([
|
|
186
|
+
Post('add-participants'),
|
|
187
|
+
UseGuards(JwtAuthGuard),
|
|
188
|
+
ApiBearerAuth(),
|
|
189
|
+
HttpCode(HttpStatus.OK),
|
|
190
|
+
RequirePermission(EVENT_PERMISSIONS.UPDATE),
|
|
191
|
+
ApiOperation({
|
|
192
|
+
summary: 'Add participants to an event'
|
|
193
|
+
}),
|
|
194
|
+
ApiBody({
|
|
195
|
+
type: BulkAddParticipantsDto
|
|
196
|
+
}),
|
|
197
|
+
ApiResponse({
|
|
198
|
+
status: 200,
|
|
199
|
+
description: 'Participants added successfully',
|
|
200
|
+
type: SingleResponseDto
|
|
201
|
+
}),
|
|
202
|
+
_ts_param(0, Body()),
|
|
203
|
+
_ts_param(1, CurrentUser()),
|
|
204
|
+
_ts_metadata("design:type", Function),
|
|
205
|
+
_ts_metadata("design:paramtypes", [
|
|
206
|
+
typeof BulkAddParticipantsDto === "undefined" ? Object : BulkAddParticipantsDto,
|
|
207
|
+
typeof ILoggedUserInfo === "undefined" ? Object : ILoggedUserInfo
|
|
208
|
+
]),
|
|
209
|
+
_ts_metadata("design:returntype", Promise)
|
|
210
|
+
], EventController.prototype, "addParticipants", null);
|
|
211
|
+
EventController = _ts_decorate([
|
|
212
|
+
ApiTags('Events'),
|
|
213
|
+
Controller('event-manager/event'),
|
|
214
|
+
_ts_param(0, Inject(EventService)),
|
|
215
|
+
_ts_metadata("design:type", Function),
|
|
216
|
+
_ts_metadata("design:paramtypes", [
|
|
217
|
+
typeof EventService === "undefined" ? Object : EventService
|
|
218
|
+
])
|
|
219
|
+
], EventController);
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/** Schema properties to exclude when company feature is disabled */ const COMPANY_SCHEMA_EXCLUSIONS = [
|
|
2
|
+
{
|
|
3
|
+
schemaName: 'EventResponseDto',
|
|
4
|
+
properties: [
|
|
5
|
+
'companyId'
|
|
6
|
+
]
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
schemaName: 'CalendarEventResponseDto',
|
|
10
|
+
properties: [
|
|
11
|
+
'companyId'
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
];
|
|
15
|
+
function buildDescription(enableCompanyFeature) {
|
|
16
|
+
const companyFeatures = enableCompanyFeature ? '\n- **Company-scoped events**' : '';
|
|
17
|
+
const companyIsolation = enableCompanyFeature ? '\n- **Company isolation**' : '';
|
|
18
|
+
const multiTenantSection = enableCompanyFeature ? `
|
|
19
|
+
## Multi-Tenant Support
|
|
20
|
+
|
|
21
|
+
Events are automatically isolated by:
|
|
22
|
+
- **Company ID**: Events belong to specific companies
|
|
23
|
+
- **User Context**: Participants are company members
|
|
24
|
+
|
|
25
|
+
All queries automatically filter by current user's company context.
|
|
26
|
+
` : '';
|
|
27
|
+
return `
|
|
28
|
+
# Event Manager API
|
|
29
|
+
|
|
30
|
+
Calendar event management with recurrence support${enableCompanyFeature ? ' and multi-tenant capabilities' : ''}.
|
|
31
|
+
|
|
32
|
+
## Features
|
|
33
|
+
|
|
34
|
+
### 📅 Event Management
|
|
35
|
+
- Create, read, update, delete events
|
|
36
|
+
- Rich metadata support
|
|
37
|
+
- Meeting link integration
|
|
38
|
+
- Color-coded events${companyFeatures}
|
|
39
|
+
|
|
40
|
+
### 🔄 Recurrence Support
|
|
41
|
+
- **None**: Single occurrence
|
|
42
|
+
- **Daily**: Every day
|
|
43
|
+
- **Weekly**: Specific days of the week
|
|
44
|
+
- **Biweekly**: Every two weeks
|
|
45
|
+
- **Monthly**: Same day each month
|
|
46
|
+
|
|
47
|
+
### 👥 Participant Management
|
|
48
|
+
- Add/remove participants
|
|
49
|
+
- Status tracking (pending, accepted, declined, tentative)
|
|
50
|
+
- Organizer designation
|
|
51
|
+
- Bulk participant operations
|
|
52
|
+
|
|
53
|
+
### 📆 Calendar Queries
|
|
54
|
+
- Date range queries
|
|
55
|
+
- Automatic recurrence expansion
|
|
56
|
+
- Filter by user participation
|
|
57
|
+
- Include/exclude participants in response
|
|
58
|
+
|
|
59
|
+
### 🔒 Security
|
|
60
|
+
- JWT authentication required
|
|
61
|
+
- Permission-based access control${companyIsolation}
|
|
62
|
+
|
|
63
|
+
## Recurrence Patterns
|
|
64
|
+
|
|
65
|
+
### Weekly Recurrence
|
|
66
|
+
Use \`metadata.recurrenceDays\` array to specify days:
|
|
67
|
+
- 0 = Sunday
|
|
68
|
+
- 1 = Monday
|
|
69
|
+
- 2 = Tuesday
|
|
70
|
+
- 3 = Wednesday
|
|
71
|
+
- 4 = Thursday
|
|
72
|
+
- 5 = Friday
|
|
73
|
+
- 6 = Saturday
|
|
74
|
+
|
|
75
|
+
Example: \`{ "recurrenceDays": [1, 3, 5] }\` = Monday, Wednesday, Friday
|
|
76
|
+
|
|
77
|
+
### Recurrence Expansion
|
|
78
|
+
Calendar queries automatically expand recurring events into individual instances.
|
|
79
|
+
Each instance includes:
|
|
80
|
+
- \`isRecurrenceInstance: true\`
|
|
81
|
+
- \`originalEventId\`: Reference to parent event
|
|
82
|
+
- \`recurrenceInstanceDate\`: Specific occurrence date
|
|
83
|
+
${multiTenantSection}
|
|
84
|
+
## API Endpoints
|
|
85
|
+
|
|
86
|
+
All endpoints use POST method (RPC style):
|
|
87
|
+
|
|
88
|
+
### Events
|
|
89
|
+
- \`/event-manager/event/insert\` - Create event
|
|
90
|
+
- \`/event-manager/event/get/:id\` - Get by ID
|
|
91
|
+
- \`/event-manager/event/get-all\` - List with pagination
|
|
92
|
+
- \`/event-manager/event/update\` - Update event
|
|
93
|
+
- \`/event-manager/event/delete\` - Soft delete
|
|
94
|
+
- \`/event-manager/event/calendar\` - Calendar query with expansion
|
|
95
|
+
- \`/event-manager/event/get-with-participants\` - Get with participant list
|
|
96
|
+
- \`/event-manager/event/add-participants\` - Add participants
|
|
97
|
+
|
|
98
|
+
### Participants
|
|
99
|
+
- \`/event-manager/participant/insert\` - Create participant
|
|
100
|
+
- \`/event-manager/participant/get-all\` - List participants
|
|
101
|
+
- \`/event-manager/participant/update-status\` - Update status
|
|
102
|
+
- \`/event-manager/participant/get-by-event\` - Get by event
|
|
103
|
+
- \`/event-manager/participant/get-by-user\` - Get by user
|
|
104
|
+
- \`/event-manager/participant/remove\` - Remove from event
|
|
105
|
+
|
|
106
|
+
## Getting Started
|
|
107
|
+
|
|
108
|
+
1. **Authenticate**: Obtain JWT token from /auth/login
|
|
109
|
+
2. **Create Event**: POST to /event-manager/event/insert
|
|
110
|
+
3. **Add Participants**: POST to /event-manager/event/add-participants
|
|
111
|
+
4. **Query Calendar**: POST to /event-manager/event/calendar with date range
|
|
112
|
+
`;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Event Manager Module Swagger Configuration
|
|
116
|
+
* Use this with setupSwaggerDocs() from @flusys/nestjs-core
|
|
117
|
+
*/ export function eventManagerSwaggerConfig(bootstrapConfig) {
|
|
118
|
+
const enableCompanyFeature = bootstrapConfig?.enableCompanyFeature ?? true;
|
|
119
|
+
return {
|
|
120
|
+
title: 'Event Manager API',
|
|
121
|
+
description: buildDescription(enableCompanyFeature),
|
|
122
|
+
version: '1.0',
|
|
123
|
+
path: 'api/docs/event-manager',
|
|
124
|
+
bearerAuth: true,
|
|
125
|
+
excludeTags: [],
|
|
126
|
+
excludeSchemaProperties: enableCompanyFeature ? undefined : COMPANY_SCHEMA_EXCLUSIONS
|
|
127
|
+
};
|
|
128
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
15
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
17
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
18
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
|
+
}
|
|
20
|
+
function _ts_metadata(k, v) {
|
|
21
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
22
|
+
}
|
|
23
|
+
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
|
|
24
|
+
import { Expose, Type } from 'class-transformer';
|
|
25
|
+
import { IsBoolean, IsDate, IsNotEmpty, IsOptional, IsUUID } from 'class-validator';
|
|
26
|
+
import { EventParticipantResponseDto } from './event-participant.dto';
|
|
27
|
+
export class CalendarQueryDto {
|
|
28
|
+
constructor(){
|
|
29
|
+
_define_property(this, "startDate", void 0);
|
|
30
|
+
_define_property(this, "endDate", void 0);
|
|
31
|
+
_define_property(this, "includeParticipants", void 0);
|
|
32
|
+
_define_property(this, "userId", void 0);
|
|
33
|
+
_define_property(this, "activeOnly", void 0);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
_ts_decorate([
|
|
37
|
+
ApiProperty({
|
|
38
|
+
description: 'Start date for calendar range',
|
|
39
|
+
example: '2024-01-01T00:00:00Z'
|
|
40
|
+
}),
|
|
41
|
+
IsNotEmpty(),
|
|
42
|
+
IsDate(),
|
|
43
|
+
Type(()=>Date),
|
|
44
|
+
_ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
|
|
45
|
+
], CalendarQueryDto.prototype, "startDate", void 0);
|
|
46
|
+
_ts_decorate([
|
|
47
|
+
ApiProperty({
|
|
48
|
+
description: 'End date for calendar range',
|
|
49
|
+
example: '2024-01-31T23:59:59Z'
|
|
50
|
+
}),
|
|
51
|
+
IsNotEmpty(),
|
|
52
|
+
IsDate(),
|
|
53
|
+
Type(()=>Date),
|
|
54
|
+
_ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
|
|
55
|
+
], CalendarQueryDto.prototype, "endDate", void 0);
|
|
56
|
+
_ts_decorate([
|
|
57
|
+
ApiPropertyOptional({
|
|
58
|
+
description: 'Include participant details',
|
|
59
|
+
default: false
|
|
60
|
+
}),
|
|
61
|
+
IsOptional(),
|
|
62
|
+
IsBoolean(),
|
|
63
|
+
_ts_metadata("design:type", Boolean)
|
|
64
|
+
], CalendarQueryDto.prototype, "includeParticipants", void 0);
|
|
65
|
+
_ts_decorate([
|
|
66
|
+
ApiPropertyOptional({
|
|
67
|
+
description: 'Filter by specific user ID'
|
|
68
|
+
}),
|
|
69
|
+
IsOptional(),
|
|
70
|
+
IsUUID(),
|
|
71
|
+
_ts_metadata("design:type", String)
|
|
72
|
+
], CalendarQueryDto.prototype, "userId", void 0);
|
|
73
|
+
_ts_decorate([
|
|
74
|
+
ApiPropertyOptional({
|
|
75
|
+
description: 'Include only active events',
|
|
76
|
+
default: true
|
|
77
|
+
}),
|
|
78
|
+
IsOptional(),
|
|
79
|
+
IsBoolean(),
|
|
80
|
+
_ts_metadata("design:type", Boolean)
|
|
81
|
+
], CalendarQueryDto.prototype, "activeOnly", void 0);
|
|
82
|
+
export class CalendarEventResponseDto {
|
|
83
|
+
constructor(){
|
|
84
|
+
_define_property(this, "id", void 0);
|
|
85
|
+
_define_property(this, "title", void 0);
|
|
86
|
+
_define_property(this, "description", void 0);
|
|
87
|
+
_define_property(this, "meetingLink", void 0);
|
|
88
|
+
_define_property(this, "startDateTime", void 0);
|
|
89
|
+
_define_property(this, "endDateTime", void 0);
|
|
90
|
+
_define_property(this, "isAllDay", void 0);
|
|
91
|
+
_define_property(this, "recurrenceType", void 0);
|
|
92
|
+
_define_property(this, "color", void 0);
|
|
93
|
+
_define_property(this, "isActive", void 0);
|
|
94
|
+
_define_property(this, "originalEventId", void 0);
|
|
95
|
+
_define_property(this, "isRecurrenceInstance", void 0);
|
|
96
|
+
_define_property(this, "participants", void 0);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
_ts_decorate([
|
|
100
|
+
Expose(),
|
|
101
|
+
ApiProperty(),
|
|
102
|
+
_ts_metadata("design:type", String)
|
|
103
|
+
], CalendarEventResponseDto.prototype, "id", void 0);
|
|
104
|
+
_ts_decorate([
|
|
105
|
+
Expose(),
|
|
106
|
+
ApiProperty(),
|
|
107
|
+
_ts_metadata("design:type", String)
|
|
108
|
+
], CalendarEventResponseDto.prototype, "title", void 0);
|
|
109
|
+
_ts_decorate([
|
|
110
|
+
Expose(),
|
|
111
|
+
ApiPropertyOptional(),
|
|
112
|
+
_ts_metadata("design:type", Object)
|
|
113
|
+
], CalendarEventResponseDto.prototype, "description", void 0);
|
|
114
|
+
_ts_decorate([
|
|
115
|
+
Expose(),
|
|
116
|
+
ApiPropertyOptional(),
|
|
117
|
+
_ts_metadata("design:type", Object)
|
|
118
|
+
], CalendarEventResponseDto.prototype, "meetingLink", void 0);
|
|
119
|
+
_ts_decorate([
|
|
120
|
+
Expose(),
|
|
121
|
+
ApiProperty(),
|
|
122
|
+
_ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
|
|
123
|
+
], CalendarEventResponseDto.prototype, "startDateTime", void 0);
|
|
124
|
+
_ts_decorate([
|
|
125
|
+
Expose(),
|
|
126
|
+
ApiProperty(),
|
|
127
|
+
_ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
|
|
128
|
+
], CalendarEventResponseDto.prototype, "endDateTime", void 0);
|
|
129
|
+
_ts_decorate([
|
|
130
|
+
Expose(),
|
|
131
|
+
ApiProperty(),
|
|
132
|
+
_ts_metadata("design:type", Boolean)
|
|
133
|
+
], CalendarEventResponseDto.prototype, "isAllDay", void 0);
|
|
134
|
+
_ts_decorate([
|
|
135
|
+
Expose(),
|
|
136
|
+
ApiProperty(),
|
|
137
|
+
_ts_metadata("design:type", String)
|
|
138
|
+
], CalendarEventResponseDto.prototype, "recurrenceType", void 0);
|
|
139
|
+
_ts_decorate([
|
|
140
|
+
Expose(),
|
|
141
|
+
ApiProperty(),
|
|
142
|
+
_ts_metadata("design:type", String)
|
|
143
|
+
], CalendarEventResponseDto.prototype, "color", void 0);
|
|
144
|
+
_ts_decorate([
|
|
145
|
+
Expose(),
|
|
146
|
+
ApiProperty(),
|
|
147
|
+
_ts_metadata("design:type", Boolean)
|
|
148
|
+
], CalendarEventResponseDto.prototype, "isActive", void 0);
|
|
149
|
+
_ts_decorate([
|
|
150
|
+
Expose(),
|
|
151
|
+
ApiPropertyOptional(),
|
|
152
|
+
_ts_metadata("design:type", String)
|
|
153
|
+
], CalendarEventResponseDto.prototype, "originalEventId", void 0);
|
|
154
|
+
_ts_decorate([
|
|
155
|
+
Expose(),
|
|
156
|
+
ApiPropertyOptional(),
|
|
157
|
+
_ts_metadata("design:type", Boolean)
|
|
158
|
+
], CalendarEventResponseDto.prototype, "isRecurrenceInstance", void 0);
|
|
159
|
+
_ts_decorate([
|
|
160
|
+
Expose(),
|
|
161
|
+
ApiPropertyOptional({
|
|
162
|
+
type: ()=>[
|
|
163
|
+
EventParticipantResponseDto
|
|
164
|
+
]
|
|
165
|
+
}),
|
|
166
|
+
Type(()=>EventParticipantResponseDto),
|
|
167
|
+
_ts_metadata("design:type", Array)
|
|
168
|
+
], CalendarEventResponseDto.prototype, "participants", void 0);
|