@flusys/nestjs-event-manager 4.1.0 → 5.0.0

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.
Files changed (52) hide show
  1. package/README.md +126 -337
  2. package/adapters/event-manager.adapter.d.ts +0 -2
  3. package/cjs/adapters/event-manager.adapter.js +1 -7
  4. package/cjs/config/message-keys.js +1 -31
  5. package/cjs/controllers/event.controller.js +10 -60
  6. package/cjs/controllers/index.js +0 -1
  7. package/cjs/docs/event-manager-swagger.config.js +19 -29
  8. package/cjs/docs/index.js +0 -3
  9. package/cjs/dtos/calendar-query.dto.js +46 -20
  10. package/cjs/dtos/event-participant.dto.js +0 -45
  11. package/cjs/dtos/event.dto.js +97 -45
  12. package/cjs/entities/event-participant.entity.js +1 -8
  13. package/cjs/entities/event.entity.js +38 -26
  14. package/cjs/modules/event-manager.module.js +2 -4
  15. package/cjs/services/event-manager-helper.service.js +15 -83
  16. package/cjs/services/event.service.js +143 -122
  17. package/cjs/services/index.js +0 -1
  18. package/config/message-keys.d.ts +0 -56
  19. package/controllers/event.controller.d.ts +2 -5
  20. package/controllers/index.d.ts +0 -1
  21. package/docs/index.d.ts +1 -1
  22. package/dtos/calendar-query.dto.d.ts +8 -5
  23. package/dtos/event-participant.dto.d.ts +0 -6
  24. package/dtos/event.dto.d.ts +14 -10
  25. package/entities/event-participant.entity.d.ts +0 -1
  26. package/entities/event.entity.d.ts +6 -5
  27. package/fesm/adapters/event-manager.adapter.js +1 -7
  28. package/fesm/config/message-keys.js +1 -29
  29. package/fesm/controllers/event.controller.js +11 -61
  30. package/fesm/controllers/index.js +0 -1
  31. package/fesm/docs/event-manager-swagger.config.js +19 -29
  32. package/fesm/docs/index.js +1 -1
  33. package/fesm/dtos/calendar-query.dto.js +47 -21
  34. package/fesm/dtos/event-participant.dto.js +0 -42
  35. package/fesm/dtos/event.dto.js +98 -46
  36. package/fesm/entities/event-participant.entity.js +1 -8
  37. package/fesm/entities/event.entity.js +38 -26
  38. package/fesm/modules/event-manager.module.js +4 -6
  39. package/fesm/services/event-manager-helper.service.js +17 -85
  40. package/fesm/services/event.service.js +144 -123
  41. package/fesm/services/index.js +0 -1
  42. package/interfaces/event.interface.d.ts +6 -6
  43. package/package.json +3 -3
  44. package/services/event-manager-helper.service.d.ts +1 -3
  45. package/services/event.service.d.ts +8 -8
  46. package/services/index.d.ts +0 -1
  47. package/cjs/controllers/event-participant.controller.js +0 -287
  48. package/cjs/services/event-participant.service.js +0 -198
  49. package/controllers/event-participant.controller.d.ts +0 -35
  50. package/fesm/controllers/event-participant.controller.js +0 -277
  51. package/fesm/services/event-participant.service.js +0 -188
  52. package/services/event-participant.service.d.ts +0 -27
@@ -110,29 +110,13 @@ let EventController = class EventController extends (0, _classes.createApiContro
110
110
  }
111
111
  };
112
112
  }
