@flusys/nestjs-event-manager 7.1.0 → 8.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 (103) hide show
  1. package/adapters/event-manager.adapter.d.ts +2 -2
  2. package/adapters/index.d.ts +1 -1
  3. package/config/index.d.ts +3 -3
  4. package/controllers/event.controller.d.ts +3 -3
  5. package/controllers/index.d.ts +1 -1
  6. package/docs/event-manager-swagger.config.d.ts +2 -2
  7. package/docs/index.d.ts +1 -1
  8. package/dtos/calendar-query.dto.d.ts +1 -1
  9. package/dtos/event.dto.d.ts +1 -1
  10. package/dtos/index.d.ts +3 -3
  11. package/entities/event-with-company.entity.d.ts +1 -1
  12. package/entities/index.d.ts +8 -8
  13. package/fesm/477.js +1798 -0
  14. package/fesm/833.js +840 -0
  15. package/fesm/adapters/index.js +884 -1
  16. package/fesm/config/index.js +87 -3
  17. package/fesm/controllers/index.js +365 -1
  18. package/fesm/docs/index.js +155 -2
  19. package/fesm/dtos/index.js +720 -3
  20. package/fesm/entities/index.js +350 -11
  21. package/fesm/index.js +121 -9
  22. package/fesm/interfaces/index.js +16 -2
  23. package/fesm/modules/index.js +13 -1
  24. package/fesm/runtime.js +85 -0
  25. package/fesm/services/index.js +272 -4
  26. package/index.d.ts +9 -9
  27. package/interfaces/event-manager-module.interface.d.ts +3 -3
  28. package/interfaces/event.interface.d.ts +1 -1
  29. package/interfaces/index.d.ts +2 -2
  30. package/modules/event-manager.module.d.ts +2 -2
  31. package/modules/index.d.ts +1 -1
  32. package/package.json +29 -39
  33. package/services/event-manager-config.service.d.ts +3 -3
  34. package/services/event-manager-datasource.provider.d.ts +3 -3
  35. package/services/event-manager-helper.service.d.ts +3 -3
  36. package/services/event.service.d.ts +7 -7
  37. package/services/index.d.ts +4 -4
  38. package/cjs/adapters/event-manager.adapter.js +0 -65
  39. package/cjs/adapters/event-manager.adapter.spec.js +0 -104
  40. package/cjs/adapters/index.js +0 -18
  41. package/cjs/config/event-actions.js +0 -31
  42. package/cjs/config/event-manager.constants.js +0 -13
  43. package/cjs/config/index.js +0 -20
  44. package/cjs/config/message-keys.js +0 -27
  45. package/cjs/controllers/event.controller.js +0 -190
  46. package/cjs/controllers/event.controller.spec.js +0 -156
  47. package/cjs/controllers/index.js +0 -18
  48. package/cjs/docs/event-manager-swagger.config.js +0 -125
  49. package/cjs/docs/event-manager-swagger.config.spec.js +0 -65
  50. package/cjs/docs/index.js +0 -21
  51. package/cjs/dtos/calendar-query.dto.js +0 -212
  52. package/cjs/dtos/event-participant.dto.js +0 -181
  53. package/cjs/dtos/event.dto.js +0 -343
  54. package/cjs/dtos/index.js +0 -20
  55. package/cjs/entities/event-participant.entity.js +0 -89
  56. package/cjs/entities/event-with-company.entity.js +0 -56
  57. package/cjs/entities/event.entity.js +0 -156
  58. package/cjs/entities/index.js +0 -55
  59. package/cjs/entities/index.spec.js +0 -18
  60. package/cjs/index.js +0 -27
  61. package/cjs/interfaces/event-manager-module.interface.js +0 -4
  62. package/cjs/interfaces/event.interface.js +0 -4
  63. package/cjs/interfaces/index.js +0 -19
  64. package/cjs/modules/event-manager.module.js +0 -132
  65. package/cjs/modules/event-manager.module.spec.js +0 -146
  66. package/cjs/modules/index.js +0 -18
  67. package/cjs/services/event-manager-config.service.js +0 -76
  68. package/cjs/services/event-manager-config.service.spec.js +0 -111
  69. package/cjs/services/event-manager-datasource.provider.js +0 -84
  70. package/cjs/services/event-manager-datasource.provider.spec.js +0 -198
  71. package/cjs/services/event-manager-helper.service.js +0 -235
  72. package/cjs/services/event-manager-helper.service.spec.js +0 -327
  73. package/cjs/services/event.service.js +0 -481
  74. package/cjs/services/event.service.spec.js +0 -929
  75. package/cjs/services/index.js +0 -21
  76. package/fesm/adapters/event-manager.adapter.js +0 -55
  77. package/fesm/adapters/event-manager.adapter.spec.js +0 -100
  78. package/fesm/config/event-actions.js +0 -10
  79. package/fesm/config/event-manager.constants.js +0 -3
  80. package/fesm/config/message-keys.js +0 -9
  81. package/fesm/controllers/event.controller.js +0 -180
  82. package/fesm/controllers/event.controller.spec.js +0 -152
  83. package/fesm/docs/event-manager-swagger.config.js +0 -118
  84. package/fesm/docs/event-manager-swagger.config.spec.js +0 -61
  85. package/fesm/dtos/calendar-query.dto.js +0 -194
  86. package/fesm/dtos/event-participant.dto.js +0 -157
  87. package/fesm/dtos/event.dto.js +0 -322
  88. package/fesm/entities/event-participant.entity.js +0 -79
  89. package/fesm/entities/event-with-company.entity.js +0 -46
  90. package/fesm/entities/event.entity.js +0 -146
  91. package/fesm/entities/index.spec.js +0 -14
  92. package/fesm/interfaces/event-manager-module.interface.js +0 -3
  93. package/fesm/interfaces/event.interface.js +0 -1
  94. package/fesm/modules/event-manager.module.js +0 -122
  95. package/fesm/modules/event-manager.module.spec.js +0 -142
  96. package/fesm/services/event-manager-config.service.js +0 -66
  97. package/fesm/services/event-manager-config.service.spec.js +0 -107
  98. package/fesm/services/event-manager-datasource.provider.js +0 -74
  99. package/fesm/services/event-manager-datasource.provider.spec.js +0 -194
  100. package/fesm/services/event-manager-helper.service.js +0 -225
  101. package/fesm/services/event-manager-helper.service.spec.js +0 -323
  102. package/fesm/services/event.service.js +0 -471
  103. package/fesm/services/event.service.spec.js +0 -925