113
- async getEventWithParticipants(body, user) {
114
- const event = await this.eventService.getEventWithParticipants(body.id, user);
115
- if (!event) {
116
- return {
117
- success: false,
118
- message: 'Event not found',
119
- messageKey: _config.EVENT_MESSAGES.NOT_FOUND
120
- };
121
- }
113
+ async updateParticipantStatus(dto, user) {
114
+ const participant = await this.eventService.updateParticipantStatus(dto, user);
122
115
  return {
123
116
  success: true,
124
- message: 'Event retrieved successfully',
125
- messageKey: _config.EVENT_MESSAGES.GET_SUCCESS,
126
- data: (0, _classtransformer.plainToInstance)(_dtos1.EventResponseDto, event)
127
- };
128
- }
129
- async addParticipants(dto, user) {
130
- const participants = await this.eventService.addParticipants(dto.eventId, dto.userIds, user);
131
- return {
132
- success: true,
133
- message: 'Participants added successfully',
134
- messageKey: _config.EVENT_PARTICIPANT_MESSAGES.CREATE_SUCCESS,
135
- data: (0, _classtransformer.plainToInstance)(_dtos1.EventParticipantResponseDto, participants)
117
+ message: 'Participant status updated successfully',
118
+ messageKey: _config.EVENT_PARTICIPANT_MESSAGES.STATUS_UPDATE_SUCCESS,
119
+ data: (0, _classtransformer.plainToInstance)(_dtos1.EventParticipantResponseDto, participant)
136
120
  };
137
121
  }
138
122
  constructor(eventService){
@@ -166,64 +150,30 @@ _ts_decorate([
166
150
  _ts_metadata("design:returntype", Promise)
167
151
  ], EventController.prototype, "getCalendarEvents", null);
168
152
  _ts_decorate([
169
- (0, _common.Post)('get-with-participants'),
170
- (0, _common.UseGuards)(_guards.JwtAuthGuard),
171
- (0, _swagger.ApiBearerAuth)(),
172
- (0, _common.HttpCode)(_common.HttpStatus.OK),
173
- (0, _decorators.RequirePermission)(_docs.EVENT_PERMISSIONS.READ),
174
- (0, _swagger.ApiOperation)({
175
- summary: 'Get event with participants'
176
- }),
177
- (0, _swagger.ApiBody)({
178
- schema: {
179
- properties: {
180
- id: {
181
- type: 'string',
182
- format: 'uuid'
183
- }
184
- }
185
- }
186
- }),
187
- (0, _swagger.ApiResponse)({
188
- status: 200,
189
- description: 'Event retrieved successfully',
190
- type: _dtos.SingleResponseDto
191
- }),
192
- _ts_param(0, (0, _common.Body)()),
193
- _ts_param(1, (0, _decorators.CurrentUser)()),
194
- _ts_metadata("design:type", Function),
195
- _ts_metadata("design:paramtypes", [
196
- Object,
197
- typeof _interfaces.ILoggedUserInfo === "undefined" ? Object : _interfaces.ILoggedUserInfo
198
- ]),
199
- _ts_metadata("design:returntype", Promise)
200
- ], EventController.prototype, "getEventWithParticipants", null);
201
- _ts_decorate([
202
- (0, _common.Post)('add-participants'),
153
+ (0, _common.Post)('update-participant-status'),
203
154
  (0, _common.UseGuards)(_guards.JwtAuthGuard),
204
155
  (0, _swagger.ApiBearerAuth)(),
205
156
  (0, _common.HttpCode)(_common.HttpStatus.OK),
206
157
  (0, _decorators.RequirePermission)(_docs.EVENT_PERMISSIONS.UPDATE),
207
158
  (0, _swagger.ApiOperation)({
208
- summary: 'Add participants to an event'
159
+ summary: 'Update participant status (accept/decline/tentative)'
209
160
  }),
210
161
  (0, _swagger.ApiBody)({
211
- type: _dtos1.BulkAddParticipantsDto
162
+ type: _dtos1.UpdateParticipantStatusDto
212
163
  }),
213
164
  (0, _swagger.ApiResponse)({
214
165
  status: 200,
215
- description: 'Participants added successfully',
216
166
  type: _dtos.SingleResponseDto
217
167
  }),
218
168
  _ts_param(0, (0, _common.Body)()),
219
169
  _ts_param(1, (0, _decorators.CurrentUser)()),
220
170
  _ts_metadata("design:type", Function),
221
171
  _ts_metadata("design:paramtypes", [
222
- typeof _dtos1.BulkAddParticipantsDto === "undefined" ? Object : _dtos1.BulkAddParticipantsDto,
172
+ typeof _dtos1.UpdateParticipantStatusDto === "undefined" ? Object : _dtos1.UpdateParticipantStatusDto,
223
173
  typeof _interfaces.ILoggedUserInfo === "undefined" ? Object : _interfaces.ILoggedUserInfo
224
174
  ]),
225
175
  _ts_metadata("design:returntype", Promise)
226
- ], EventController.prototype, "addParticipants", null);
176
+ ], EventController.prototype, "updateParticipantStatus", null);
227
177
  EventController = _ts_decorate([
228
178
  (0, _swagger.ApiTags)('Events'),
229
179
  (0, _common.Controller)('event-manager/event'),
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
5
  _export_star(require("./event.controller"), exports);
6
- _export_star(require("./event-participant.controller"), exports);
7
6
  function _export_star(from, to) {
8
7
  Object.keys(from).forEach(function(k) {
9
8
  if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
@@ -22,7 +22,8 @@ Object.defineProperty(exports, "eventManagerSwaggerConfig", {
22
22
  ]
23
23
  }
24
24
  ];
25
- function buildDescription(enableCompanyFeature) {
25
+ function buildDescription(enableCompanyFeature, isMultiTenant) {
26
+ const multiTenantNote = isMultiTenant ? `\n> **Multi-Tenant Mode**: Include \`x-tenant-id\` header to target a specific tenant database.\n` : '';
26
27
  const companyFeatures = enableCompanyFeature ? '\n- **Company-scoped events**' : '';
27
28
  const companyIsolation = enableCompanyFeature ? '\n- **Company isolation**' : '';
28
29
  const multiTenantSection = enableCompanyFeature ? `
@@ -36,16 +37,15 @@ All queries automatically filter by current user's company context.
36
37
  ` : '';
37
38
  return `
38
39
  # Event Manager API
39
-
40
+ ${multiTenantNote}
40
41
  Calendar event management with recurrence support${enableCompanyFeature ? ' and multi-tenant capabilities' : ''}.
41
42
 
42
43
  ## Features
43
44
 
44
45
  ### 📅 Event Management
45
46
  - Create, read, update, delete events
46
- - Rich metadata support
47
- - Meeting link integration
48
- - Color-coded events${companyFeatures}
47
+ - Color-coded events
48
+ - All-day event support${companyFeatures}
49
49
 
50
50
  ### 🔄 Recurrence Support
51
51
  - **None**: Single occurrence
@@ -55,10 +55,8 @@ Calendar event management with recurrence support${enableCompanyFeature ? ' and
55
55
  - **Monthly**: Same day each month
56
56
 
57
57
  ### 👥 Participant Management
58
- - Add/remove participants
59
58
  - Status tracking (pending, accepted, declined, tentative)
60
59
  - Organizer designation
61
- - Bulk participant operations
62
60
 
63
61
  ### 📆 Calendar Queries
64
62
  - Date range queries
@@ -73,23 +71,22 @@ Calendar event management with recurrence support${enableCompanyFeature ? ' and
73
71
  ## Recurrence Patterns
74
72
 
75
73
  ### Weekly Recurrence
76
- Use \`metadata.recurrenceDays\` array to specify days:
77
- - 0 = Sunday
78
- - 1 = Monday
79
- - 2 = Tuesday
80
- - 3 = Wednesday
81
- - 4 = Thursday
82
- - 5 = Friday
83
- - 6 = Saturday
74
+ Use the \`weekDays\` array to specify which days repeat:
75
+ - \`"SUN"\` = Sunday
76
+ - \`"MON"\` = Monday
77
+ - \`"TUE"\` = Tuesday
78
+ - \`"WED"\` = Wednesday
79
+ - \`"THU"\` = Thursday
80
+ - \`"FRI"\` = Friday
81
+ - \`"SAT"\` = Saturday
84
82
 
85
- Example: \`{ "recurrenceDays": [1, 3, 5] }\` = Monday, Wednesday, Friday
83
+ Example: \`{ "weekDays": ["MON", "WED", "FRI"] }\` = Monday, Wednesday, Friday
86
84
 
87
85
  ### Recurrence Expansion
88
86
  Calendar queries automatically expand recurring events into individual instances.
89
87
  Each instance includes:
90
88
  - \`isRecurrenceInstance: true\`
91
89
  - \`originalEventId\`: Reference to parent event
92
- - \`recurrenceInstanceDate\`: Specific occurrence date
93
90
  ${multiTenantSection}
94
91
  ## API Endpoints
95
92
 
@@ -102,30 +99,23 @@ All endpoints use POST method (RPC style):
102
99
  - \`/event-manager/event/update\` - Update event
103
100
  - \`/event-manager/event/delete\` - Soft delete
104
101
  - \`/event-manager/event/calendar\` - Calendar query with expansion
105
- - \`/event-manager/event/get-with-participants\` - Get with participant list
106
- - \`/event-manager/event/add-participants\` - Add participants
107
102
 
108
- ### Participants
109
- - \`/event-manager/participant/insert\` - Create participant
110
- - \`/event-manager/participant/get-all\` - List participants
111
- - \`/event-manager/participant/update-status\` - Update status
112
- - \`/event-manager/participant/get-by-event\` - Get by event
113
- - \`/event-manager/participant/get-by-user\` - Get by user
114
- - \`/event-manager/participant/remove\` - Remove from event
103
+ ### Participant Operations (via Event endpoints)
104
+ - \`/event-manager/event/update-participant-status\` - Update status
115
105
 
116
106
  ## Getting Started
117
107
 
118
108
  1. **Authenticate**: Obtain JWT token from /auth/login
119
109
  2. **Create Event**: POST to /event-manager/event/insert
120
- 3. **Add Participants**: POST to /event-manager/event/add-participants
121
- 4. **Query Calendar**: POST to /event-manager/event/calendar with date range
110
+ 3. **Query Calendar**: POST to /event-manager/event/calendar with date range
122
111
  `;
123
112
  }
124
113
  function eventManagerSwaggerConfig(bootstrapConfig) {
125
114
  const enableCompanyFeature = bootstrapConfig?.enableCompanyFeature ?? true;
115
+ const isMultiTenant = bootstrapConfig?.databaseMode === 'multi-tenant';
126
116
  return {
127
117
  title: 'Event Manager API',
128
- description: buildDescription(enableCompanyFeature),
118
+ description: buildDescription(enableCompanyFeature, isMultiTenant),
129
119
  version: '1.0',
130
120
  path: 'api/docs/event-manager',
131
121
  bearerAuth: true,
package/cjs/docs/index.js CHANGED
@@ -10,9 +10,6 @@ function _export(target, all) {
10
10
  });
11
11
  }
12
12
  _export(exports, {
13
- get EVENT_PARTICIPANT_PERMISSIONS () {
14
- return _nestjsshared.EVENT_PARTICIPANT_PERMISSIONS;
15
- },
16
13
  get EVENT_PERMISSIONS () {
17
14
  return _nestjsshared.EVENT_PERMISSIONS;
18
15
  },
@@ -53,23 +53,27 @@ let CalendarQueryDto = class CalendarQueryDto {
53
53
  };
54
54
  _ts_decorate([
55
55
  (0, _swagger.ApiProperty)({
56
- description: 'Start date for calendar range',
57
- example: '2024-01-01T00:00:00Z'
56
+ description: 'Start date for calendar range (YYYY-MM-DD)',
57
+ example: '2024-01-01'
58
58
  }),
59
59
  (0, _classvalidator.IsNotEmpty)(),
60
- (0, _classvalidator.IsDate)(),
61
- (0, _classtransformer.Type)(()=>Date),
62
- _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
60
+ (0, _classvalidator.IsString)(),
61
+ (0, _classvalidator.Matches)(/^\d{4}-\d{2}-\d{2}$/, {
62
+ message: 'startDate must be in YYYY-MM-DD format'
63
+ }),
64
+ _ts_metadata("design:type", String)
63
65
  ], CalendarQueryDto.prototype, "startDate", void 0);
64
66
  _ts_decorate([
65
67
  (0, _swagger.ApiProperty)({
66
- description: 'End date for calendar range',
67
- example: '2024-01-31T23:59:59Z'
68
+ description: 'End date for calendar range (YYYY-MM-DD)',
69
+ example: '2024-01-31'
68
70
  }),
69
71
  (0, _classvalidator.IsNotEmpty)(),
70
- (0, _classvalidator.IsDate)(),
71
- (0, _classtransformer.Type)(()=>Date),
72
- _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
72
+ (0, _classvalidator.IsString)(),
73
+ (0, _classvalidator.Matches)(/^\d{4}-\d{2}-\d{2}$/, {
74
+ message: 'endDate must be in YYYY-MM-DD format'
75
+ }),
76
+ _ts_metadata("design:type", String)
73
77
  ], CalendarQueryDto.prototype, "endDate", void 0);
74
78
  _ts_decorate([
75
79
  (0, _swagger.ApiPropertyOptional)({
@@ -102,12 +106,15 @@ let CalendarEventResponseDto = class CalendarEventResponseDto {
102
106
  _define_property(this, "id", void 0);
103
107
  _define_property(this, "title", void 0);
104
108
  _define_property(this, "description", void 0);
105
- _define_property(this, "meetingLink", void 0);
106
- _define_property(this, "startDateTime", void 0);
107
- _define_property(this, "endDateTime", void 0);
109
+ _define_property(this, "eventDate", void 0);
110
+ _define_property(this, "startTime", void 0);
111
+ _define_property(this, "endTime", void 0);
108
112
  _define_property(this, "isAllDay", void 0);
109
113
  _define_property(this, "recurrenceType", void 0);
114
+ _define_property(this, "recurrenceEndDate", void 0);
115
+ _define_property(this, "weekDays", void 0);
110
116
  _define_property(this, "color", void 0);
117
+ _define_property(this, "meetingLink", void 0);
111
118
  _define_property(this, "isActive", void 0);
112
119
  _define_property(this, "originalEventId", void 0);
113
120
  _define_property(this, "isRecurrenceInstance", void 0);
@@ -131,19 +138,19 @@ _ts_decorate([
131
138
  ], CalendarEventResponseDto.prototype, "description", void 0);
132
139
  _ts_decorate([
133
140
  (0, _classtransformer.Expose)(),
134
- (0, _swagger.ApiPropertyOptional)(),
135
- _ts_metadata("design:type", Object)
136
- ], CalendarEventResponseDto.prototype, "meetingLink", void 0);
141
+ (0, _swagger.ApiProperty)(),
142
+ _ts_metadata("design:type", String)
143
+ ], CalendarEventResponseDto.prototype, "eventDate", void 0);
137
144
  _ts_decorate([
138
145
  (0, _classtransformer.Expose)(),
139
146
  (0, _swagger.ApiProperty)(),
140
- _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
141
- ], CalendarEventResponseDto.prototype, "startDateTime", void 0);
147
+ _ts_metadata("design:type", String)
148
+ ], CalendarEventResponseDto.prototype, "startTime", void 0);
142
149
  _ts_decorate([
143
150
  (0, _classtransformer.Expose)(),
144
151
  (0, _swagger.ApiProperty)(),
145
- _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
146
- ], CalendarEventResponseDto.prototype, "endDateTime", void 0);
152
+ _ts_metadata("design:type", String)
153
+ ], CalendarEventResponseDto.prototype, "endTime", void 0);
147
154
  _ts_decorate([
148
155
  (0, _classtransformer.Expose)(),
149
156
  (0, _swagger.ApiProperty)(),
@@ -154,11 +161,30 @@ _ts_decorate([
154
161
  (0, _swagger.ApiProperty)(),
155
162
  _ts_metadata("design:type", String)
156
163
  ], CalendarEventResponseDto.prototype, "recurrenceType", void 0);
164
+ _ts_decorate([
165
+ (0, _classtransformer.Expose)(),
166
+ (0, _swagger.ApiPropertyOptional)(),
167
+ _ts_metadata("design:type", Object)
168
+ ], CalendarEventResponseDto.prototype, "recurrenceEndDate", void 0);
169
+ _ts_decorate([
170
+ (0, _classtransformer.Expose)(),
171
+ (0, _swagger.ApiPropertyOptional)({
172
+ type: [
173
+ String
174
+ ]
175
+ }),
176
+ _ts_metadata("design:type", Object)
177
+ ], CalendarEventResponseDto.prototype, "weekDays", void 0);
157
178
  _ts_decorate([
158
179
  (0, _classtransformer.Expose)(),
159
180
  (0, _swagger.ApiProperty)(),
160
181
  _ts_metadata("design:type", String)
161
182
  ], CalendarEventResponseDto.prototype, "color", void 0);
183
+ _ts_decorate([
184
+ (0, _classtransformer.Expose)(),
185
+ (0, _swagger.ApiPropertyOptional)(),
186
+ _ts_metadata("design:type", Object)
187
+ ], CalendarEventResponseDto.prototype, "meetingLink", void 0);
162
188
  _ts_decorate([
163
189
  (0, _classtransformer.Expose)(),
164
190
  (0, _swagger.ApiProperty)(),
@@ -9,9 +9,6 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- get BulkAddParticipantsDto () {
13
- return BulkAddParticipantsDto;
14
- },
15
12
  get CreateEventParticipantDto () {
16
13
  return CreateEventParticipantDto;
17
14
  },
@@ -57,7 +54,6 @@ let CreateEventParticipantDto = class CreateEventParticipantDto {
57
54
  _define_property(this, "userId", void 0);
58
55
  _define_property(this, "status", void 0);
59
56
  _define_property(this, "isOrganizer", void 0);
60
- _define_property(this, "metadata", void 0);
61
57
  }
62
58
  };
63
59
  _ts_decorate([
@@ -97,13 +93,6 @@ _ts_decorate([
97
93
  (0, _classvalidator.IsBoolean)(),
98
94
  _ts_metadata("design:type", Boolean)
99
95
  ], CreateEventParticipantDto.prototype, "isOrganizer", void 0);
100
- _ts_decorate([
101
- (0, _swagger.ApiPropertyOptional)({
102
- description: 'Additional metadata'
103
- }),
104
- (0, _classvalidator.IsOptional)(),
105
- _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
106
- ], CreateEventParticipantDto.prototype, "metadata", void 0);
107
96
  let UpdateEventParticipantDto = class UpdateEventParticipantDto extends (0, _swagger.PartialType)(CreateEventParticipantDto) {
108
97
  constructor(...args){
109
98
  super(...args), _define_property(this, "id", void 0);
@@ -125,7 +114,6 @@ let EventParticipantResponseDto = class EventParticipantResponseDto {
125
114
  _define_property(this, "userId", void 0);
126
115
  _define_property(this, "status", void 0);
127
116
  _define_property(this, "isOrganizer", void 0);
128
- _define_property(this, "metadata", void 0);
129
117
  _define_property(this, "createdAt", void 0);
130
118
  _define_property(this, "updatedAt", void 0);
131
119
  }
@@ -157,11 +145,6 @@ _ts_decorate([
157
145
  (0, _swagger.ApiProperty)(),
158
146
  _ts_metadata("design:type", Boolean)
159
147
  ], EventParticipantResponseDto.prototype, "isOrganizer", void 0);
160
- _ts_decorate([
161
- (0, _classtransformer.Expose)(),
162
- (0, _swagger.ApiPropertyOptional)(),
163
- _ts_metadata("design:type", Object)
164
- ], EventParticipantResponseDto.prototype, "metadata", void 0);
165
148
  _ts_decorate([
166
149
  (0, _classtransformer.Expose)(),
167
150
  (0, _swagger.ApiProperty)(),
@@ -196,31 +179,3 @@ _ts_decorate([
196
179
  (0, _classvalidator.IsEnum)(_enums.ParticipantStatus),
197
180
  _ts_metadata("design:type", typeof _enums.ParticipantStatus === "undefined" ? Object : _enums.ParticipantStatus)
198
181
  ], UpdateParticipantStatusDto.prototype, "status", void 0);
199
- let BulkAddParticipantsDto = class BulkAddParticipantsDto {
200
- constructor(){
201
- _define_property(this, "eventId", void 0);
202
- _define_property(this, "userIds", void 0);
203
- }
204
- };
205
- _ts_decorate([
206
- (0, _swagger.ApiProperty)({
207
- description: 'Event ID',
208
- example: 'f2e9c8d0-7a2a-11eb-9439-0242ac130002'
209
- }),
210
- (0, _classvalidator.IsNotEmpty)(),
211
- (0, _classvalidator.IsUUID)(),
212
- _ts_metadata("design:type", String)
213
- ], BulkAddParticipantsDto.prototype, "eventId", void 0);
214
- _ts_decorate([
215
- (0, _swagger.ApiProperty)({
216
- description: 'User IDs to add as participants',
217
- type: [
218
- String
219
- ]
220
- }),
221
- (0, _classvalidator.IsNotEmpty)(),
222
- (0, _classvalidator.IsUUID)('4', {
223
- each: true
224
- }),
225
- _ts_metadata("design:type", Array)
226
- ], BulkAddParticipantsDto.prototype, "userIds", void 0);