@@ -1,104 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- const _nestjsshared = require("@flusys/nestjs-shared");
6
- const _eventmanageradapter = require("./event-manager.adapter");
7
- describe('EventManagerAdapter', ()=>{
8
- let adapter;
9
- let mockHelper;
10
- beforeEach(()=>{
11
- mockHelper = {
12
- createEvent: jest.fn(),
13
- updateParticipantStatus: jest.fn(),
14
- getEventsForUser: jest.fn(),
15
- getEventById: jest.fn()
16
- };
17
- adapter = new _eventmanageradapter.EventManagerAdapter(mockHelper);
18
- });
19
- describe('createEvent', ()=>{
20
- it('delegates to the helper service and returns its result', async ()=>{
21
- const options = {
22
- title: 'Sprint Planning',
23
- eventDate: '2026-04-03',
24
- startTime: '09:00',
25
- endTime: '10:00'
26
- };
27
- const expected = {
28
- id: 'event-uuid-1',
29
- title: 'Sprint Planning',
30
- description: null,
31
- eventDate: '2026-04-03',
32
- startTime: '09:00',
33
- endTime: '10:00',
34
- isAllDay: false,
35
- recurrenceType: 'none',
36
- recurrenceEndDate: null,
37
- weekDays: null,
38
- color: '#3B82F6',
39
- meetingLink: null,
40
- isActive: true,
41
- companyId: null,
42
- createdAt: new Date(),
43
- updatedAt: new Date()
44
- };
45
- mockHelper.createEvent.mockResolvedValue(expected);
46
- const result = await adapter.createEvent(options);
47
- expect(mockHelper.createEvent).toHaveBeenCalledWith(options);
48
- expect(result).toBe(expected);
49
- });
50
- it('propagates errors thrown by the helper service', async ()=>{
51
- mockHelper.createEvent.mockRejectedValue(new Error('boom'));
52
- await expect(adapter.createEvent({})).rejects.toThrow('boom');
53
- });
54
- });
55
- describe('updateParticipantStatus', ()=>{
56
- it('delegates to the helper service', async ()=>{
57
- mockHelper.updateParticipantStatus.mockResolvedValue(undefined);
58
- await adapter.updateParticipantStatus('participant-uuid-1', _nestjsshared.ParticipantStatus.ACCEPTED);
59
- expect(mockHelper.updateParticipantStatus).toHaveBeenCalledWith('participant-uuid-1', _nestjsshared.ParticipantStatus.ACCEPTED);
60
- });
61
- });
62
- describe('getEventsForUser', ()=>{
63
- it('converts Date range boundaries to YYYY-MM-DD strings before delegating', async ()=>{
64
- mockHelper.getEventsForUser.mockResolvedValue([]);
65
- const startDate = new Date('2026-04-01T00:00:00.000Z');
66
- const endDate = new Date('2026-04-30T23:59:59.000Z');
67
- await adapter.getEventsForUser('user-uuid-1', startDate, endDate, 'company-uuid-1');
68
- expect(mockHelper.getEventsForUser).toHaveBeenCalledWith('user-uuid-1', '2026-04-01', '2026-04-30', 'company-uuid-1');
69
- });
70
- it('forwards undefined companyId when not supplied', async ()=>{
71
- mockHelper.getEventsForUser.mockResolvedValue([]);
72
- const startDate = new Date('2026-04-01T00:00:00.000Z');
73
- const endDate = new Date('2026-04-02T00:00:00.000Z');
74
- await adapter.getEventsForUser('user-uuid-1', startDate, endDate);
75
- expect(mockHelper.getEventsForUser).toHaveBeenCalledWith('user-uuid-1', '2026-04-01', '2026-04-02', undefined);
76
- });
77
- it('returns the events resolved by the helper service', async ()=>{
78
- const events = [
79
- {
80
- id: 'event-uuid-1'
81
- }
82
- ];
83
- mockHelper.getEventsForUser.mockResolvedValue(events);
84
- const result = await adapter.getEventsForUser('user-uuid-1', new Date('2026-01-01T00:00:00.000Z'), new Date('2026-01-31T00:00:00.000Z'));
85
- expect(result).toBe(events);
86
- });
87
- });
88
- describe('getEventById', ()=>{
89
- it('returns the event resolved by the helper service', async ()=>{
90
- const event = {
91
- id: 'event-uuid-1'
92
- };
93
- mockHelper.getEventById.mockResolvedValue(event);
94
- const result = await adapter.getEventById('event-uuid-1');
95
- expect(mockHelper.getEventById).toHaveBeenCalledWith('event-uuid-1');
96
- expect(result).toBe(event);
97
- });
98
- it('returns null when the helper service finds no matching event', async ()=>{
99
- mockHelper.getEventById.mockResolvedValue(null);
100
- const result = await adapter.getEventById('missing-uuid');
101
- expect(result).toBeNull();
102
- });
103
- });
104
- });
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- _export_star(require("./event-manager.adapter"), exports);
6
- function _export_star(from, to) {
7
- Object.keys(from).forEach(function(k) {
8
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
9
- Object.defineProperty(to, k, {
10
- enumerable: true,
11
- get: function() {
12
- return from[k];
13
- }
14
- });
15
- }
16
- });
17
- return from;
18
- }
@@ -1,31 +0,0 @@
1
- /**
2
- * Domain event actions published by the event manager module, alongside the CRUD
3
- * lifecycle actions every ApiService emits.
4
- */ "use strict";
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- function _export(target, all) {
9
- for(var name in all)Object.defineProperty(target, name, {
10
- enumerable: true,
11
- get: Object.getOwnPropertyDescriptor(all, name).get
12
- });
13
- }
14
- _export(exports, {
15
- get EVENT_MANAGER_EVENT_ACTIONS () {
16
- return EVENT_MANAGER_EVENT_ACTIONS;
17
- },
18
- get EVENT_MANAGER_EVENT_ENTITIES () {
19
- return EVENT_MANAGER_EVENT_ENTITIES;
20
- },
21
- get EVENT_MANAGER_EVENT_MODULE () {
22
- return EVENT_MANAGER_EVENT_MODULE;
23
- }
24
- });
25
- const EVENT_MANAGER_EVENT_ACTIONS = {
26
- PARTICIPANT_STATUS_CHANGED: 'participant-status-changed'
27
- };
28
- const EVENT_MANAGER_EVENT_ENTITIES = {
29
- EVENT: 'event'
30
- };
31
- const EVENT_MANAGER_EVENT_MODULE = 'event-manager';
@@ -1,13 +0,0 @@
1
- /**
2
- * Event Manager Module Constants
3
- */ "use strict";
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- Object.defineProperty(exports, "EVENT_MANAGER_MODULE_OPTIONS", {
8
- enumerable: true,
9
- get: function() {
10
- return EVENT_MANAGER_MODULE_OPTIONS;
11
- }
12
- });
13
- const EVENT_MANAGER_MODULE_OPTIONS = 'EVENT_MANAGER_MODULE_OPTIONS';
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- _export_star(require("./event-actions"), exports);
6
- _export_star(require("./event-manager.constants"), exports);
7
- _export_star(require("./message-keys"), exports);
8
- function _export_star(from, to) {
9
- Object.keys(from).forEach(function(k) {
10
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
11
- Object.defineProperty(to, k, {
12
- enumerable: true,
13
- get: function() {
14
- return from[k];
15
- }
16
- });
17
- }
18
- });
19
- return from;
20
- }
@@ -1,27 +0,0 @@
1
- // ==================== EVENT MANAGER MODULE MESSAGE KEYS ====================
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- function _export(target, all) {
7
- for(var name in all)Object.defineProperty(target, name, {
8
- enumerable: true,
9
- get: Object.getOwnPropertyDescriptor(all, name).get
10
- });
11
- }
12
- _export(exports, {
13
- get EVENT_MESSAGES () {
14
- return EVENT_MESSAGES;
15
- },
16
- get EVENT_PARTICIPANT_MESSAGES () {
17
- return EVENT_PARTICIPANT_MESSAGES;
18
- }
19
- });
20
- const EVENT_MESSAGES = {
21
- GET_ALL_SUCCESS: 'event.get.all.success',
22
- NOT_FOUND: 'event.not.found'
23
- };
24
- const EVENT_PARTICIPANT_MESSAGES = {
25
- NOT_FOUND: 'event.participant.not.found',
26
- STATUS_UPDATE_SUCCESS: 'event.participant.status.update.success'
27
- };
@@ -1,190 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "EventController", {
6
- enumerable: true,
7
- get: function() {
8
- return EventController;
9
- }
10
- });
11
- const _classes = require("@flusys/nestjs-shared/classes");
12
- const _decorators = require("@flusys/nestjs-shared/decorators");
13
- const _dtos = require("@flusys/nestjs-shared/dtos");
14
- const _guards = require("@flusys/nestjs-shared/guards");
15
- const _interfaces = require("@flusys/nestjs-shared/interfaces");
16
- const _common = require("@nestjs/common");
17
- const _swagger = require("@nestjs/swagger");
18
- const _classtransformer = require("class-transformer");
19
- const _config = require("../config");
20
- const _docs = require("../docs");
21
- const _dtos1 = require("../dtos");
22
- const _eventservice = require("../services/event.service");
23
- function _define_property(obj, key, value) {
24
- if (key in obj) {
25
- Object.defineProperty(obj, key, {
26
- value: value,
27
- enumerable: true,
28
- configurable: true,
29
- writable: true
30
- });
31
- } else {
32
- obj[key] = value;
33
- }
34
- return obj;
35
- }
36
- function _ts_decorate(decorators, target, key, desc) {
37
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
38
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
39
- 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;
40
- return c > 3 && r && Object.defineProperty(target, key, r), r;
41
- }
42
- function _ts_metadata(k, v) {
43
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
44
- }
45
- function _ts_param(paramIndex, decorator) {
46
- return function(target, key) {
47
- decorator(target, key, paramIndex);
48
- };
49
- }
50
- let EventController = class EventController extends (0, _classes.createApiController)(_dtos1.CreateEventDto, _dtos1.UpdateEventDto, _dtos1.EventResponseDto, {
51
- entityName: 'event',
52
- security: {
53
- insert: {
54
- level: 'permission',
55
- permissions: [
56
- _docs.EVENT_PERMISSIONS.CREATE
57
- ]
58
- },
59
- insertMany: {
60
- level: 'permission',
61
- permissions: [
62
- _docs.EVENT_PERMISSIONS.CREATE
63
- ]
64
- },
65
- getById: {
66
- level: 'permission',
67
- permissions: [
68
- _docs.EVENT_PERMISSIONS.READ
69
- ]
70
- },
71
- getAll: {
72
- level: 'permission',
73
- permissions: [
74
- _docs.EVENT_PERMISSIONS.READ
75
- ]
76
- },
77
- update: {
78
- level: 'permission',
79
- permissions: [
80
- _docs.EVENT_PERMISSIONS.UPDATE
81
- ]
82
- },
83
- updateMany: {
84
- level: 'permission',
85
- permissions: [
86
- _docs.EVENT_PERMISSIONS.UPDATE
87
- ]
88
- },
89
- delete: {
90
- level: 'permission',
91
- permissions: [
92
- _docs.EVENT_PERMISSIONS.DELETE
93
- ]
94
- }
95
- }
96
- }) {
97
- async getCalendarEvents(dto, user) {
98
- const events = await this.eventService.getEventsForCalendarRange(dto, user);
99
- const plainOptions = {
100
- excludeExtraneousValues: true
101
- };
102
- const data = (0, _classtransformer.plainToInstance)(_dtos1.CalendarEventResponseDto, events, plainOptions);
103
- return {
104
- success: true,
105
- message: 'Calendar events retrieved successfully',
106
- messageKey: _config.EVENT_MESSAGES.GET_ALL_SUCCESS,
107
- data,
108
- meta: {
109
- total: data.length,
110
- page: 0,
111
- pageSize: data.length,
112
- count: data.length
113
- }
114
- };
115
- }
116
- async updateParticipantStatus(dto, user) {
117
- const participant = await this.eventService.updateParticipantStatus(dto, user);
118
- const plainOptions = {
119
- excludeExtraneousValues: true
120
- };
121
- return {
122
- success: true,
123
- message: 'Participant status updated successfully',
124
- messageKey: _config.EVENT_PARTICIPANT_MESSAGES.STATUS_UPDATE_SUCCESS,
125
- data: (0, _classtransformer.plainToInstance)(_dtos1.EventParticipantResponseDto, participant, plainOptions)
126
- };
127
- }
128
- constructor(eventService){
129
- super(eventService), _define_property(this, "eventService", void 0), this.eventService = eventService;
130
- }
131
- };
132
- _ts_decorate([
133
- (0, _common.Post)('calendar'),
134
- (0, _common.UseGuards)(_guards.JwtAuthGuard),
135
- (0, _swagger.ApiBearerAuth)(),
136
- (0, _common.HttpCode)(_common.HttpStatus.OK),
137
- (0, _swagger.ApiOperation)({
138
- summary: 'Get events for calendar range with recurrence expansion'
139
- }),
140
- (0, _swagger.ApiBody)({
141
- type: _dtos1.CalendarQueryDto
142
- }),
143
- (0, _swagger.ApiResponse)({
144
- status: 200,
145
- description: 'Calendar events retrieved successfully',
146
- type: _dtos.ListResponseDto
147
- }),
148
- _ts_param(0, (0, _common.Body)()),
149
- _ts_param(1, (0, _decorators.CurrentUser)()),
150
- _ts_metadata("design:type", Function),
151
- _ts_metadata("design:paramtypes", [
152
- typeof _dtos1.CalendarQueryDto === "undefined" ? Object : _dtos1.CalendarQueryDto,
153
- typeof _interfaces.ILoggedUserInfo === "undefined" ? Object : _interfaces.ILoggedUserInfo
154
- ]),
155
- _ts_metadata("design:returntype", Promise)
156
- ], EventController.prototype, "getCalendarEvents", null);
157
- _ts_decorate([
158
- (0, _common.Post)('update-participant-status'),
159
- (0, _common.UseGuards)(_guards.JwtAuthGuard, _guards.PermissionGuard),
160
- (0, _swagger.ApiBearerAuth)(),
161
- (0, _common.HttpCode)(_common.HttpStatus.OK),
162
- (0, _decorators.RequirePermission)(_docs.EVENT_PERMISSIONS.UPDATE),
163
- (0, _swagger.ApiOperation)({
164
- summary: 'Update participant status (accept/decline/tentative)'
165
- }),
166
- (0, _swagger.ApiBody)({
167
- type: _dtos1.UpdateParticipantStatusDto
168
- }),
169
- (0, _swagger.ApiResponse)({
170
- status: 200,
171
- type: _dtos.SingleResponseDto
172
- }),
173
- _ts_param(0, (0, _common.Body)()),
174
- _ts_param(1, (0, _decorators.CurrentUser)()),
175
- _ts_metadata("design:type", Function),
176
- _ts_metadata("design:paramtypes", [
177
- typeof _dtos1.UpdateParticipantStatusDto === "undefined" ? Object : _dtos1.UpdateParticipantStatusDto,
178
- typeof _interfaces.ILoggedUserInfo === "undefined" ? Object : _interfaces.ILoggedUserInfo
179
- ]),
180
- _ts_metadata("design:returntype", Promise)
181
- ], EventController.prototype, "updateParticipantStatus", null);
182
- EventController = _ts_decorate([
183
- (0, _swagger.ApiTags)('Events'),
184
- (0, _common.Controller)('event-manager/event'),
185
- _ts_param(0, (0, _common.Inject)(_eventservice.EventService)),
186
- _ts_metadata("design:type", Function),
187
- _ts_metadata("design:paramtypes", [
188
- typeof _eventservice.EventService === "undefined" ? Object : _eventservice.EventService
189
- ])
190
- ], EventController);
@@ -1,156 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- const _common = require("@nestjs/common");
6
- const _enums = require("@flusys/nestjs-shared/enums");
7
- const _loggedusermock = require("@test-utils/mocks/logged-user.mock");
8
- const _config = require("../config");
9
- const _eventcontroller = require("./event.controller");
10
- function buildCalendarEvent(overrides = {}) {
11
- return {
12
- id: 'event-uuid-1',
13
- title: 'Sprint Planning',
14
- description: null,
15
- eventDate: '2026-04-03',
16
- startTime: '09:00',
17
- endTime: '10:00',
18
- isAllDay: false,
19
- recurrenceType: _enums.RecurrenceType.NONE,
20
- recurrenceEndDate: null,
21
- weekDays: null,
22
- color: '#3B82F6',
23
- meetingLink: null,
24
- isActive: true,
25
- createdAt: new Date('2026-01-01T00:00:00Z'),
26
- updatedAt: new Date('2026-01-01T00:00:00Z'),
27
- deletedAt: null,
28
- createdById: null,
29
- updatedById: null,
30
- deletedById: null,
31
- ...overrides
32
- };
33
- }
34
- describe('EventController', ()=>{
35
- let controller;
36
- let mockService;
37
- const user = (0, _loggedusermock.buildMockUser)();
38
- beforeEach(()=>{
39
- mockService = {
40
- getEventsForCalendarRange: jest.fn(),
41
- updateParticipantStatus: jest.fn()
42
- };
43
- controller = new _eventcontroller.EventController(mockService);
44
- });
45
- describe('getCalendarEvents', ()=>{
46
- it('returns a ListResponseDto shaped payload with meta reflecting the result count', async ()=>{
47
- const events = [
48
- buildCalendarEvent(),
49
- buildCalendarEvent({
50
- id: 'event-uuid-2'
51
- })
52
- ];
53
- mockService.getEventsForCalendarRange.mockResolvedValue(events);
54
- const dto = {
55
- startDate: '2026-04-01',
56
- endDate: '2026-04-30'
57
- };
58
- const result = await controller.getCalendarEvents(dto, user);
59
- expect(mockService.getEventsForCalendarRange).toHaveBeenCalledWith(dto, user);
60
- expect(result.success).toBe(true);
61
- expect(result.messageKey).toBe(_config.EVENT_MESSAGES.GET_ALL_SUCCESS);
62
- expect(result.data).toHaveLength(2);
63
- expect(result.meta).toEqual({
64
- total: 2,
65
- page: 0,
66
- pageSize: 2,
67
- count: 2
68
- });
69
- });
70
- it('returns an empty payload with zeroed meta when no events are found', async ()=>{
71
- mockService.getEventsForCalendarRange.mockResolvedValue([]);
72
- const dto = {
73
- startDate: '2026-04-01',
74
- endDate: '2026-04-01'
75
- };
76
- const result = await controller.getCalendarEvents(dto, user);
77
- expect(result.data).toEqual([]);
78
- expect(result.meta).toEqual({
79
- total: 0,
80
- page: 0,
81
- pageSize: 0,
82
- count: 0
83
- });
84
- });
85
- it('serializes events through CalendarEventResponseDto, exposing only declared fields', async ()=>{
86
- const events = [
87
- buildCalendarEvent({
88
- originalEventId: 'event-uuid-1',
89
- isRecurrenceInstance: true,
90
- // extraneous field that must be stripped by excludeExtraneousValues
91
- ...{
92
- secretInternalField: 'should-not-leak'
93
- }
94
- })
95
- ];
96
- mockService.getEventsForCalendarRange.mockResolvedValue(events);
97
- const dto = {
98
- startDate: '2026-04-01',
99
- endDate: '2026-04-30'
100
- };
101
- const result = await controller.getCalendarEvents(dto, user);
102
- const [firstEvent] = result.data ?? [];
103
- expect(firstEvent).not.toHaveProperty('secretInternalField');
104
- expect(firstEvent).toMatchObject({
105
- id: 'event-uuid-1',
106
- originalEventId: 'event-uuid-1',
107
- isRecurrenceInstance: true
108
- });
109
- });
110
- it('propagates errors raised by the service', async ()=>{
111
- mockService.getEventsForCalendarRange.mockRejectedValue(new Error('db down'));
112
- const dto = {
113
- startDate: '2026-04-01',
114
- endDate: '2026-04-30'
115
- };
116
- await expect(controller.getCalendarEvents(dto, user)).rejects.toThrow('db down');
117
- });
118
- });
119
- describe('updateParticipantStatus', ()=>{
120
- it('returns a SingleResponseDto shaped payload on success', async ()=>{
121
- const participant = {
122
- id: 'participant-uuid-1',
123
- eventId: 'event-uuid-1',
124
- userId: user.id,
125
- status: _enums.ParticipantStatus.ACCEPTED,
126
- isOrganizer: false,
127
- createdAt: new Date('2026-01-01T00:00:00Z'),
128
- updatedAt: new Date('2026-01-02T00:00:00Z')
129
- };
130
- mockService.updateParticipantStatus.mockResolvedValue(participant);
131
- const dto = {
132
- id: 'participant-uuid-1',
133
- status: _enums.ParticipantStatus.ACCEPTED
134
- };
135
- const result = await controller.updateParticipantStatus(dto, user);
136
- expect(mockService.updateParticipantStatus).toHaveBeenCalledWith(dto, user);
137
- expect(result.success).toBe(true);
138
- expect(result.messageKey).toBe(_config.EVENT_PARTICIPANT_MESSAGES.STATUS_UPDATE_SUCCESS);
139
- expect(result.data).toMatchObject({
140
- id: 'participant-uuid-1',
141
- status: _enums.ParticipantStatus.ACCEPTED
142
- });
143
- });
144
- it('propagates a NotFoundException raised by the service', async ()=>{
145
- mockService.updateParticipantStatus.mockRejectedValue(new _common.NotFoundException({
146
- message: 'Event participant not found',
147
- messageKey: _config.EVENT_PARTICIPANT_MESSAGES.NOT_FOUND
148
- }));
149
- const dto = {
150
- id: 'missing-uuid',
151
- status: _enums.ParticipantStatus.DECLINED
152
- };
153
- await expect(controller.updateParticipantStatus(dto, user)).rejects.toThrow(_common.NotFoundException);
154
- });
155
- });
156
- });
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- _export_star(require("./event.controller"), exports);
6
- function _export_star(from, to) {
7
- Object.keys(from).forEach(function(k) {
8
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
9
- Object.defineProperty(to, k, {
10
- enumerable: true,
11
- get: function() {
12
- return from[k];
13
- }
14
- });
15
- }
16
- });
17
- return from;
18
- }